diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/it.json index 6dada8fba7..6944813279 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/it.json @@ -2,13 +2,13 @@ "culture": "it", "texts": { "Account": "Account ABP - Accesso e registrazione | ABP.IO", - "Welcome": "benvenuto", + "Welcome": "Benvenuto", "UseOneOfTheFollowingLinksToContinue": "Usa uno dei seguenti link per continuare", "FrameworkHomePage": "Home page del framework", "FrameworkDocumentation": "Documentazione del framework", "OfficialBlog": "Blog ufficiale", - "CommercialHomePage": "Home page commerciale", - "CommercialSupportWebSite": "Sito web di supporto commerciale", + "CommercialHomePage": "Home page di Commercial", + "CommercialSupportWebSite": "Sito web supporto di Commercial", "CommunityWebSite": "Sito web della comunità ABP" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/fi.json index 488e07a1d0..76904c06d4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/fi.json @@ -108,12 +108,12 @@ "LicenseStartDate": "Lisenssin aloituspäivä", "LicenseEndDate": "Lisenssin päättymispäivä", "OrganizationNamePlaceholder": "Organisaation nimi...", - "TotalQuestionCountPlaceholder": "Kysymysten kokonaismäärä ...", - "RemainingQuestionCountPlaceholder": "Jäljellä oleva kysymysten määrä ...", + "TotalQuestionCountPlaceholder": "Kysymysten kokonaismäärä...", + "RemainingQuestionCountPlaceholder": "Jäljellä oleva kysymysten määrä...", "LicenseTypePlaceholder": "Lisenssi-tyyppi...", "CreationDatePlaceholder": "Luomispäivä...", - "LicenseStartDatePlaceholder": "Lisenssin aloituspäivä ...", - "LicenseEndDatePlaceholder": "Lisenssin päättymispäivä ...", + "LicenseStartDatePlaceholder": "Lisenssin aloituspäivä...", + "LicenseEndDatePlaceholder": "Lisenssin päättymispäivä...", "UsernameOrEmail": "Käyttäjätunnus tai sähköpostiosoite", "UsernameOrEmailPlaceholder": "Käyttäjätunnus tai sähköpostiosoite...", "Member": "Jäsen", @@ -277,6 +277,6 @@ "ThisExtensionIsNotAllowed": "Tätä laajennusta ei sallita.", "TheFileIsTooLarge": "Tiedosto on liian suuri!", "ArticleDeletionConfirmationMessage": "Haluatko varmasti poistaa tämän artikkelin vaikeasti?", - "ChooseCoverImage": "Valitse kansikuva ..." + "ChooseCoverImage": "Valitse kansikuva..." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/fr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/fr.json index 2a2d8ba568..189ea8a482 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/fr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/fr.json @@ -108,12 +108,12 @@ "LicenseStartDate": "Date de début de la licence", "LicenseEndDate": "Date de fin de licence", "OrganizationNamePlaceholder": "Nom de l'organisation...", - "TotalQuestionCountPlaceholder": "Nombre total de questions ...", - "RemainingQuestionCountPlaceholder": "Nombre de questions restantes ...", + "TotalQuestionCountPlaceholder": "Nombre total de questions...", + "RemainingQuestionCountPlaceholder": "Nombre de questions restantes...", "LicenseTypePlaceholder": "Type de licence...", "CreationDatePlaceholder": "Date de création...", - "LicenseStartDatePlaceholder": "Date de début de la licence ...", - "LicenseEndDatePlaceholder": "Date de fin de licence ...", + "LicenseStartDatePlaceholder": "Date de début de la licence...", + "LicenseEndDatePlaceholder": "Date de fin de licence...", "UsernameOrEmail": "Nom d'utilisateur ou email", "UsernameOrEmailPlaceholder": "Nom d'utilisateur ou email...", "Member": "Membre", @@ -277,6 +277,6 @@ "ThisExtensionIsNotAllowed": "Cette extension n'est pas autorisée.", "TheFileIsTooLarge": "Le fichier est trop volumineux!", "ArticleDeletionConfirmationMessage": "Voulez-vous vraiment supprimer définitivement cet article?", - "ChooseCoverImage": "Choisissez une image de couverture ..." + "ChooseCoverImage": "Choisissez une image de couverture..." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/hi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/hi.json index 7b0f4ad205..e5beeb11f7 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/hi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/hi.json @@ -108,12 +108,12 @@ "LicenseStartDate": "लाइसेंस शुरू होने की तारीख", "LicenseEndDate": "लाइसेंस की अंतिम तिथि", "OrganizationNamePlaceholder": "संगठन का नाम...", - "TotalQuestionCountPlaceholder": "कुल प्रश्न संख्या ...", - "RemainingQuestionCountPlaceholder": "शेष प्रश्न गणना ...", + "TotalQuestionCountPlaceholder": "कुल प्रश्न संख्या...", + "RemainingQuestionCountPlaceholder": "शेष प्रश्न गणना...", "LicenseTypePlaceholder": "लाइसेंस के प्रकार...", "CreationDatePlaceholder": "निर्माण तिथि...", - "LicenseStartDatePlaceholder": "लाइसेंस शुरू होने की तारीख ...", - "LicenseEndDatePlaceholder": "लाइसेंस की अंतिम तिथि ...", + "LicenseStartDatePlaceholder": "लाइसेंस शुरू होने की तारीख...", + "LicenseEndDatePlaceholder": "लाइसेंस की अंतिम तिथि...", "UsernameOrEmail": "उपयोगकर्ता का नाम या ईमेल", "UsernameOrEmailPlaceholder": "उपयोगकर्ता का नाम या ईमेल...", "Member": "सदस्य", @@ -277,6 +277,6 @@ "ThisExtensionIsNotAllowed": "इस एक्सटेंशन की अनुमति नहीं है।", "TheFileIsTooLarge": "फ़ाइल बहुत बड़ी है!", "ArticleDeletionConfirmationMessage": "क्या आप वाकई इस लेख को हटाना चाहते हैं?", - "ChooseCoverImage": "कवर छवि चुनें ..." + "ChooseCoverImage": "कवर छवि चुनें..." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/it.json index 2aaacd7b86..8a4cb2aa47 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/it.json @@ -5,20 +5,20 @@ "Permission:Manage": "Gestisci organizzazioni", "Permission:DiscountRequests": "Richieste di sconto", "Permission:DiscountManage": "Gestisci le richieste di sconto", - "Permission:Disable": "disattivare", - "Permission:Enable": "Abilitare", + "Permission:Disable": "Disattiva", + "Permission:Enable": "Abilita", "Permission:EnableSendEmail": "Abilita Invia e-mail", "Permission:SendEmail": "Invia una email", "Permission:NpmPackages": "Pacchetti NPM", "Permission:NugetPackages": "Pacchetti Nuget", "Permission:Maintenance": "Manutenzione", - "Permission:Maintain": "Mantenere", - "Permission:ClearCaches": "Cancella cache", + "Permission:Maintain": "Mantieni", + "Permission:ClearCaches": "Pulisci cache", "Permission:Modules": "Moduli", "Permission:Packages": "Pacchi", - "Permission:Edit": "modificare", + "Permission:Edit": "Modifica", "Permission:Delete": "Elimina", - "Permission:Create": "Creare", + "Permission:Create": "Crea", "Permission:Accounting": "Contabilità", "Permission:Accounting:Quotation": "Quotazione", "Permission:Accounting:Invoice": "Fattura", @@ -30,31 +30,31 @@ "NugetPackageDeletionWarningMessage": "Questo pacchetto Nuget verrà eliminato. Lo confermi?", "ModuleDeletionWarningMessage": "Questo modulo verrà eliminato. Lo confermi?", "Name": "Nome", - "DisplayName": "Nome da visualizzare", + "DisplayName": "Nome visualizzato", "ShortDescription": "Breve descrizione", "NameFilter": "Nome", - "CreationTime": "Tempo di creazione", + "CreationTime": "Orario di creazione", "IsPro": "È pro", "IsFreeToActiveLicenseOwners": "Gratuito per i proprietari di licenze", "ShowOnModuleList": "Mostra nell'elenco dei moduli", "EfCoreConfigureMethodName": "Configurare il nome del metodo", "IsProFilter": "È pro", "ApplicationType": "Tipo di applicazione", - "Target": "Bersaglio", - "TargetFilter": "Bersaglio", + "Target": "Obiettivo", + "TargetFilter": "Obiettivo", "ModuleClass": "Classe del modulo", "NugetPackageTarget.DomainShared": "Dominio condiviso", "NugetPackageTarget.Domain": "Dominio", "NugetPackageTarget.Application": "Applicazione", - "NugetPackageTarget.ApplicationContracts": "Contratti applicativi", + "NugetPackageTarget.ApplicationContracts": "Contratti Applicazione", "NugetPackageTarget.HttpApi": "Http Api", - "NugetPackageTarget.HttpApiClient": "Client API HTTP", - "NugetPackageTarget.Web": "ragnatela", + "NugetPackageTarget.HttpApiClient": "Http Api Client", + "NugetPackageTarget.Web": "Web", "NugetPackageTarget.EntityFrameworkCore": "DeleteAllEntityFramework Core", "NugetPackageTarget.MongoDB": "MongoDB", - "Edit": "modificare", + "Edit": "Modifica", "Delete": "Elimina", - "Refresh": "ricaricare", + "Refresh": "Ricarica", "NpmPackages": "Pacchetti NPM", "NugetPackages": "Pacchetti Nuget", "NpmPackageCount": "Conteggio pacchetti NPM", @@ -64,10 +64,10 @@ "CreateANpmPackage": "Crea un pacchetto NPM", "CreateAModule": "Crea un modulo", "CreateANugetPackage": "Crea un pacchetto Nuget", - "AddNew": "Aggiungere nuova", - "PackageAlreadyExist{0}": "Il pacchetto \"{0}\" è già aggiunto.", - "ModuleAlreadyExist{0}": "Il modulo \"{0}\" è già aggiunto.", - "ClearCache": "Cancella cache", + "AddNew": "Aggiungi nuova", + "PackageAlreadyExist{0}": "Il pacchetto \"{0}\" è già stato aggiunto.", + "ModuleAlreadyExist{0}": "Il modulo \"{0}\" è già stato aggiunto.", + "ClearCache": "Pulisci cache", "SuccessfullyCleared": "Cancellato con successo", "Menu:NpmPackages": "Pacchetti NPM", "Menu:Modules": "Moduli", @@ -75,19 +75,19 @@ "Menu:NugetPackages": "Pacchetti Nuget", "CreateAnOrganization": "Crea un'organizzazione", "Organizations": "Organizzazioni", - "LongName": "Nome lungo", + "LongName": "Nome esteso", "LicenseType": "Tipo di licenza", "MissingLicenseTypeField": "Il campo del tipo di licenza è obbligatorio!", "LicenseStartTime": "Ora di inizio della licenza", "LicenseEndTime": "Ora di fine della licenza", "AllowedDeveloperCount": "Conteggio sviluppatori consentito", - "UserNameOrEmailAddress": "Username o Indirizzo Email", + "UserNameOrEmailAddress": "Username o indirizzo Email", "AddOwner": "Aggiungi proprietario", "UserName": "Nome utente", "Email": "E-mail", "Developers": "Sviluppatori", "AddDeveloper": "Aggiungi sviluppatore", - "Create": "Creare", + "Create": "Crea", "UserNotFound": "Utente non trovato", "{0}WillBeRemovedFromDevelopers": "{0} Verrà rimosso dagli sviluppatori, confermi?", "{0}WillBeRemovedFromOwners": "{0} Verrà rimosso dai proprietari, confermi?", @@ -95,7 +95,7 @@ "Computers": "Computer", "UniqueComputerId": "ID computer univoco", "LastSeenDate": "Data dell'ultimo accesso", - "{0}Computer{1}WillBeRemovedFromRecords": "Il computer di {0} ({1}) verrà rimosso dai record", + "{0}Computer{1}WillBeRemovedFromRecords": "Il computer di {0} ({1}) verrà rimosso da quelli registrati", "OrganizationDeletionWarningMessage": "L'organizzazione verrà eliminata", "DeletingLastOwnerWarningMessage": "Un'organizzazione deve avere almeno un proprietario! Pertanto non puoi rimuovere questo proprietario", "This{0}AlreadyExistInThisOrganization": "Questo {0} esiste già in questa organizzazione", @@ -108,12 +108,12 @@ "LicenseStartDate": "Data di inizio della licenza", "LicenseEndDate": "Data di fine della licenza", "OrganizationNamePlaceholder": "Nome dell'organizzazione...", - "TotalQuestionCountPlaceholder": "Conteggio totale delle domande ...", - "RemainingQuestionCountPlaceholder": "Numero di domande rimanenti ...", + "TotalQuestionCountPlaceholder": "Conteggio totale delle domande...", + "RemainingQuestionCountPlaceholder": "Numero di domande rimanenti...", "LicenseTypePlaceholder": "Tipo di licenza...", "CreationDatePlaceholder": "Data di creazione...", - "LicenseStartDatePlaceholder": "Data di inizio della licenza ...", - "LicenseEndDatePlaceholder": "Data di fine della licenza ...", + "LicenseStartDatePlaceholder": "Data di inizio della licenza...", + "LicenseEndDatePlaceholder": "Data di fine della licenza...", "UsernameOrEmail": "Nome utente o email", "UsernameOrEmailPlaceholder": "Nome utente o email...", "Member": "Membro", @@ -126,8 +126,8 @@ "DiscountQuantity": "Quantità di sconto", "DiscountPrice": "Prezzo scontato", "Quotation": "Quotazione", - "ExtraText": "Testo extra", - "ExtraAmount": "Importo extra", + "ExtraText": "Testo ulteriore", + "ExtraAmount": "Importo ulteriore", "DownloadQuotation": "Scarica preventivo", "Invoice": "Fattura", "TaxNumber": "Codice fiscale", @@ -138,22 +138,22 @@ "AddProduct": "Aggiungi prodotto", "AddProductWarning": "Devi aggiungere il prodotto!", "TotalPrice": "Prezzo totale", - "Generate": "creare", + "Generate": "Genera", "MissingQuantityField": "Il campo della quantità è obbligatorio!", "MissingPriceField": "Il campo Prezzo è obbligatorio!", "CodeUsageStatus": "Stato", "Country": "Nazione", "DeveloperCount": "Conteggio sviluppatori", - "RequestCode": "Codice richiesto", + "RequestCode": "Codice richiesta", "WebSite": "Sito web", "GithubUsername": "Nome utente GitHub", "PhoneNumber": "Numero di telefono", "ProjectDescription": "descrizione del progetto", - "Referrer": "Referrer", + "Referrer": "Referente", "DiscountRequests": "Richiesta di sconto", "Copylink": "Copia link", - "Disable": "disattivare", - "Enable": "Abilitare", + "Disable": "Disabilita", + "Enable": "Abilita", "EnableSendEmail": "Abilita Invia e-mail", "SendEmail": "Invia una email", "SuccessfullyDisabled": "Disabilitato con successo", @@ -162,7 +162,7 @@ "SuccessfullySent": "Inviato con successo", "SuccessfullyDeleted": "Eliminato con successo", "DiscountRequestDeletionWarningMessage": "La richiesta di sconto verrà eliminata", - "BusinessType": "tipo di affari", + "BusinessType": "Tipo di affari", "TotalQuestionCount": "Conteggio totale delle domande", "RemainingQuestionCount": "Numero di domande rimanenti", "TotalQuestionMustBeGreaterWarningMessage": "TotalQuestionCount deve essere maggiore di RemainingQuestionCount!", @@ -171,16 +171,16 @@ "Notes": "Appunti", "Menu:Community": "Comunità", "Menu:Articles": "Articoli", - "Wait": "Aspettare", + "Wait": "Attendere", "Approve": "Approvare", "Reject": "Rifiutare", "Details": "Dettagli", "Url": "Url", "Title": "Titolo", - "ContentSource": "Fonte di contenuto", + "ContentSource": "Fonte del contenuto", "Status": "Stato", "ReadArticle": "Leggi l'articolo", - "ArticleHasBeenWaiting": "L'articolo è stato in attesa", + "ArticleHasBeenWaiting": "L'articolo è in attesa", "ArticleHasBeenApproved": "L'articolo è stato approvato", "ArticleHasBeenRejected": "L'articolo è stato respinto", "Permission:Community": "Comunità", @@ -197,10 +197,10 @@ "RemoveCacheConfirmationMessage": "Sei sicuro di aver rimosso la cache per l'articolo \"{0}\"?", "SuccessfullyRemoved": "Cancellato con successo", "RemoveCache": "Rimuovi cache", - "Language": "linguaggio", + "Language": "Lingua", "Optional": "Opzionale", "CreateArticleLanguageInfo": "La lingua in cui è scritto il post", - "Enum:ContentSource:2": "Post video", + "Enum:ContentSource:2": "Pubblica video", "VideoPreview": "Anteprima video", "VideoPreviewErrorMessage": "Impossibile recuperare l'URL del video da Youtube. Ciò può essere causato dal fatto che il video è privato o l'URL fornito non è disponibile.", "DeleteCoverImage": "Elimina immagine di copertina", @@ -214,19 +214,19 @@ "Currency": "Moneta", "Gateway": "Gateway", "State": "Stato", - "FailReason": "Motivo fallito", + "FailReason": "Motivo fallimento", "ReIndexAllPosts": "Reindicizza tutti i post", "ReIndexAllPostsConfirmationMessage": "Sei sicuro di voler reindicizzare tutti i post?", "SuccessfullyReIndexAllPosts": "Tutti i post sono stati reindicizzati con successo.", - "Permission:FullSearch": "Ricerca nel testo completo", + "Permission:FullSearch": "Ricerca in tutto il testo", "Menu:CliAnalytics": "Cli Analytics", "TemplateName": "Nome modello", "TemplateVersion": "Versione modello", - "DatabaseProvider": "Provider di database", - "IsTiered": "È a livelli", + "DatabaseProvider": "Provider del database", + "IsTiered": "Multi livello", "ProjectName": "Nome del progetto", "Username": "Nome utente", - "Tool": "Attrezzo", + "Tool": "Strumento", "Command": "Comando", "UiFramework": "Framework dell'interfaccia utente", "Options": "Opzioni", @@ -234,10 +234,10 @@ "Permission:CliAnalyticses": "Cli Analyticses", "Permission:CliAnalytics": "Cli Analytics", "Search": "Ricerca", - "ClearFilter": "Filtro pulito", - "LicensePrivateKey": "Chiave privata della licenza", - "LicensePublicKey": "Licenza chiave pubblica", - "ApiKey": "Chiave API NuGet", + "ClearFilter": "Pulisci filtro", + "LicensePrivateKey": "Chiave privata licenza", + "LicensePublicKey": "Chiave pubblica licenza", + "ApiKey": "NuGet API key", "ShowInvoiceRequestsOfOrganization": "Richieste di fattura", "ShowQuestionsOfOrganization": "Domande", "Question": "Domanda", @@ -245,7 +245,7 @@ "Questions": "Domande", "InvoiceRequests": "Richieste di fattura", "Address": "Indirizzo", - "TaxNo": "No fiscale", + "TaxNo": "Partiva IVA", "Permission:InvoiceRequest": "Richiesta di fattura", "Permission:Question": "Domanda", "AddNoteSuccessMessage": "Nota aggiunta con successo", @@ -258,8 +258,8 @@ "Enum:EntityChangeType:0": "Creato", "Enum:EntityChangeType:1": "Aggiornato", "Enum:EntityChangeType:2": "Eliminato", - "TenantId": "ID inquilino", - "ChangeTime": "Cambia il tempo", + "TenantId": "ID tenant", + "ChangeTime": "Cambia orario", "EntityTypeFullName": "Nome completo del tipo di entità", "AuditLogsFor{0}Organization": "Log di controllo per l'organizzazione \"{0}\"", "Permission:EntityChange": "Modifica entità", @@ -269,14 +269,14 @@ "EmailSendDate": "Data di invio dell'e-mail", "PaymentRequestsFor{0}Organization": "Richieste di pagamento per l'organizzazione \"{0}\"", "PaymentDetails": "Dettagli di pagamento", - "PaymentProduct": "Prodotto di pagamento", - "ProductName": "nome del prodotto", + "PaymentProduct": "Prodotti pagamento", + "ProductName": "Nome del prodotto", "Code": "Codice", "GenerateInvoice": "Genera fattura", - "ExportOrganizationsToExcel": "esportare in Excel", + "ExportOrganizationsToExcel": "Esporta in Excel", "ThisExtensionIsNotAllowed": "Questa estensione non è consentita.", "TheFileIsTooLarge": "Il file è troppo grande!", "ArticleDeletionConfirmationMessage": "Sei sicuro di voler eliminare definitivamente questo articolo?", - "ChooseCoverImage": "Scegli un'immagine di copertina ..." + "ChooseCoverImage": "Scegli un'immagine di copertina..." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/it.json index 8a0e9d9e0b..755ea4ae46 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/it.json @@ -19,7 +19,7 @@ "JoinOurCommunity": "Unisciti alla nostra community", "GetStartedUpper": "INIZIARE", "ForkMeOnGitHub": "Fork me su GitHub", - "Features": "Caratteristiche", + "Features": "Funzionalità", "GetStarted": "Iniziare", "Documents": "Documenti", "Community": "Comunità", @@ -31,7 +31,7 @@ "Permission:UserInfo": "Informazioni utente", "SeeDocuments": "Vedi Documenti", "Samples": "Campioni", - "Framework": "Struttura", + "Framework": "Framework", "Support": "Supporto" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json index 317ace31b5..8de4891e99 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json @@ -42,7 +42,7 @@ "NotOrganizationMember": "Et ole minkään organisaation jäsen.", "UnsubscribeLicenseExpirationEmailSuccessTitle": "Tilauksen peruutus onnistui", "UnsubscribeLicenseExpirationEmailSuccessMessage": "Et enää saa muistutuksia lisenssin vanhentumispäivästä.", - "IndexPageHeroSection": " Täydellinen verkkokehitysympäristö sisäänrakennettu kehys ", + "IndexPageHeroSection": " Täydellinen verkkokehitysympäristö sisäänrakennettu kehys ", "AbpCommercialShortDescription": "ABP Commercial tarjoaa valmiita sovellusmoduuleja, nopean sovelluskehitystyökalun, ammattimaiset käyttöliittymäteemat, ensiluokkaisen tuen ja paljon muuta.", "LiveDemo": "Live-esittely", "GetLicence": "Hanki lisenssi", @@ -63,7 +63,7 @@ "AdditionalServices": "Lisäpalvelut", "WhatIsABPFramework": "MIKÄ ON ABP-KEHYS?", "OpenSourceBaseFramework": "Avoimen lähdekoodin peruskehys", - "ABPFrameworkExplanation": "

ABP Commercial perustuu ABP Frameworkiin, avoimen lähdekoodin ja yhteisövetoiseen verkkosovelluskehykseen ASP.NET Core -sovellukselle.

ABP Framework tarjoaa erinomaisen infrastruktuurin ylläpitettävien, laajennettavien tiedostojen kirjoittamiseen. ja testattava koodi parhailla käytänteillä.

Rakennettu ja integroitu jo tunnettujen suosittujen työkalujen kanssa. Matala oppimiskäyrä, helppo sopeutuminen, mukava kehitys.

", + "ABPFrameworkExplanation": "

ABP Commercial perustuu ABP Frameworkiin, avoimen lähdekoodin ja yhteisövetoiseen verkkosovelluskehykseen ASP.NET Core -sovellukselle.

ABP Framework tarjoaa erinomaisen infrastruktuurin ylläpitettävien, laajennettavien tiedostojen kirjoittamiseen. ja testattava koodi parhailla käytänteillä.

Rakennettu ja integroitu jo tunnettujen suosittujen työkalujen kanssa. Matala oppimiskäyrä, helppo sopeutuminen, mukava kehitys.

", "Modular": "Modulaarinen", "MicroserviceCompatible": "Mikropalvelu yhteensopiva", "DomainDrivenDesignInfrastructure": "Toimialueohjattu suunnittelun infrastruktuuri", @@ -78,7 +78,7 @@ "ManyMore": "Monta lisää", "ExploreTheABPFramework": "Tutustu ABP-kehykseen", "WhyUseTheABPCommercial": "Miksi käyttää ABP-mainosta?", - "WhyUseTheABPCommercialExplanation": "

Yritysluokan verkkosovellusten rakentaminen voi olla monimutkaista ja aikaa vievää.

ABP Commercial tarjoaa täydellisen perusinfrastruktuurin, joka tarvitaan kaikille nykyaikaisille yritystason ASP.NET-ytimille perustuvat ratkaisut. ABP: n sisäänrakennetut ominaisuudet ja moduulit tukevat koko suunnittelusykliä suunnittelusta käyttöönottoon asti.

", + "WhyUseTheABPCommercialExplanation": "

Yritysluokan verkkosovellusten rakentaminen voi olla monimutkaista ja aikaa vievää.

ABP Commercial tarjoaa täydellisen perusinfrastruktuurin, joka tarvitaan kaikille nykyaikaisille yritystason ASP.NET-ytimille perustuvat ratkaisut. ABP: n sisäänrakennetut ominaisuudet ja moduulit tukevat koko suunnittelusykliä suunnittelusta käyttöönottoon asti.

", "StartupTemplatesShortDescription": "Käynnistysmallien avulla voit aloittaa projektisi muutamassa sekunnissa.", "UIFrameworksOptions": "Käyttöliittymäkehysvaihtoehdot;", "DatabaseProviderOptions": "Tietokannan tarjoajan vaihtoehdot;", @@ -145,7 +145,7 @@ "DeveloperGuide": "Kehittäjän opas", "ModuleTemplate": "Moduulimalli", "ModuleTemplateExplanation1": "Haluatko luoda moduulin ja käyttää sitä uudelleen eri sovelluksissa? Tämä käynnistysmalli valmistaa kaiken aloittamaan uudelleenkäytettävän sovellusmoduulin tai mikropalvelun luomisen.", - "ModuleTemplateExplanation2": "

Voit tukea yhtä tai useampaa käyttöliittymäkehystä, yhtä tai useampaa tietokantapalvelua yhdelle moduulille. Käynnistysmalli on määritetty suorittamaan ja testaamaan moduulia pienimmässä sovelluksessa yksikön ja integraatiotestiinfrastruktuurin lisäksi.

Katso teknistä tietoa mallista kehittäjän oppaasta.

", + "ModuleTemplateExplanation2": "

Voit tukea yhtä tai useampaa käyttöliittymäkehystä, yhtä tai useampaa tietokantapalvelua yhdelle moduulille. Käynnistysmalli on määritetty suorittamaan ja testaamaan moduulia pienimmässä sovelluksessa yksikön ja integraatiotestiinfrastruktuurin lisäksi.

Katso teknistä tietoa mallista kehittäjän oppaasta.

", "WithAllStyleOptions": "kaikilla tyylivaihtoehdoilla", "Demo": "Demo", "SeeAllModules": "Katso kaikki moduulit", @@ -157,13 +157,13 @@ "WhatIsTheABPCommercial": "Mikä on ABP-kauppa?", "WhatAreDifferencesThanAbpFramework": "Mitä eroja on avoimen lähdekoodin ABP Frameworkilla ja ABP Commercialilla?", "ABPCommercialExplanation": "ABP Commercial on joukko ensiluokkaisia moduuleja, työkaluja, teemoja ja palveluja, jotka on rakennettu avoimen lähdekoodin ABP-kehyksen päälle. ABP Commercial kehittää ja tukee samaa tiimiä ABP-kehyksen takana.", - "WhatAreDifferencesThanABPFrameworkExplanation": "

ABP-kehys on modulaarinen, teemoitettava, mikropalvelujen kanssa yhteensopiva sovelluskehys ASP.NET Core -sovellukselle. Se tarjoaa täydellisen arkkitehtuurin ja vahvan infrastruktuurin, joka saa sinut keskittymään omaan yrityskoodiin sen sijaan, että toistat itsesi jokaisessa uudessa projektissa. Se perustuu ohjelmistokehityksen parhaisiin käytäntöihin ja jo tiedettyihin suosittuihin työkaluihin.

ABP-kehykset ovat täysin ilmaisia, avoimen lähdekoodin ja yhteisölähtöisiä. Se tarjoaa myös ilmaisen teeman ja joitain valmiita moduuleja (esim. Henkilöllisyyden hallinta ja vuokralaisten hallinta).

", + "WhatAreDifferencesThanABPFrameworkExplanation": "

ABP-kehys on modulaarinen, teemoitettava, mikropalvelujen kanssa yhteensopiva sovelluskehys ASP.NET Core -sovellukselle. Se tarjoaa täydellisen arkkitehtuurin ja vahvan infrastruktuurin, joka saa sinut keskittymään omaan yrityskoodiin sen sijaan, että toistat itsesi jokaisessa uudessa projektissa. Se perustuu ohjelmistokehityksen parhaisiin käytäntöihin ja jo tiedettyihin suosittuihin työkaluihin.

ABP-kehykset ovat täysin ilmaisia, avoimen lähdekoodin ja yhteisölähtöisiä. Se tarjoaa myös ilmaisen teeman ja joitain valmiita moduuleja (esim. Henkilöllisyyden hallinta ja vuokralaisten hallinta).

", "VisitTheFrameworkVSCommercialDocument": "Vieraile seuraavalla linkillä saadaksesi lisätietoja {1} ", "ABPCommercialFollowingBenefits": "ABP Commercial lisää seuraavat edut ABP-kehyksen päälle;", "Professional": "Ammattilainen", "UIThemes": "Käyttöliittymän teemat", "EnterpriseModules": "Yrityskäyttöiset, monipuoliset, valmiit sovellusmoduulit (esim. Identity Server -hallinta, SaaS-hallinta, kielen hallinta)", - "ToolingToSupport": "Työkalut, jotka tukevat kehitystesi tuottavuutta (esim. ABP Suite )", + "ToolingToSupport": "Työkalut, jotka tukevat kehitystesi tuottavuutta (esim. ABP Suite )", "PremiumSupportLink": "Ensiluokkainen tuki ", "WhatDoIDownloadABPCommercial": "Mitä lataan ostaessani ABP Commercial -palvelua?", "CreateUnlimitedSolutions": "Kun olet ostanut ABP Commercial -lisenssin, voit luoda rajoittamattomia ratkaisuja, kuten Aloittaminen -asiakirjassa kuvataan.", @@ -177,7 +177,7 @@ "ChangingLicenseType": "Voinko muuttaa lisenssityyppiäni tulevaisuudessa?", "ChangingLicenseTypeExplanation": "Voit aina lisätä uusia kehittäjiä samaan lisenssityyppiin. Katso myös \"Kuinka monta kehittäjää voi työskennellä ABP Commercialilla?\". Voit myös päivittää korkeampaan lisenssiin maksamalla lasketun hintaeron. Kun päivität korkeampaan lisenssisuunnitelmaan, saat uuden suunnitelman edut, mutta lisenssin päivitys ei muuta lisenssin voimassaolon päättymispäivää.", "LicenseExtendUpgradeDiff": "Mitä eroa on lisenssin laajennuksella ja päivityksellä?", - "LicenseExtendUpgradeDiffExplanation": " Extension: en prolongeant/renouvelant votre licence, vous continuerez à bénéficier d'une assistance premium et à des mises à jour majeures pour les modules et les thèmes. De plus, vous pourrez continuer à créer de nouveaux projets. Et vous pourrez toujours utiliser ABP Suite, ce qui accélère votre développement.
Mise à niveau: En mettant à jour votre licence, vous passerez à un plan de licence supérieur qui vous permettra d’obtenir des avantages supplémentaires . Consultez le tableau de comparaison des licences pour vérifier les différences entre les plans de licence. En revanche, lors de la mise à niveau, la date d'expiration de votre licence ne changera pas! Pour prolonger la date de fin de votre licence, vous devez prolonger votre licence.", + "LicenseExtendUpgradeDiffExplanation": " Extension: en prolongeant/renouvelant votre licence, vous continuerez à bénéficier d'une assistance premium et à des mises à jour majeures pour les modules et les thèmes. De plus, vous pourrez continuer à créer de nouveaux projets. Et vous pourrez toujours utiliser ABP Suite, ce qui accélère votre développement.
Mise à niveau: En mettant à jour votre licence, vous passerez à un plan de licence supérieur qui vous permettra d’obtenir des avantages supplémentaires . Consultez le tableau de comparaison des licences pour vérifier les différences entre les plans de licence. En revanche, lors de la mise à niveau, la date d'expiration de votre licence ne changera pas! Pour prolonger la date de fin de votre licence, vous devez prolonger votre licence.", "LicenseRenewalCost": "Mitkä ovat lisenssin uusimiskustannukset vuoden kuluttua?", "LicenseRenewalCostExplanation": "Kaikkien ABP Commercial perpetual -lisenssien uusimis- (laajennus) hinta on {0} lisenssiluettelohinnasta. Tavallisen tiimilisenssin uusimishinta on $ {1}, tavallinen yrityslisenssi on $ {2} ja tavallinen yrityslisenssi on $ {3}. Jos olet jo asiakas, kirjaudu tilillesi ja tarkista käytettävissä oleva uusimishinta.", "HowDoIRenewMyLicense": "Kuinka uusin lisenssin?", @@ -186,13 +186,13 @@ "IsSourceCodeIncludedExplanation1": "Riippuu ostamastasi lisenssityypistä:", "IsSourceCodeIncludedExplanation2": " Tiimi : Ratkaisusi käyttää moduuleja ja teemoja NuGet- ja NPM-paketteina. Se ei sisällä heidän lähdekoodiaan. Tällä tavoin voit helposti päivittää nämä moduulit ja teemat aina, kun uusi versio on saatavana. Et kuitenkaan voi saada moduulien ja teemojen lähdekoodia.", "IsSourceCodeIncludedExplanation3": " Yritys / yritys : Tiimilisenssin lisäksi voit ladata minkä tahansa tarvitsemasi moduulin tai teeman lähdekoodin. Voit jopa poistaa tietyn moduulin NuGet / NPM-pakettiviitteet ja lisätä sen lähdekoodin suoraan ratkaisuusi sen muuttamiseksi kokonaan.", - "IsSourceCodeIncludedExplanation4": "

Moduulin lähdekoodin sisällyttäminen ratkaisuun antaa sinulle maksimaalisen vapauden mukauttaa moduulia. Tällöin moduulia ei voida päivittää automaattisesti, kun uusi versio julkaistaan.

Mikään lisensseistä ei sisällä ABP Suiten lähdekoodia, joka on ulkoinen työkalu, joka tuottaa koodia sinulle ja auttaa kehitykseen.

Katso muita lisenssityyppien eroja hinnoittelusivulta .

", + "IsSourceCodeIncludedExplanation4": "

Moduulin lähdekoodin sisällyttäminen ratkaisuun antaa sinulle maksimaalisen vapauden mukauttaa moduulia. Tällöin moduulia ei voida päivittää automaattisesti, kun uusi versio julkaistaan.

Mikään lisensseistä ei sisällä ABP Suiten lähdekoodia, joka on ulkoinen työkalu, joka tuottaa koodia sinulle ja auttaa kehitykseen.

Katso muita lisenssityyppien eroja hinnoittelusivulta .

", "ChangingDevelopers": "Voinko muuttaa organisaationi rekisteröityneitä kehittäjiä tulevaisuudessa?", "ChangingDevelopersExplanation": "Uusien kehittäjien lisäämisen lisenssiin lisäksi voit myös muuttaa olemassa olevia kehittäjiä (voit poistaa kehittäjän ja lisätä uuden samalle paikalle) ilman lisäkustannuksia.", "WhatHappensWhenLicenseEnds": "Mitä tapahtuu, kun lisenssikauteni päättyy?", "WhatHappensWhenLicenseEndsExplanation1": "ABP Commercial -lisenssityyppi on jatkuva lisenssi . Kun lisenssi vanhenee, voit jatkaa projektisi kehittämistä. Ja sinun ei tarvitse uudistaa lisenssiäsi. Lisenssisi mukana toimitetaan yhden vuoden päivitys- ja tukisuunnitelma. Jos haluat edelleen saada uusia ominaisuuksia, suorituskyvyn parannuksia, virhekorjauksia, tukea ja jatkaa ABP Suite -sovelluksen käyttöä, muista uusia suunnitelma joka vuosi. Kun lisenssi vanhenee, et voi saada enemmän seuraavista eduista;", "WhatHappensWhenLicenseEndsExplanation2": "Et voi luoda uusia ratkaisuja ABP Commercial -sovelluksella, mutta voit jatkaa olemassa olevien sovellusten kehittämistä ikuisesti.", - "WhatHappensWhenLicenseEndsExplanation3": "Voit saada päivityksiä moduuleista ja teemoista MAJOR-versiostasi. Esimerkiksi; jos käytät moduulin v3.2.0-versiota, voit silti saada päivityksiä kyseisen moduulin versiolle v3.x.x (v3.3.0, v3.5.2 ... jne.). Mutta et voi saada päivityksiä seuraavaan pääversioon (kuten v4.x, v5.x)", + "WhatHappensWhenLicenseEndsExplanation3": "Voit saada päivityksiä moduuleista ja teemoista MAJOR-versiostasi. Esimerkiksi; jos käytät moduulin v3.2.0-versiota, voit silti saada päivityksiä kyseisen moduulin versiolle v3.x.x (v3.3.0, v3.5.2... jne.). Mutta et voi saada päivityksiä seuraavaan pääversioon (kuten v4.x, v5.x)", "WhatHappensWhenLicenseEndsExplanation4": "Et voi asentaa uusia moduuleja ja teemoja, jotka on lisätty ABP Commercial -alustalle käyttöoikeuden päättymisen jälkeen.", "WhatHappensWhenLicenseEndsExplanation5": "Et voi käyttää ABP Suitea.", "WhatHappensWhenLicenseEndsExplanation6": "Et voi enää saada premium-tukea .", @@ -203,7 +203,7 @@ "TrialPlan": "Onko sinulla kokeilusuunnitelma?", "TrialPlanExplanation": "Toistaiseksi ABP Commercialilla ei ole kokeilusuunnitelmaa. Joukkueen lisensseille tarjoamme 30 päivän rahanpalautustakuun. Voit vain pyytää hyvitystä 30 ensimmäisen päivän aikana. Yritys- ja yrityslisensseille hyvitämme 60% 30 päivässä. Tämä johtuu siitä, että yritys- ja yrityslisenssit sisältävät kaikkien moduulien ja teemojen täydellisen lähdekoodin.", "DoYouAcceptBankWireTransfer": "Hyväksytkö pankkisiirron?", - "DoYouAcceptBankWireTransferExplanation": "Kyllä, hyväksymme pankkisiirron.
Kun olet lähettänyt lisenssimäärän pankkisiirrolla, lähetä meille kuitti ja pyydetty lisenssityyppi sähköpostitse.
Kansainväliset pankkitilitiedot:", + "DoYouAcceptBankWireTransferExplanation": "Kyllä, hyväksymme pankkisiirron.
Kun olet lähettänyt lisenssimäärän pankkisiirrolla, lähetä meille kuitti ja pyydetty lisenssityyppi sähköpostitse.
Kansainväliset pankkitilitiedot:", "HowToUpgrade": "Kuinka päivittää olemassa olevia sovelluksia, kun uusi versio on saatavilla?", "HowToUpgradeExplanation1": "Kun luot uuden sovelluksen ABP Commercial -sovelluksella, kaikkia moduuleja ja teemaa käytetään NuGet- ja NPM-paketteina. Joten voit päivittää paketit helposti, kun uusi versio on saatavilla.", "HowToUpgradeExplanation2": "Normaalien NuGet / NPM-päivitysten lisäksi ABP CLI tarjoaa päivityskomennon, joka etsii ja päivittää kaikki ratkaisusi ABP-paketit.", @@ -227,10 +227,10 @@ "RefundPolicyExplanation": "Voit pyytää hyvitystä 30 päivän kuluessa lisenssiostoksestasi. Yritys- ja yrityslisenssityypeillä on lähdekoodin latausvaihtoehto, joten hyvityksiä ei ole saatavana yrityksille ja yrityksille (eikä lisensseille, jotka sisältävät oikeuden saada lähdekoodia). Lisäksi uusimista ja toisen lisenssin ostoja ei hyvitetä.", "HowCanIRefundVat": "Kuinka voin palauttaa arvonlisäveron?", "HowCanIRefundVatExplanation1": "Jos suoritit maksun käyttämällä 2Checkoutia, voit palauttaa arvonlisäveron 2Checkout-tilisi kautta:", - "HowCanIRefundVatExplanation2": "Kirjaudu sisään 2Tarkista -tiliisi.", + "HowCanIRefundVatExplanation2": "Kirjaudu sisään 2Checkout -tiliisi.", "HowCanIRefundVatExplanation3": "Etsi sopiva tilaus ja paina \"Hyvitä myöhässä oleva alv\" (kirjoita ALV-tunnuksesi)", "HowCanIGetMyInvoice": "Kuinka saan laskuni?", - "HowCanIGetMyInvoiceExplanation": "Lisenssin ostamiseen on 2 maksuyhdyskäytävää: PayU ja 2Checkout. Jos ostat lisenssin 2Checkout gatewayn kautta, se lähettää PDF-laskun sähköpostiosoitteeseesi, katso 2Tarkista laskutus. Jos ostat PayU-yhdyskäytävän kautta tai pankkisiirrolla, valmistelemme ja lähetämme laskusi. Voit pyytää laskua organisaation hallintasivulta ", + "HowCanIGetMyInvoiceExplanation": "Lisenssin ostamiseen on 2 maksuyhdyskäytävää: PayU ja 2Checkout. Jos ostat lisenssin 2Checkout gatewayn kautta, se lähettää PDF-laskun sähköpostiosoitteeseesi, katso 2Checkout laskutus. Jos ostat PayU-yhdyskäytävän kautta tai pankkisiirrolla, valmistelemme ja lähetämme laskusi. Voit pyytää laskua organisaation hallintasivulta ", "Forum": "Foorumi", "SupportExplanation": "ABP Commercial -lisenssit tarjoavat ensiluokkaisen foorumituen ABP-kehyksen asiantuntijoista koostuvalle tiimille.", "PrivateTicket": "Yksityinen lippu", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json index 90d1fcf0c9..e8f4165971 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json @@ -42,7 +42,7 @@ "NotOrganizationMember": "Vous n'êtes membre d'aucune organisation.", "UnsubscribeLicenseExpirationEmailSuccessTitle": "Désabonnement réussi", "UnsubscribeLicenseExpirationEmailSuccessMessage": "Vous ne recevrez plus d'e-mails de rappel de la date d'expiration de la licence.", - "IndexPageHeroSection": "Une plate-forme de développement Web complète intégrée cadre ", + "IndexPageHeroSection": "Une plate-forme de développement Web complète intégrée cadre ", "AbpCommercialShortDescription": "ABP Commercial fournit des modules d'application prédéfinis, des outils de développement rapide d'applications, des thèmes d'interface utilisateur professionnels, un support premium et plus encore.", "LiveDemo": "Démo en direct", "GetLicence": "Obtenez une licence", @@ -63,7 +63,7 @@ "AdditionalServices": "Des services supplémentaires", "WhatIsABPFramework": "QU'EST-CE QUE LE FRAMEWORK ABP?", "OpenSourceBaseFramework": "Framework de base Open Source", - "ABPFrameworkExplanation": "

ABP Commercial est basé sur ABP Framework, un framework d'applications Web open source et communautaire pour ASP.NET Core.

ABP Framework fournit une excellente infrastructure pour écrire maintenable et extensible et du code testable avec les meilleures pratiques.

Construit et intégré à des outils populaires que vous connaissez déjà. Faible courbe d'apprentissage, adaptation facile, développement confortable.

", + "ABPFrameworkExplanation": "

ABP Commercial est basé sur ABP Framework, un framework d'applications Web open source et communautaire pour ASP.NET Core.

ABP Framework fournit une excellente infrastructure pour écrire maintenable et extensible et du code testable avec les meilleures pratiques.

Construit et intégré à des outils populaires que vous connaissez déjà. Faible courbe d'apprentissage, adaptation facile, développement confortable.

", "Modular": "Modulaire", "MicroserviceCompatible": "Compatible avec les microservices", "DomainDrivenDesignInfrastructure": "Infrastructure de conception pilotée par domaine", @@ -78,7 +78,7 @@ "ManyMore": "Beaucoup plus", "ExploreTheABPFramework": "Explorez le Framework ABP", "WhyUseTheABPCommercial": "Pourquoi utiliser ABP Commercial?", - "WhyUseTheABPCommercialExplanation": "

La création d'applications Web de niveau entreprise peut être complexe et prendre du temps.

ABP Commercial offre l'infrastructure de base parfaite nécessaire pour tous les ASP.NET Core modernes de niveau entreprise solutions basées. De la conception au déploiement, l'ensemble du cycle de développement est optimisé par les fonctionnalités et modules intégrés d'ABP.

", + "WhyUseTheABPCommercialExplanation": "

La création d'applications Web de niveau entreprise peut être complexe et prendre du temps.

ABP Commercial offre l'infrastructure de base parfaite nécessaire pour tous les ASP.NET Core modernes de niveau entreprise solutions basées. De la conception au déploiement, l'ensemble du cycle de développement est optimisé par les fonctionnalités et modules intégrés d'ABP.

", "StartupTemplatesShortDescription": "Les modèles de démarrage vous permettent de démarrer votre projet en quelques secondes.", "UIFrameworksOptions": "Options de frameworks d'interface utilisateur;", "DatabaseProviderOptions": "Options du fournisseur de base de données;", @@ -145,19 +145,19 @@ "DeveloperGuide": "Guide du développeur", "ModuleTemplate": "Modèle de module", "ModuleTemplateExplanation1": "Vous souhaitez créer un module et le réutiliser dans différentes applications? Ce modèle de démarrage prépare tout pour commencer à créer un module d'application réutilisable ou un microservice .", - "ModuleTemplateExplanation2": "

Vous pouvez prendre en charge un ou plusieurs frameworks d'interface utilisateur, un ou plusieurs fournisseurs de bases de données pour un seul module. Le modèle de démarrage est configuré pour exécuter et tester votre module dans une application minimale en plus de l'infrastructure de test d'unité et d'intégration.

Consultez le guide du développeur pour obtenir des informations techniques sur ce modèle.

", + "ModuleTemplateExplanation2": "

Vous pouvez prendre en charge un ou plusieurs frameworks d'interface utilisateur, un ou plusieurs fournisseurs de bases de données pour un seul module. Le modèle de démarrage est configuré pour exécuter et tester votre module dans une application minimale en plus de l'infrastructure de test d'unité et d'intégration.

Consultez le guide du développeur pour obtenir des informations techniques sur ce modèle.

", "WithAllStyleOptions": "avec toutes les options de style", "Demo": "Démo", "SeeAllModules": "Voir tous les modules", "ABPCLIExplanation": "ABP CLI (Command Line Interface) est un outil de ligne de commande pour effectuer certaines opérations courantes pour les solutions basées sur ABP.", "ABPSuiteEasilyCURD": "ABP Suite est un outil qui vous permet de créer facilement des pages CRUD", - "WeAreHereToHelp": "Nous sommes ici pour Aide ", + "WeAreHereToHelp": "Nous sommes ici pour Aide ", "BrowseOrAskQuestion": "Vous pouvez parcourir nos rubriques d'aide ou rechercher dans les questions fréquemment posées, ou vous pouvez nous poser une question en utilisant le formulaire de contact .", "SearchQuestionPlaceholder": "Rechercher dans les questions fréquemment posées", "WhatIsTheABPCommercial": "Qu'est-ce que la publicité ABP?", "WhatAreDifferencesThanAbpFramework": "Quelles sont les différences entre le Framework ABP open source et le ABP Commercial?", "ABPCommercialExplanation": "ABP Commercial est un ensemble de modules, d'outils, de thèmes et de services premium basés sur le framework ABP open source. ABP Commercial est développé et soutenu par la même équipe derrière le cadre ABP.", - "WhatAreDifferencesThanABPFrameworkExplanation": "

Framework ABP est un framework de développement d'applications modulaire, thématique et compatible avec les micro-services pour ASP.NET Core. Il fournit une architecture complète et une infrastructure solide pour vous permettre de vous concentrer sur votre propre code métier plutôt que de vous répéter à chaque nouveau projet. Il est basé sur les meilleures pratiques de développement logiciel et les outils populaires que vous connaissez déjà.

Le framework ABP est entièrement gratuit, open source et géré par la communauté. Il fournit également un thème gratuit et des modules prédéfinis (par exemple, la gestion des identités et la gestion des locataires).

", + "WhatAreDifferencesThanABPFrameworkExplanation": "

Framework ABP est un framework de développement d'applications modulaire, thématique et compatible avec les micro-services pour ASP.NET Core. Il fournit une architecture complète et une infrastructure solide pour vous permettre de vous concentrer sur votre propre code métier plutôt que de vous répéter à chaque nouveau projet. Il est basé sur les meilleures pratiques de développement logiciel et les outils populaires que vous connaissez déjà.

Le framework ABP est entièrement gratuit, open source et géré par la communauté. Il fournit également un thème gratuit et des modules prédéfinis (par exemple, la gestion des identités et la gestion des locataires).

", "VisitTheFrameworkVSCommercialDocument": "Pour plus d'informations, consultez le lien suivant: {1} ", "ABPCommercialFollowingBenefits": "ABP Commercial ajoute les avantages suivants en plus du cadre ABP;", "Professional": "Professionnel", @@ -177,7 +177,7 @@ "ChangingLicenseType": "Puis-je changer mon type de licence à l'avenir?", "ChangingLicenseTypeExplanation": "Vous pouvez toujours ajouter de nouveaux développeurs dans votre même type de licence. Voir aussi \"Combien de développeurs peuvent travailler sur l'ABP Commercial?\". Vous pouvez également passer à une licence supérieure en payant la différence de prix calculée. Lorsque vous passez à un plan de licence supérieur, vous bénéficiez des avantages du nouveau plan, mais la mise à niveau de la licence ne modifie pas la date d'expiration de la licence.", "LicenseExtendUpgradeDiff": "Quelle est la différence entre l'extension de licence et la mise à niveau?", - "LicenseExtendUpgradeDiffExplanation": " Extension: en prolongeant/renouvelant votre licence, vous continuerez à bénéficier d'une assistance premium et à des mises à jour majeures pour les modules et les thèmes. De plus, vous pourrez continuer à créer de nouveaux projets. Et vous pourrez toujours utiliser ABP Suite, ce qui accélère votre développement.
Mise à niveau: En mettant à jour votre licence, vous passerez à un plan de licence supérieur qui vous permettra d’obtenir des avantages supplémentaires . Consultez le tableau de comparaison des licences pour vérifier les différences entre les plans de licence. En revanche, lors de la mise à niveau, la date d'expiration de votre licence ne changera pas! Pour prolonger la date de fin de votre licence, vous devez prolonger votre licence.", + "LicenseExtendUpgradeDiffExplanation": " Extension: en prolongeant/renouvelant votre licence, vous continuerez à bénéficier d'une assistance premium et à des mises à jour majeures pour les modules et les thèmes. De plus, vous pourrez continuer à créer de nouveaux projets. Et vous pourrez toujours utiliser ABP Suite, ce qui accélère votre développement.
Mise à niveau: En mettant à jour votre licence, vous passerez à un plan de licence supérieur qui vous permettra d’obtenir des avantages supplémentaires . Consultez le tableau de comparaison des licences pour vérifier les différences entre les plans de licence. En revanche, lors de la mise à niveau, la date d'expiration de votre licence ne changera pas! Pour prolonger la date de fin de votre licence, vous devez prolonger votre licence.", "LicenseRenewalCost": "Quel est le coût du renouvellement de la licence après 1 an?", "LicenseRenewalCostExplanation": "Le taux de renouvellement (extension) de toutes les licences perpétuelles ABP Commercial correspond à {0} du prix catalogue de la licence. Le prix de renouvellement de la licence d'équipe standard est de {1} $, la licence professionnelle standard de {2} $ et la licence d'entreprise standard de {3} $. Si vous êtes déjà client, connectez-vous à votre compte pour consulter les tarifs de renouvellement disponibles.", "HowDoIRenewMyLicense": "Comment renouveler ma licence?", @@ -186,13 +186,13 @@ "IsSourceCodeIncludedExplanation1": "Dépend du type de licence que vous avez acheté:", "IsSourceCodeIncludedExplanation2": " Équipe : votre solution utilise les modules et les thèmes en tant que packages NuGet et NPM. Il n'inclut pas leur code source. De cette façon, vous pouvez facilement mettre à niveau ces modules et thèmes chaque fois qu'une nouvelle version est disponible. Cependant, vous ne pouvez pas obtenir le code source des modules et des thèmes.", "IsSourceCodeIncludedExplanation3": " Entreprise / Entreprise : en plus de la licence Team, vous pouvez télécharger le code source de tout module ou thème dont vous avez besoin. Vous pouvez même supprimer les références de package NuGet / NPM pour un module particulier et ajouter son code source directement à votre solution pour le modifier complètement.", - "IsSourceCodeIncludedExplanation4": "

L'inclusion du code source d'un module dans votre solution vous donne le maximum de liberté pour personnaliser ce module. Cependant, il ne sera pas possible de mettre à jour automatiquement le module lorsqu'une nouvelle version est publiée.

Aucune des licences n'inclut le code source d'ABP Suite, qui est un outil externe qui génère du code pour vous et vous aide à votre développement.

Consultez la page de tarification pour connaître les autres différences entre les types de licence.

", + "IsSourceCodeIncludedExplanation4": "

L'inclusion du code source d'un module dans votre solution vous donne le maximum de liberté pour personnaliser ce module. Cependant, il ne sera pas possible de mettre à jour automatiquement le module lorsqu'une nouvelle version est publiée.

Aucune des licences n'inclut le code source d'ABP Suite, qui est un outil externe qui génère du code pour vous et vous aide à votre développement.

Consultez la page de tarification pour connaître les autres différences entre les types de licence.

", "ChangingDevelopers": "Puis-je changer les développeurs enregistrés de mon organisation à l'avenir?", "ChangingDevelopersExplanation": "En plus d'ajouter de nouveaux développeurs à votre licence, vous pouvez également modifier les développeurs existants (vous pouvez supprimer un développeur et en ajouter un nouveau sur le même siège) sans aucun coût supplémentaire.", "WhatHappensWhenLicenseEnds": "Que se passe-t-il à la fin de ma période de licence?", "WhatHappensWhenLicenseEndsExplanation1": "Le type de licence commerciale ABP est licence perpétuelle . Une fois votre licence expirée, vous pouvez continuer à développer votre projet. Et vous n'êtes pas obligé de renouveler votre licence. Votre licence est livrée avec un plan de mise à jour et de support d'un an prêt à l'emploi. Pour continuer à recevoir de nouvelles fonctionnalités, des améliorations de performances, des corrections de bogues, une assistance et continuer à utiliser ABP Suite, assurez-vous de renouveler votre plan chaque année. Lorsque votre licence expirera, vous ne pourrez plus bénéficier des avantages suivants;", "WhatHappensWhenLicenseEndsExplanation2": "Vous ne pouvez pas créer de nouvelles solutions en utilisant ABP Commercial, mais vous pouvez continuer à développer vos applications existantes pour toujours.", - "WhatHappensWhenLicenseEndsExplanation3": "Vous pourrez obtenir des mises à jour pour les modules et les thèmes de votre version MAJEURE. Par example; si vous utilisez la v3.2.0 d'un module, vous pouvez toujours obtenir des mises à jour pour la v3.x.x (v3.3.0, v3.5.2 ... etc.) de ce module. Mais vous ne pouvez pas obtenir de mises à jour pour la prochaine version majeure (comme v4.x, v5.x)", + "WhatHappensWhenLicenseEndsExplanation3": "Vous pourrez obtenir des mises à jour pour les modules et les thèmes de votre version MAJEURE. Par example; si vous utilisez la v3.2.0 d'un module, vous pouvez toujours obtenir des mises à jour pour la v3.x.x (v3.3.0, v3.5.2... etc.) de ce module. Mais vous ne pouvez pas obtenir de mises à jour pour la prochaine version majeure (comme v4.x, v5.x)", "WhatHappensWhenLicenseEndsExplanation4": "Vous ne pouvez pas installer de nouveaux modules et thèmes ajoutés à la plate-forme ABP Commercial après la fin de votre licence.", "WhatHappensWhenLicenseEndsExplanation5": "Vous ne pouvez pas utiliser ABP Suite.", "WhatHappensWhenLicenseEndsExplanation6": "Vous ne pouvez plus bénéficier de l ' assistance premium .", @@ -203,7 +203,7 @@ "TrialPlan": "Avez-vous un plan d'essai?", "TrialPlanExplanation": "Pour l'instant, ABP Commercial n'a pas de plan d'essai. Pour les licences Team, nous offrons une garantie de remboursement de 30 jours. Vous pouvez simplement demander un remboursement dans les 30 premiers jours. Pour les licences Business et Enterprise, nous fournissons un remboursement de 60% en 30 jours. En effet, les licences Business et Enterprise incluent le code source complet de tous les modules et thèmes.", "DoYouAcceptBankWireTransfer": "Acceptez-vous les virements bancaires?", - "DoYouAcceptBankWireTransferExplanation": "Oui, nous acceptons les virements bancaires.
Après avoir envoyé le montant de la licence par virement bancaire, envoyez-nous votre reçu et le type de licence demandé par e-mail.
Nos coordonnées bancaires internationales:", + "DoYouAcceptBankWireTransferExplanation": "Oui, nous acceptons les virements bancaires.
Après avoir envoyé le montant de la licence par virement bancaire, envoyez-nous votre reçu et le type de licence demandé par e-mail.
Nos coordonnées bancaires internationales:", "HowToUpgrade": "Comment mettre à niveau des applications existantes lorsqu'une nouvelle version est disponible?", "HowToUpgradeExplanation1": "Lorsque vous créez une nouvelle application à l'aide d'ABP Commercial, tous les modules et le thème sont utilisés en tant que packages NuGet et NPM. Ainsi, vous pouvez facilement mettre à jour les packages lorsqu'une nouvelle version est disponible.", "HowToUpgradeExplanation2": "Outre les mises à niveau standard de NuGet / NPM, ABP CLI fournit une commande de mise à jour qui recherche et met automatiquement à niveau tous les packages associés à ABP dans votre solution.", @@ -230,7 +230,7 @@ "HowCanIRefundVatExplanation2": "Connectez-vous à votre compte 2Checkout ", "HowCanIRefundVatExplanation3": "Trouvez la commande appropriée et appuyez sur \"Rembourser la TVA tardive\" (entrez votre numéro de TVA)", "HowCanIGetMyInvoice": "Comment puis-je obtenir ma facture?", - "HowCanIGetMyInvoiceExplanation": "Il existe 2 passerelles de paiement pour l'achat d'une licence: PayU et 2Checkout. Si vous achetez votre licence via la passerelle 2Checkout, elle envoie la facture PDF à votre adresse e-mail, voir Facturation 2Checkout. Si vous achetez via la passerelle PayU ou par virement bancaire, nous préparerons et vous enverrons votre facture. Vous pouvez demander votre facture sur la page de gestion de l'organisation. ", + "HowCanIGetMyInvoiceExplanation": "Il existe 2 passerelles de paiement pour l'achat d'une licence: PayU et 2Checkout. Si vous achetez votre licence via la passerelle 2Checkout, elle envoie la facture PDF à votre adresse e-mail, voir Facturation 2Checkout. Si vous achetez via la passerelle PayU ou par virement bancaire, nous préparerons et vous enverrons votre facture. Vous pouvez demander votre facture sur la page de gestion de l'organisation.", "Forum": "Forum", "SupportExplanation": "ABP Commercial Licences fournit un support de forum premium par une équipe composée d'experts ABP Framework.", "PrivateTicket": "Billet privé", @@ -240,7 +240,7 @@ "FastEasy": "Rapide et facile", "AbpSuiteExplanation3": "ABP Suite vous permet de créer facilement des pages CRUD. Il vous suffit de définir votre entité et ses propriétés, laissez le reste à ABP Suite pour vous! ABP Suite génère tout le code nécessaire pour votre page CRUD en quelques secondes. Il prend en charge les interfaces utilisateur Angular, MVC et Blazor.", "RichOptions": "Options riches", - "AbpSuiteExplanation4": "ABP Suite prend en charge plusieurs options d'interface utilisateur telles que Razor Pages et Angular . Il prend également en charge plusieurs bases de données telles que MongoDB et toutes les bases de données prises en charge par EntityFramework Core < / strong> (MS SQL Server, Oracle, MySql, PostgreSQL et plus ).", + "AbpSuiteExplanation4": "ABP Suite prend en charge plusieurs options d'interface utilisateur telles que Razor Pages et Angular . Il prend également en charge plusieurs bases de données telles que MongoDB et toutes les bases de données prises en charge par EntityFramework Core < / strong> (MS SQL Server, Oracle, MySql, PostgreSQL et plus ).", "AbpSuiteExplanation5": "La bonne chose est que vous n'avez pas à vous soucier de ces options. ABP Suite comprend votre type de projet et génère le code de votre projet et place le code généré au bon endroit dans votre projet.", "SourceCode": "Code source", "AbpSuiteExplanation6": "ABP Suite génère le code source pour vous! Il ne génère pas de fichiers magiques pour générer la page Web. ABP Suite génère le code source pour Entity, Repository, Application Service, Code First Migration, JavaScript / TypeScript et CSHTML / HTML ainsi que les interfaces nécessaires. ABP Suite génère également le code selon les meilleures pratiques de développement logiciel, vous n'avez donc pas à vous soucier de la qualité du code généré.", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json index dd7e117541..4af2f31246 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json @@ -63,7 +63,7 @@ "AdditionalServices": "अतिरिक्त सेवाएं", "WhatIsABPFramework": "ABP फ्रेमवर्क क्या है?", "OpenSourceBaseFramework": "ओपन सोर्स बेस फ्रेमवर्क", - "ABPFrameworkExplanation": "

ABP कमर्शियल ASP.NET Core पर एक खुला स्रोत और समुदाय संचालित वेब एप्लीकेशन फ्रेमवर्क है। और सर्वोत्तम प्रथाओं के साथ परीक्षण योग्य कोड।

आप पहले से ही जानते हैं कि लोकप्रिय उपकरणों पर निर्मित और एकीकृत। कम सीखने की अवस्था, आसान अनुकूलन, आरामदायक विकास। ", + "ABPFrameworkExplanation": "

ABP कमर्शियल ASP.NET Core पर एक खुला स्रोत और समुदाय संचालित वेब एप्लीकेशन फ्रेमवर्क है। और सर्वोत्तम प्रथाओं के साथ परीक्षण योग्य कोड।

आप पहले से ही जानते हैं कि लोकप्रिय उपकरणों पर निर्मित और एकीकृत। कम सीखने की अवस्था, आसान अनुकूलन, आरामदायक विकास।

", "Modular": "मॉड्यूलर", "MicroserviceCompatible": "माइक्रोसिस्ट सेवा संगत", "DomainDrivenDesignInfrastructure": "डोमेन संचालित डिज़ाइन इन्फ्रास्ट्रक्चर", @@ -78,7 +78,7 @@ "ManyMore": "बहुत सारी", "ExploreTheABPFramework": "ABP फ्रेमवर्क का अन्वेषण करें", "WhyUseTheABPCommercial": "एबीपी कमर्शियल का उपयोग क्यों करें?", - "WhyUseTheABPCommercialExplanation": "

बिल्डिंग एंटरप्राइज-ग्रेड वेब एप्लिकेशन जटिल और समय लेने वाली हो सकती हैं।

ABP कमर्शियल सभी आधुनिक एंटरप्राइज-ग्रेड ASP.NET Core के लिए आवश्यक सही आधारभूत संरचना प्रदान करता है। आधारित समाधान। डिज़ाइन से परिनियोजन तक, संपूर्ण विकास चक्र ABP की अंतर्निहित विशेषताओं और मॉड्यूल द्वारा सशक्त है। बिल्डिंग एंटरप्राइज-ग्रेड वेब एप्लिकेशन जटिल और समय लेने वाली हो सकती हैं।

ABP कमर्शियल सभी आधुनिक एंटरप्राइज-ग्रेड ASP.NET Core के लिए आवश्यक सही आधारभूत संरचना प्रदान करता है। आधारित समाधान। डिज़ाइन से परिनियोजन तक, संपूर्ण विकास चक्र ABP की अंतर्निहित विशेषताओं और मॉड्यूल द्वारा सशक्त है।

", "StartupTemplatesShortDescription": "स्टार्टअप टेम्प्लेट आपको कुछ ही सेकंड में अपने प्रोजेक्ट के लिए जंप-स्टार्ट करते हैं।", "UIFrameworksOptions": "यूआई चौखटे विकल्प;", "DatabaseProviderOptions": "डेटाबेस प्रदाता विकल्प;", @@ -108,7 +108,7 @@ "ProudToWorkWith": "गर्व के साथ काम करने के लिए", "OurConsumers": "दुनिया भर में 50 से अधिक देशों के सैकड़ों उद्यम और डेवलपर्स एबीपी कमर्शियल पर निर्भर हैं।", "JoinOurConsumers": "उनके साथ जुड़ें और तेजी से अद्भुत उत्पादों का निर्माण करें।", - "AdditionalServicesExplanation": "क्या आपको अतिरिक्त या कस्टम सेवाओं की आवश्यकता है? हम और हमारे साथी प्रदान कर सकते हैं; ", + "AdditionalServicesExplanation": "क्या आपको अतिरिक्त या कस्टम सेवाओं की आवश्यकता है? हम और हमारे साथी प्रदान कर सकते हैं; ", "CustomProjectDevelopment": "कस्टम परियोजना विकास", "CustomProjectDevelopmentExplanation": "अपने कस्टम प्रोजेक्ट्स के लिए समर्पित डेवलपर्स।", "PortingExistingProjects": "मौजूदा परियोजनाओं को पोर्ट करना", @@ -144,26 +144,26 @@ "SeeTheGuideOrGoToTheLiveDemo": "इस टेम्पलेट के बारे में तकनीकी जानकारी के लिए डेवलपर गाइड देखें या लाइव डेमो पर जाएं।", "DeveloperGuide": "डेवलपर गाइड", "ModuleTemplate": "मॉड्यूल टेम्पलेट", - "ModuleTemplateExplanation1": "आप एक मॉड्यूल बनाना और विभिन्न अनुप्रयोगों में पुन: उपयोग करना चाहते हैं? यह स्टार्टअप टेम्पलेट एक पुन: प्रयोज्य अनुप्रयोग मॉड्यूल या microservice बनाने के लिए शुरू करने के लिए सब कुछ तैयार करता है।", - "ModuleTemplateExplanation2": "

आप एकल मॉड्यूल के लिए एकल या एकाधिक UI फ्रेमवर्क, एकल या एकाधिक डेटाबेस प्रदाता का समर्थन कर सकते हैं। स्टार्टअप टेम्प्लेट को चलाने के लिए कॉन्फ़िगर किया गया है और अपने मॉड्यूल का परीक्षण करें यूनिट और एकीकरण परीक्षण के बुनियादी ढांचे के अलावा न्यूनतम आवेदन में।

इस टेम्पलेट के बारे में तकनीकी जानकारी के लिए डेवलपर गाइड देखें। ", + "ModuleTemplateExplanation1": "आप एक मॉड्यूल बनाना और विभिन्न अनुप्रयोगों में पुन: उपयोग करना चाहते हैं? यह स्टार्टअप टेम्पलेट एक पुन: प्रयोज्य अनुप्रयोग मॉड्यूल या microservice बनाने के लिए शुरू करने के लिए सब कुछ तैयार करता है।", + "ModuleTemplateExplanation2": "

आप एकल मॉड्यूल के लिए एकल या एकाधिक UI फ्रेमवर्क, एकल या एकाधिक डेटाबेस प्रदाता का समर्थन कर सकते हैं। स्टार्टअप टेम्प्लेट को चलाने के लिए कॉन्फ़िगर किया गया है और अपने मॉड्यूल का परीक्षण करें यूनिट और एकीकरण परीक्षण के बुनियादी ढांचे के अलावा न्यूनतम आवेदन में।

इस टेम्पलेट के बारे में तकनीकी जानकारी के लिए डेवलपर गाइड देखें।

", "WithAllStyleOptions": "सभी शैली विकल्पों के साथ", "Demo": "डेमो", "SeeAllModules": "सभी मॉड्यूल देखें", "ABPCLIExplanation": "ABP CLI (कमांड लाइन इंटरफेस) ABP आधारित समाधानों के लिए कुछ सामान्य ऑपरेशन करने के लिए एक कमांड लाइन टूल है।", "ABPSuiteEasilyCURD": "एबीपी सूट एक उपकरण है जो आपको आसानी से CRUD पेज बनाने की अनुमति देता है", - "WeAreHereToHelp": "हम यहाँ हैं मदद ", + "WeAreHereToHelp": "हम यहाँ हैं मदद ", "BrowseOrAskQuestion": "आप हमारे सहायता विषयों को ब्राउज़ कर सकते हैं या अक्सर पूछे जाने वाले प्रश्नों में खोज कर सकते हैं, या आप संपर्क फ़ॉर्म का उपयोग करके हमसे एक प्रश्न पूछ सकते हैं।", "SearchQuestionPlaceholder": "अक्सर पूछे जाने वाले प्रश्नों में खोजें", "WhatIsTheABPCommercial": "ABP कमर्शियल क्या है?", "WhatAreDifferencesThanAbpFramework": "ओपन सोर्स ABP फ्रेमवर्क और ABP कमर्शियल के बीच क्या अंतर हैं?", "ABPCommercialExplanation": "एबीपी कमर्शियल ओपन सोर्स ABP फ्रेमवर्क के शीर्ष पर निर्मित प्रीमियम मॉड्यूल, टूल, थीम और सेवाओं का एक सेट है। एबीपी कमर्शियल को एबीपी ढांचे के पीछे उसी टीम द्वारा विकसित और समर्थित किया जा रहा है।", - "WhatAreDifferencesThanABPFrameworkExplanation": "

ABP फ्रेमवर्क ASP.NET कोर के लिए एक मॉड्यूलर, थीम योग्य, माइक्रो-सर्विस संगत एप्लिकेशन डेवलपमेंट फ्रेमवर्क है। यह आपको हर नई परियोजना के लिए खुद को दोहराने के बजाय अपने स्वयं के व्यवसाय कोड पर ध्यान केंद्रित करने के लिए एक पूर्ण वास्तुकला और एक मजबूत बुनियादी ढांचा प्रदान करता है। यह सॉफ्टवेयर विकास सर्वोत्तम प्रथाओं और लोकप्रिय टूल पर आधारित है जिन्हें आप पहले से जानते हैं।

एबीपी ढांचा पूरी तरह से मुक्त, खुला स्रोत और समुदाय संचालित है। यह एक मुफ्त थीम और कुछ पूर्व-निर्मित मॉड्यूल (जैसे पहचान प्रबंधन और किरायेदार प्रबंधन) भी प्रदान करता है।

", + "WhatAreDifferencesThanABPFrameworkExplanation": "

ABP फ्रेमवर्क ASP.NET कोर के लिए एक मॉड्यूलर, थीम योग्य, माइक्रो-सर्विस संगत एप्लिकेशन डेवलपमेंट फ्रेमवर्क है। यह आपको हर नई परियोजना के लिए खुद को दोहराने के बजाय अपने स्वयं के व्यवसाय कोड पर ध्यान केंद्रित करने के लिए एक पूर्ण वास्तुकला और एक मजबूत बुनियादी ढांचा प्रदान करता है। यह सॉफ्टवेयर विकास सर्वोत्तम प्रथाओं और लोकप्रिय टूल पर आधारित है जिन्हें आप पहले से जानते हैं।

एबीपी ढांचा पूरी तरह से मुक्त, खुला स्रोत और समुदाय संचालित है। यह एक मुफ्त थीम और कुछ पूर्व-निर्मित मॉड्यूल (जैसे पहचान प्रबंधन और किरायेदार प्रबंधन) भी प्रदान करता है।

", "VisitTheFrameworkVSCommercialDocument": "अधिक जानकारी के लिए, निम्न लिंक पर जाएँ {1} ", "ABPCommercialFollowingBenefits": "एबीपी वाणिज्यिक एबीपी ढांचे के शीर्ष पर निम्नलिखित लाभ जोड़ता है;", "Professional": "पेशेवर", "UIThemes": "यूआई थीम", "EnterpriseModules": "एंटरप्राइज़ तैयार, सुविधा संपन्न, पूर्व-निर्मित एप्लिकेशन मॉड्यूल (उदा. पहचान सर्वर प्रबंधन, SaaS प्रबंधन, भाषा प्रबंधन)", - "ToolingToSupport": "आपकी विकास उत्पादकता का समर्थन करने के लिए टूलिंग (उदा. ABP Suite)", + "ToolingToSupport": "आपकी विकास उत्पादकता का समर्थन करने के लिए टूलिंग (उदा.ABP Suite)", "PremiumSupportLink": "प्रीमियम समर्थन", "WhatDoIDownloadABPCommercial": "जब मैं एबीपी कमर्शियल खरीदता हूं तो क्या डाउनलोड करता हूं?", "CreateUnlimitedSolutions": "एक बार जब आप एबीपी वाणिज्यिक लाइसेंस खरीद लेते हैं, तो आप असीमित समाधान बनाने में सक्षम होंगे जैसा कि आरंभ करना दस्तावेज़ में वर्णित है।", @@ -177,7 +177,7 @@ "ChangingLicenseType": "क्या मैं भविष्य में अपना लाइसेंस प्रकार बदल सकता हूं?", "ChangingLicenseTypeExplanation": "आप अपने समान लाइसेंस प्रकार में हमेशा नए डेवलपर्स को जोड़ सकते हैं। यह भी देखें \"एबीपी कमर्शियल पर कितने डेवलपर काम कर सकते हैं?\"। आप गणना मूल्य अंतर का भुगतान करके एक उच्च लाइसेंस के लिए भी अपग्रेड कर सकते हैं। जब आप उच्च लाइसेंस योजना में अपग्रेड करते हैं, तो आपको नई योजना का लाभ मिलता है, लेकिन लाइसेंस अपग्रेड लाइसेंस की समाप्ति की तारीख को नहीं बदलता है।", "LicenseExtendUpgradeDiff": "लाइसेंस विस्तार और उन्नयन के बीच क्या अंतर है?", - "LicenseExtendUpgradeDiffExplanation": " विस्तार: अपने लाइसेंस का विस्तार / नवीनीकरण करके, आप प्रीमियम समर्थन प्राप्त करना और मॉड्यूल और थीम के लिए प्रमुख अपडेट प्राप्त करना जारी रखेंगे। इसके अलावा, आप नई परियोजनाओं को जारी रखने में सक्षम होंगे। और आप अभी भी एबीपी सूट का उपयोग कर पाएंगे जो आपके विकास को गति देता है।
उन्नयन: अपने लाइसेंस को अपग्रेड करके, आप एक उच्च लाइसेंस योजना को बढ़ावा देंगे जिससे आप अतिरिक्त लाभ प्राप्त कर सकेंगे। । लाइसेंस योजनाओं के बीच अंतर की जांच करने के लिए लाइसेंस तुलना तालिका देखें। दूसरी ओर, जब आप अपग्रेड करते हैं, तो आपकी लाइसेंस की समाप्ति तिथि नहीं बदलेगी! > अपनी लाइसेंस की अंतिम तिथि बढ़ाने के लिए, आपको अपने लाइसेंस का विस्तार करना होगा।", + "LicenseExtendUpgradeDiffExplanation": "Extending: By extending/renewing your license, you will continue to get premium support and get major updates for the modules and themes. Besides, you will be able to continue creating new projects. And you will still be able to use ABP Suite which speeds up your development.
Upgrading: By upgrading your license, you will promote to a higher license plan which will allow you to get additional benefits. See the license comparison table to check the differences between the license plans.On the other hand, when you upgrade, your license expiry date will not change!To extend your license end date, you need to extend your license.", "LicenseRenewalCost": "1 वर्ष के बाद लाइसेंस नवीनीकरण लागत क्या है?", "LicenseRenewalCostExplanation": "सभी एबीपी वाणिज्यिक स्थायी लाइसेंसों की नवीनीकरण (विस्तार) दर लाइसेंस सूची मूल्य का {0} है। मानक टीम लाइसेंस का नवीनीकरण मूल्य ${1} है, मानक व्यवसाय लाइसेंस ${2} है और मानक एंटरप्राइज़ लाइसेंस ${3} है। यदि आप पहले से ही ग्राहक हैं, तो उपलब्ध नवीनीकरण मूल्य-निर्धारण की समीक्षा के लिए अपने खाते में लॉग इन करें।", "HowDoIRenewMyLicense": "मैं अपने लाइसेंस का नवीनीकरण कैसे करूँ?", @@ -192,7 +192,7 @@ "WhatHappensWhenLicenseEnds": "मेरे लाइसेंस की अवधि समाप्त होने पर क्या होता है?", "WhatHappensWhenLicenseEndsExplanation1": "ABP वाणिज्यिक लाइसेंस प्रकार स्थायी लाइसेंस है। आपके लाइसेंस की समय सीमा समाप्त होने के बाद, आप अपने प्रोजेक्ट को विकसित करना जारी रख सकते हैं। और आप अपने लाइसेंस को नवीनीकृत करने के लिए बाध्य नहीं हैं। आपका लाइसेंस बॉक्स से बाहर एक साल के अपडेट और समर्थन योजना के साथ आता है। नई सुविधाओं, प्रदर्शन में सुधार, बग फिक्स, समर्थन प्राप्त करना जारी रखने और एबीपी सूट का उपयोग जारी रखने के लिए, हर साल अपनी योजना को नवीनीकृत करना सुनिश्चित करें। जब आपका लाइसेंस समाप्त हो जाता है, तो आप निम्नलिखित में से अधिक लाभ प्राप्त नहीं कर पाएंगे;", "WhatHappensWhenLicenseEndsExplanation2": "आप एबीपी कमर्शियल का उपयोग करके नए समाधान नहीं बना सकते हैं, लेकिन आप अपने मौजूदा अनुप्रयोगों को हमेशा के लिए विकसित कर सकते हैं।", - "WhatHappensWhenLicenseEndsExplanation3": "आप अपने मुख्य संस्करण के भीतर मॉड्यूल और विषयों के लिए अद्यतन प्राप्त करने में सक्षम होंगे। उदाहरण के लिए; यदि आप किसी मॉड्यूल के v3.2.0 का उपयोग कर रहे हैं, तो आप उस मॉड्यूल के v3.x.x (v3.3.0, v3.5.2 ... आदि) के लिए अपडेट प्राप्त कर सकते हैं। लेकिन आपको अगले प्रमुख संस्करण के लिए अपडेट नहीं मिल सकता है (जैसे v4.x, v5.x)", + "WhatHappensWhenLicenseEndsExplanation3": "आप अपने मुख्य संस्करण के भीतर मॉड्यूल और विषयों के लिए अद्यतन प्राप्त करने में सक्षम होंगे। उदाहरण के लिए; यदि आप किसी मॉड्यूल के v3.2.0 का उपयोग कर रहे हैं, तो आप उस मॉड्यूल के v3.x.x (v3.3.0, v3.5.2... आदि) के लिए अपडेट प्राप्त कर सकते हैं। लेकिन आपको अगले प्रमुख संस्करण के लिए अपडेट नहीं मिल सकता है (जैसे v4.x, v5.x)", "WhatHappensWhenLicenseEndsExplanation4": "आप अपने लाइसेंस समाप्त होने के बाद एबीपी वाणिज्यिक मंच में जोड़े गए नए मॉड्यूल और थीम स्थापित नहीं कर सकते।", "WhatHappensWhenLicenseEndsExplanation5": "आप एबीपी सूट का उपयोग नहीं कर सकते।", "WhatHappensWhenLicenseEndsExplanation6": "अब आपको प्रीमियम सहायता नहीं मिल सकती है।", @@ -203,7 +203,7 @@ "TrialPlan": "क्या आपके पास एक परीक्षण योजना है?", "TrialPlanExplanation": "अभी के लिए, एबीपी कमर्शियल में ट्रायल प्लान नहीं है। टीम लाइसेंस के लिए हम 30 दिन की मनी बैक गारंटी प्रदान करते हैं। आप पहले 30 दिनों में धनवापसी का अनुरोध कर सकते हैं। बिजनेस और एंटरप्राइज लाइसेंस के लिए, हम 30 दिनों में 60% रिफंड प्रदान करते हैं। ऐसा इसलिए है क्योंकि व्यवसाय और एंटरप्राइज़ लाइसेंस में सभी मॉड्यूल और थीम का पूर्ण स्रोत कोड शामिल है।", "DoYouAcceptBankWireTransfer": "क्या आप बैंक वायर ट्रांसफर स्वीकार करते हैं?", - "DoYouAcceptBankWireTransferExplanation": "हां, हम बैंक वायर ट्रांसफर स्वीकार करते हैं।
बैंक वायर ट्रांसफर के माध्यम से लाइसेंस राशि भेजने के बाद, हमें अपनी रसीद और अनुरोधित लाइसेंस प्रकार ई-मेल के माध्यम से भेजें।
हमारे अंतरराष्ट्रीय बैंक खाते की जानकारी:", + "DoYouAcceptBankWireTransferExplanation": "हां, हम बैंक वायर ट्रांसफर स्वीकार करते हैं।
बैंक वायर ट्रांसफर के माध्यम से लाइसेंस राशि भेजने के बाद, हमें अपनी रसीद और अनुरोधित लाइसेंस प्रकार ई-मेल के माध्यम से भेजें।
हमारे अंतरराष्ट्रीय बैंक खाते की जानकारी:", "HowToUpgrade": "नया संस्करण उपलब्ध होने पर मौजूदा एप्लिकेशन को कैसे अपग्रेड किया जाए?", "HowToUpgradeExplanation1": "जब आप ABP कमर्शियल का उपयोग करके एक नया एप्लिकेशन बनाते हैं, तो सभी मॉड्यूल और थीम को NuGet और NPM पैकेज के रूप में उपयोग किया जाता है। इसलिए, नया संस्करण उपलब्ध होने पर आप आसानी से संकुल को अपग्रेड कर सकते हैं।", "HowToUpgradeExplanation2": "मानक NuGet/NPM अपग्रेड के अलावा, ABP CLI एक अपडेट कमांड प्रदान करता है जो आपके समाधान में सभी ABP संबंधित पैकेजों को स्वचालित रूप से ढूंढता और अपग्रेड करता है।", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json index 2eaef28623..c2573b2121 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json @@ -42,7 +42,7 @@ "NotOrganizationMember": "Non sei membro di nessuna organizzazione.", "UnsubscribeLicenseExpirationEmailSuccessTitle": "Iscrizione annullata con successo", "UnsubscribeLicenseExpirationEmailSuccessMessage": "Non riceverai più email di promemoria della data di scadenza della licenza.", - "IndexPageHeroSection": " Una completa piattaforma di sviluppo web integrata framework ", + "IndexPageHeroSection": " Una completa piattaforma di sviluppo web integrata framework ", "AbpCommercialShortDescription": "ABP Commercial fornisce moduli applicativi predefiniti, strumenti per lo sviluppo rapido di applicazioni, temi dell'interfaccia utente professionale, supporto premium e altro ancora.", "LiveDemo": "Dimostrazione dal vivo", "GetLicence": "Ottieni una licenza", @@ -51,47 +51,47 @@ "Startup": "Avviare", "Templates": "Modelli", "Developer": "Sviluppatore", - "Tools": "Utensili", + "Tools": "Strumenti", "Premium": "Premium", - "PremiumSupport": "Supporto premium", - "PremiumForumSupport": "Supporto forum premium", - "UI": "UI", + "PremiumSupport": "Supporto Premium", + "PremiumForumSupport": "Supporto Forum Premium", + "UI": "Interfaccia Utente", "Themes": "Temi", "JoinOurNewsletter": "Iscriviti alla nostra newsletter", "Send": "Spedire", "Learn": "Imparare", "AdditionalServices": "Servizi aggiuntivi", - "WhatIsABPFramework": "QUAL È IL QUADRO ABP?", + "WhatIsABPFramework": "COSA E` IL FRAMEWORK ABP?", "OpenSourceBaseFramework": "Framework di base open source", - "ABPFrameworkExplanation": "

ABP Commercial si basa su ABP Framework, un framework per applicazioni web open source e guidato dalla comunità per ASP.NET Core.

ABP Framework fornisce un'eccellente infrastruttura per la scrittura gestibile ed estensibile e codice testabile con best practice.

Costruito e integrato in strumenti popolari che già conosci. Bassa curva di apprendimento, facile adattamento, sviluppo confortevole.

", + "ABPFrameworkExplanation": "

ABP Commercial si basa su ABP Framework, un framework per applicazioni web open source e guidato dalla comunità per ASP.NET Core.

ABP Framework fornisce un'eccellente infrastruttura per la scrittura gestibile ed estensibile e codice testabile con best practice.

Costruito e integrato in strumenti popolari che già conosci. Bassa curva di apprendimento, facile adattamento, sviluppo confortevole.

", "Modular": "Modulare", "MicroserviceCompatible": "Compatibile con microservizi", - "DomainDrivenDesignInfrastructure": "Infrastruttura di progettazione basata sul dominio", + "DomainDrivenDesignInfrastructure": "Infrastruttura Domain Driven Design", "MultiTenancy": "Multi-Tenancy", "DistributedMessaging": "Messaggistica distribuita", "DynamicProxying": "Proxying dinamico", - "BackgroundJobs": "Lavori in background", - "AuditLogging": "Registrazione di audit", + "BackgroundJobs": "Operazioni in background", + "AuditLogging": "Registri di controllo", "BLOBStoring": "Archiviazione BLOB", "BundlingMinification": "Raggruppamento e minimizzazione", "AdvancedLocalization": "Localizzazione avanzata", "ManyMore": "Molti altri", "ExploreTheABPFramework": "Esplora il framework ABP", - "WhyUseTheABPCommercial": "Perché utilizzare lo spot pubblicitario ABP?", - "WhyUseTheABPCommercialExplanation": "

La creazione di applicazioni Web di livello aziendale può essere complessa e richiede tempo.

ABP Commercial offre l'infrastruttura di base perfetta necessaria per tutti i moderni ASP.NET Core di livello aziendale soluzioni basate. Dalla progettazione all'implementazione, l'intero ciclo di sviluppo è potenziato dalle funzionalità e dai moduli integrati di ABP.

", + "WhyUseTheABPCommercial": "Perché utilizzare ABP Commercial?", + "WhyUseTheABPCommercialExplanation": "

La creazione di applicazioni Web di livello aziendale può essere complessa e richiede tempo.

ABP Commercial offre l'infrastruttura di base perfetta necessaria per tutti i moderni ASP.NET Core di livello aziendale soluzioni basate. Dalla progettazione all'implementazione, l'intero ciclo di sviluppo è potenziato dalle funzionalità e dai moduli integrati di ABP.

", "StartupTemplatesShortDescription": "I modelli di avvio ti consentono di avviare rapidamente il tuo progetto in pochi secondi.", "UIFrameworksOptions": "Opzioni dei framework dell'interfaccia utente;", "DatabaseProviderOptions": "Opzioni del provider di database;", "PreBuiltApplicationModules": "Moduli applicativi predefiniti", "PreBuiltApplicationModulesShortDescription": "I requisiti delle applicazioni più comuni sono già stati sviluppati per te come moduli riutilizzabili.", - "Account": "account", + "Account": "Account", "Blogging": "Blogging", "Identity": "Identità", "IdentityServer": "Identity Server", "Saas": "Saas", "LanguageManagement": "Gestione della lingua", "TextTemplateManagement": "Gestione dei modelli di testo", - "See All Modules": "SeeAllModules", + "See All Modules": "Vedi tutti i moduli", "ABPSuite": "ABP Suite", "AbpSuiteShortDescription": "ABP Suite è uno strumento complementare all'ABP Commercial.", "AbpSuiteExplanation": "Ti consente di creare pagine web in pochi minuti. È uno strumento .NET Core Global che può essere installato dalla riga di comando. Può creare una nuova soluzione ABP, generare pagine CRUD dal database al front-end.", @@ -100,7 +100,7 @@ "ProfessionalModernUIThemes": "Temi dell'interfaccia utente moderni e professionali", "LeptonThemeExplanation": "Lepton fornisce una gamma di temi di amministrazione Bootstrap che fungono da solida base per qualsiasi progetto che richieda dashboard di amministrazione.", "DefaultTheme": "Tema predefinito", - "MaterialTheme": "Tema materiale", + "MaterialTheme": "Tema Material", "Default2Theme": "Tema predefinito 2", "DarkTheme": "Tema scuro", "DarkBlueTheme": "Tema blu scuro", @@ -111,13 +111,13 @@ "AdditionalServicesExplanation": "Hai bisogno di servizi aggiuntivi o personalizzati? Noi e i nostri partner possiamo fornire; ", "CustomProjectDevelopment": "Sviluppo di progetti personalizzati", "CustomProjectDevelopmentExplanation": "Sviluppatori dedicati per i tuoi progetti personalizzati.", - "PortingExistingProjects": "Porting di progetti esistenti", + "PortingExistingProjects": "Miigrazione di progetti esistenti", "PortingExistingProjectsExplanation": "Migrazione dei tuoi progetti legacy alla piattaforma ABP.", "LiveSupport": "Supporto dal vivo", "LiveSupportExplanation": "Opzione di supporto remoto dal vivo quando ne hai bisogno.", "Training": "Formazione", "TrainingExplanation": "Formazione dedicata per i tuoi sviluppatori.", - "OnBoarding": "Onboarding", + "OnBoarding": "Affiancamento", "OnBoardingExplanation": "Aiuta a configurare i tuoi ambienti di sviluppo, CI e CD.", "PrioritizedTechnicalSupport": "Assistenza tecnica prioritaria", "PremiumSupportExplanation": "Oltre al grande supporto della comunità del framework ABP, il nostro team di supporto risponde alle domande tecniche e ai problemi degli utenti commerciali con alta priorità.", @@ -132,7 +132,7 @@ "SendMessage": "Invia messaggio", "Success": "Successo", "WeWillReplyYou": "Abbiamo ricevuto il tuo messaggio e ti contatteremo a breve.", - "GoHome": "Andare a casa", + "GoHome": "Torna all'inizio", "CreateLiveDemo": "Crea demo live", "RegisterToTheNewsletter": "Registrati alla newsletter per ricevere informazioni su ABP.IO, comprese le nuove versioni ecc.", "EnterYourEmailOrLogin": "Inserisci il tuo indirizzo e-mail per creare la tua demo o Accedi utilizzando il tuo account esistente.", @@ -143,28 +143,28 @@ "ApplicationTemplateArchitecture": "Questo modello di applicazione supporta anche un'architettura a più livelli in cui il livello dell'interfaccia utente, il livello API e il servizio di autenticazione sono fisicamente separati.", "SeeTheGuideOrGoToTheLiveDemo": "Consulta la guida per sviluppatori per informazioni tecniche su questo modello o vai alla demo live.", "DeveloperGuide": "Guida per sviluppatori", - "ModuleTemplate": "Modello di modulo", + "ModuleTemplate": "Modello per modulo", "ModuleTemplateExplanation1": "Vuoi creare un modulo e riutilizzarlo in diverse applicazioni? Questo modello di avvio prepara tutto per iniziare a creare un modulo dell'applicazione riutilizzabile o un microservizio .", - "ModuleTemplateExplanation2": "

Puoi supportare uno o più framework UI, uno o più provider di database per un singolo modulo. Il modello di avvio è configurato per eseguire e testare il modulo in un'applicazione minima oltre all'unità e all'infrastruttura di test di integrazione.

Consulta la guida per sviluppatori per informazioni tecniche su questo modello.

", + "ModuleTemplateExplanation2": "

Puoi supportare uno o più framework UI, uno o più provider di database per un singolo modulo. Il modello di avvio è configurato per eseguire e testare il modulo in un'applicazione minima oltre all'unità e all'infrastruttura di test di integrazione.

Consulta la guida per sviluppatori per informazioni tecniche su questo modello.

", "WithAllStyleOptions": "con tutte le opzioni di stile", "Demo": "Demo", "SeeAllModules": "Vedi tutti i moduli", "ABPCLIExplanation": "ABP CLI (Command Line Interface) è uno strumento a riga di comando per eseguire alcune operazioni comuni per soluzioni basate su ABP.", "ABPSuiteEasilyCURD": "ABP Suite è uno strumento che ti permette di creare facilmente pagine CRUD", - "WeAreHereToHelp": "Siamo qui per Aiuto ", + "WeAreHereToHelp": "Siamo qui per Aiutarti", "BrowseOrAskQuestion": "Puoi sfogliare i nostri argomenti della guida o cercare nelle domande frequenti oppure puoi farci una domanda utilizzando il modulo di contatto .", "SearchQuestionPlaceholder": "Cerca nelle domande frequenti", - "WhatIsTheABPCommercial": "Cos'è l'ABP Commercial?", + "WhatIsTheABPCommercial": "Cos'è ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Quali sono le differenze tra ABP Framework open source e ABP Commercial?", "ABPCommercialExplanation": "ABP Commercial è un insieme di moduli, strumenti, temi e servizi premium basati sul framework ABP open source. ABP Commercial è sviluppato e supportato dallo stesso team dietro il framework ABP.", - "WhatAreDifferencesThanABPFrameworkExplanation": "

ABP framework è un framework di sviluppo di applicazioni compatibile con micro-servizi per ASP.NET Core modulare. Fornisce un'architettura completa e una solida infrastruttura per farti concentrare sul tuo codice aziendale piuttosto che ripetere te stesso per ogni nuovo progetto. Si basa sulle migliori pratiche di sviluppo software e su strumenti popolari che già conosci.

Il framework ABP è completamente gratuito, open source e guidato dalla comunità. Fornisce inoltre un tema gratuito e alcuni moduli predefiniti (ad es. Gestione delle identità e gestione dei tenant).

", + "WhatAreDifferencesThanABPFrameworkExplanation": "

ABP framework è un framework di sviluppo di applicazioni compatibile con micro-servizi per ASP.NET Core modulare. Fornisce un'architettura completa e una solida infrastruttura per farti concentrare sul tuo codice aziendale piuttosto che ripetere te stesso per ogni nuovo progetto. Si basa sulle migliori pratiche di sviluppo software e su strumenti popolari che già conosci.

Il framework ABP è completamente gratuito, open source e guidato dalla comunità. Fornisce inoltre un tema gratuito e alcuni moduli predefiniti (ad es. Gestione delle identità e gestione dei tenant).

", "VisitTheFrameworkVSCommercialDocument": "Visita il seguente link, per ulteriori informazioni {1} ", "ABPCommercialFollowingBenefits": "ABP Commercial aggiunge i seguenti vantaggi al framework ABP;", "Professional": "Professionale", "UIThemes": "Temi dell'interfaccia utente", - "EnterpriseModules": " moduli applicativi preconfigurati, ricchi di funzionalità (ad es. Gestione di Identity Server, gestione SaaS, gestione della lingua)", - "ToolingToSupport": "Strumenti per supportare la produttività dello sviluppo (ad es. ABP Suite )", - "PremiumSupportLink": "Supporto Premium premium", + "EnterpriseModules": "Pronto per le imprese, moduli applicativi preconfigurati, ricchi di funzionalità (ad es. Gestione di Identity Server, gestione SaaS, gestione della lingua)", + "ToolingToSupport": "Strumenti per supportare la produttività dello sviluppo (ad es. ABP Suite )", + "PremiumSupportLink": "Supporto Premium", "WhatDoIDownloadABPCommercial": "Cosa devo scaricare quando acquisto ABP Commercial?", "CreateUnlimitedSolutions": "Dopo aver acquistato una licenza commerciale ABP, sarai in grado di creare soluzioni illimitate come descritto nel documento Guida introduttiva .", "ABPCommercialSolutionExplanation": "Quando crei una nuova applicazione, ottieni una soluzione Visual Studio (un modello di avvio) in base alle tue preferenze. La soluzione scaricata ha moduli e temi commerciali già installati e configurati per te. Puoi rimuovere un modulo preinstallato o aggiungere un altro modulo, se lo desideri. Tutti i moduli e temi vengono usati come pacchetti NuGet / NPM per impostazione predefinita.", @@ -177,7 +177,7 @@ "ChangingLicenseType": "Posso cambiare il mio tipo di licenza in futuro?", "ChangingLicenseTypeExplanation": "Puoi sempre aggiungere nuovi sviluppatori con lo stesso tipo di licenza. Vedi anche \"Quanti sviluppatori possono lavorare su ABP Commercial?\". Puoi anche passare a una licenza superiore pagando la differenza di prezzo calcolata. Quando esegui l'aggiornamento a un piano di licenza superiore, ottieni i vantaggi del nuovo piano, ma l'aggiornamento della licenza non modifica la data di scadenza della licenza.", "LicenseExtendUpgradeDiff": "Qual è la differenza tra estensione della licenza e aggiornamento?", - "LicenseExtendUpgradeDiffExplanation": " Estensione: estendendo/rinnovando la tua licenza, continuerai a ricevere supporto premium e a ricevere aggiornamenti importanti per moduli e temi. Inoltre, potrai continuare a creare nuovi progetti. E sarai ancora in grado di utilizzare ABP Suite che accelera il tuo sviluppo.
Upgrade: aggiornando la tua licenza, promuoverai un piano di licenza superiore che ti consentirà di ottenere ulteriori vantaggi . Consulta la tabella di confronto delle licenze per verificare le differenze tra i piani di licenza. D'altra parte, quando esegui l'upgrade, la data di scadenza della licenza non cambierà! Per estendere la data di fine della licenza, è necessario estendere la licenza.", + "LicenseExtendUpgradeDiffExplanation": " Estensione: estendendo/rinnovando la tua licenza, continuerai a ricevere supporto premium e a ricevere aggiornamenti importanti per moduli e temi. Inoltre, potrai continuare a creare nuovi progetti. E sarai ancora in grado di utilizzare ABP Suite che accelera il tuo sviluppo.
Upgrade: aggiornando la tua licenza, promuoverai un piano di licenza superiore che ti consentirà di ottenere ulteriori vantaggi . Consulta la tabella di confronto delle licenze per verificare le differenze tra i piani di licenza. D'altra parte, quando esegui l'upgrade, la data di scadenza della licenza non cambierà! Per estendere la data di fine della licenza, è necessario estendere la licenza.", "LicenseRenewalCost": "Qual è il costo del rinnovo della licenza dopo 1 anno?", "LicenseRenewalCostExplanation": "La tariffa di rinnovo (estensione) di tutte le licenze perpetue ABP Commercial è {0} del prezzo di listino della licenza. Il prezzo di rinnovo della licenza Team standard è $ {1}, la licenza Business standard è $ {2} e la licenza Enterprise standard è $ {3}. Se sei già un cliente, accedi al tuo account per esaminare i prezzi di rinnovo disponibili.", "HowDoIRenewMyLicense": "Come rinnovo la mia licenza?", @@ -185,14 +185,14 @@ "IsSourceCodeIncluded": "La mia licenza include il codice sorgente dei moduli e dei temi commerciali?", "IsSourceCodeIncludedExplanation1": "Dipende dal tipo di licenza che hai acquistato:", "IsSourceCodeIncludedExplanation2": " Team : la soluzione utilizza i moduli e i temi come pacchetti NuGet e NPM. Non include il loro codice sorgente. In questo modo, puoi aggiornare facilmente questi moduli e temi ogni volta che è disponibile una nuova versione. Tuttavia, non è possibile ottenere il codice sorgente dei moduli e dei temi.", - "IsSourceCodeIncludedExplanation3": " Business / Enterprise : oltre alla licenza Team, puoi scaricare il codice sorgente di qualsiasi modulo o tema di cui hai bisogno. È anche possibile rimuovere i riferimenti al pacchetto NuGet / NPM per un particolare modulo e aggiungere il relativo codice sorgente direttamente alla soluzione per modificarlo completamente.", - "IsSourceCodeIncludedExplanation4": "

Includere il codice sorgente di un modulo nella tua soluzione ti dà la massima libertà di personalizzare quel modulo. Tuttavia, non sarà possibile aggiornare automaticamente il modulo quando viene rilasciata una nuova versione.

Nessuna delle licenze include il codice sorgente di ABP Suite, che è uno strumento esterno che genera codice per te e assiste al tuo sviluppo.

Vedi la pagina dei prezzi per altre differenze tra i tipi di licenza.

", + "IsSourceCodeIncludedExplanation3": " Business/Enterprise : in aggiunta alla licenza Team, puoi scaricare il codice sorgente di qualsiasi modulo o tema di cui hai bisogno. È anche possibile rimuovere i riferimenti al pacchetto NuGet/NPM per un particolare modulo e aggiungere il relativo codice sorgente direttamente alla soluzione per modificarlo completamente.", + "IsSourceCodeIncludedExplanation4": "

Includere il codice sorgente di un modulo nella tua soluzione ti dà la massima libertà di personalizzare quel modulo. Tuttavia, non sarà possibile aggiornare automaticamente il modulo quando viene rilasciata una nuova versione.

Nessuna delle licenze include il codice sorgente di ABP Suite, che è uno strumento esterno che genera codice per te e assiste al tuo sviluppo.

Vedi la pagina dei prezzi per altre differenze tra i tipi di licenza.

", "ChangingDevelopers": "Posso cambiare gli sviluppatori registrati della mia organizzazione in futuro?", - "ChangingDevelopersExplanation": "Oltre ad aggiungere nuovi sviluppatori alla tua licenza, puoi anche modificare gli sviluppatori esistenti (puoi rimuovere uno sviluppatore e aggiungerne uno nuovo alla stessa postazione) senza alcun costo aggiuntivo.", + "ChangingDevelopersExplanation": "Oltre ad aggiungere nuovi sviluppatori alla tua licenza, puoi anche Modifica gli sviluppatori esistenti (puoi rimuovere uno sviluppatore e aggiungerne uno nuovo alla stessa postazione) senza alcun costo aggiuntivo.", "WhatHappensWhenLicenseEnds": "Cosa succede al termine del periodo di licenza?", - "WhatHappensWhenLicenseEndsExplanation1": "Il tipo di licenza commerciale ABP è licenza perpetua . Dopo la scadenza della licenza, puoi continuare a sviluppare il tuo progetto. E non sei obbligato a rinnovare la tua licenza. La tua licenza viene fornita con un anno di aggiornamenti e piano di supporto pronto all'uso. Per continuare a ricevere nuove funzionalità, miglioramenti delle prestazioni, correzioni di bug, supporto e continuare a utilizzare ABP Suite, assicurati di rinnovare il tuo piano ogni anno. Quando la tua licenza scade, non sarai in grado di ottenere più dei seguenti vantaggi;", + "WhatHappensWhenLicenseEndsExplanation1": "Il tipo di licenza ABP Commercial è licenza perpetua . Dopo la scadenza della licenza, puoi continuare a sviluppare il tuo progetto. E non sei obbligato a rinnovare la tua licenza. La tua licenza viene fornita con un anno di aggiornamenti e piano di supporto pronto all'uso. Per continuare a ricevere nuove funzionalità, miglioramenti delle prestazioni, correzioni di bug, supporto e continuare a utilizzare ABP Suite, assicurati di rinnovare il tuo piano ogni anno. Quando la tua licenza scade, non sarai in grado di ottenere più dei seguenti vantaggi;", "WhatHappensWhenLicenseEndsExplanation2": "Non è possibile creare nuove soluzioni utilizzando ABP Commercial, ma è possibile continuare a sviluppare le applicazioni esistenti per sempre.", - "WhatHappensWhenLicenseEndsExplanation3": "Sarai in grado di ottenere aggiornamenti per i moduli e i temi nella tua versione MAJOR. Per esempio; se stai usando la v3.2.0 di un modulo, puoi comunque ottenere gli aggiornamenti per la v3.x.x (v3.3.0, v3.5.2 ... ecc.) di quel modulo. Ma non puoi ottenere aggiornamenti per la prossima versione principale (come v4.x, v5.x)", + "WhatHappensWhenLicenseEndsExplanation3": "Sarai in grado di ottenere aggiornamenti per i moduli e i temi nella tua versione MAJOR. Per esempio; se stai usando la v3.2.0 di un modulo, puoi comunque ottenere gli aggiornamenti per la v3.x.x (v3.3.0, v3.5.2... ecc.) di quel modulo. Ma non puoi ottenere aggiornamenti per la prossima versione principale (come v4.x, v5.x)", "WhatHappensWhenLicenseEndsExplanation4": "Non è possibile installare nuovi moduli e temi aggiunti alla piattaforma ABP Commercial al termine della licenza.", "WhatHappensWhenLicenseEndsExplanation5": "Non è possibile utilizzare ABP Suite.", "WhatHappensWhenLicenseEndsExplanation6": "Non puoi più ottenere l ' assistenza premium .", @@ -203,7 +203,7 @@ "TrialPlan": "Hai un piano di prova?", "TrialPlanExplanation": "Per ora, ABP Commercial non ha un piano di prova. Per le licenze Team forniamo una garanzia di rimborso di 30 giorni. Puoi richiedere un rimborso solo nei primi 30 giorni. Per le licenze Business ed Enterprise, forniamo un rimborso del 60% in 30 giorni. Questo perché le licenze Business ed Enterprise includono il codice sorgente completo di tutti i moduli e i temi.", "DoYouAcceptBankWireTransfer": "Accettate bonifici bancari?", - "DoYouAcceptBankWireTransferExplanation": "Sì, accettiamo bonifico bancario.
Dopo aver inviato l'importo della licenza tramite bonifico bancario, inviaci la ricevuta e il tipo di licenza richiesto tramite e-mail.
Informazioni sul nostro conto bancario internazionale:", + "DoYouAcceptBankWireTransferExplanation": "Sì, accettiamo bonifico bancario.
Dopo aver inviato l'importo della licenza tramite bonifico bancario, inviaci la ricevuta e il tipo di licenza richiesto tramite e-mail.
Informazioni sul nostro conto bancario internazionale:", "HowToUpgrade": "Come aggiornare le applicazioni esistenti quando è disponibile una nuova versione?", "HowToUpgradeExplanation1": "Quando crei una nuova applicazione utilizzando ABP Commercial, tutti i moduli e il tema vengono utilizzati come pacchetti NuGet e NPM. Quindi, puoi facilmente aggiornare i pacchetti quando è disponibile una nuova versione.", "HowToUpgradeExplanation2": "Oltre agli aggiornamenti NuGet / NPM standard, ABP CLI fornisce un comando di aggiornamento che trova e aggiorna automaticamente tutti i pacchetti relativi a ABP nella soluzione.", @@ -230,24 +230,24 @@ "HowCanIRefundVatExplanation2": "Accedi al tuo account 2Checkout ", "HowCanIRefundVatExplanation3": "Trova l'ordine appropriato e premi \"Rimborsa IVA tardiva\" (inserisci il tuo numero di partita IVA)", "HowCanIGetMyInvoice": "Come posso ricevere la mia fattura?", - "HowCanIGetMyInvoiceExplanation": "Esistono 2 gateway di pagamento per l'acquisto di una licenza: PayU e 2Checkout. Se acquisti la tua licenza tramite il gateway 2Checkout, invia la fattura in PDF al tuo indirizzo e-mail, vedi Fatturazione 2Checkout. Se acquisti tramite il gateway PayU o tramite bonifico bancario, prepareremo e invieremo la tua fattura. Puoi richiedere la fattura dalla pagina di gestione dell'organizzazione. ", + "HowCanIGetMyInvoiceExplanation": "Esistono 2 gateway di pagamento per l'acquisto di una licenza: PayU e 2Checkout. Se acquisti la tua licenza tramite il gateway 2Checkout, invia la fattura in PDF al tuo indirizzo e-mail, vedi Fatturazione 2Checkout. Se acquisti tramite il gateway PayU o tramite bonifico bancario, prepareremo e invieremo la tua fattura. Puoi richiedere la fattura dalla pagina di gestione dell'organizzazione.", "Forum": "Forum", "SupportExplanation": "Le licenze commerciali di ABP forniscono un supporto forum premium da parte di un team composto dagli esperti di ABP Framework.", - "PrivateTicket": "Biglietto privato", + "PrivateTicket": "Ticket privato", "PrivateTicketExplanation": "Enterprise License include anche un supporto privato con e-mail e sistema di ticket.", "AbpSuiteExplanation1": "ABP Suite ti consente di creare pagine web in pochi minuti. È uno strumento .NET Core Global che può essere installato dalla riga di comando.", "AbpSuiteExplanation2": "Può creare una nuova soluzione ABP, generare pagine CRUD dal database al front-end. Per una panoramica tecnica, vedere il documento ", "FastEasy": "Veloce e facile", "AbpSuiteExplanation3": "ABP Suite ti consente di creare facilmente pagine CRUD. Devi solo definire la tua entità e le sue proprietà, lascia che il resto sia ABP Suite per te! ABP Suite genera tutto il codice necessario per la tua pagina CRUD in pochi secondi. Supporta le interfacce utente Angular, MVC e Blazor.", "RichOptions": "Opzioni ricche", - "AbpSuiteExplanation4": "ABP Suite supporta più opzioni dell'interfaccia utente come Razor Pages e Angular . Supporta anche più database come MongoDB e tutti i database supportati da EntityFramework Core < / strong> (MS SQL Server, Oracle, MySql, PostgreSQL e altro ).", + "AbpSuiteExplanation4": "ABP Suite supporta più opzioni dell'interfaccia utente come Razor Pages e Angular . Supporta anche più database come MongoDB e tutti i database supportati da EntityFramework Core < / strong> (MS SQL Server, Oracle, MySql, PostgreSQL e altro ).", "AbpSuiteExplanation5": "La cosa buona è che non devi preoccuparti di quelle opzioni. ABP Suite comprende il tipo di progetto e genera il codice per il progetto e inserisce il codice generato nella posizione corretta nel progetto.", "SourceCode": "Codice sorgente", "AbpSuiteExplanation6": "ABP Suite genera il codice sorgente per te! Non genera file magici per generare la pagina web. ABP Suite genera il codice sorgente per Entity, Repository, Application Service, Code First Migration, JavaScript / TypeScript e CSHTML / HTML e anche le interfacce necessarie. ABP Suite genera anche il codice in base alle Best Practices di sviluppo software, quindi non devi preoccuparti della qualità del codice generato.", - "AbpSuiteExplanation7": "Dal momento che hai il codice sorgente dei blocchi costitutivi della pagina CRUD generata nei livelli di applicazione corretti, puoi facilmente modificare il codice sorgente e inserire la tua logica personalizzata / aziendale nel codice generato.", + "AbpSuiteExplanation7": "Dal momento che hai il codice sorgente dei blocchi costitutivi della pagina CRUD generata nei livelli di applicazione corretti, puoi facilmente Modifica il codice sorgente e inserire la tua logica personalizzata/aziendale nel codice generato.", "CrossPlatform": "Piattaforma multipla", - "AbpSuiteExplanation8": "ABP Suite è costruito con .NET Core ed è multipiattaforma. Funziona come un'applicazione web sul tuo computer locale. Puoi eseguirlo su Windows , Mac e Linux ", - "OtherFeatures": "Altre caratteristiche", + "AbpSuiteExplanation8": "ABP Suite è costruito con .NET Core ed è multipiattaforma. E` un'applicazione web sul tuo computer locale. Puoi eseguirlo su Windows, Mac e Linux", + "OtherFeatures": "Altre Funzionalità", "OtherFeatures1": "Aggiorna facilmente i pacchetti NuGet e NPM sulla tua soluzione.", "OtherFeatures2": "Rigenera le pagine già generate da zero.", "OtherFeatures3": "Crea nuove soluzioni", @@ -255,7 +255,7 @@ "HotToRunSolution": "Come eseguire la tua soluzione?", "HotToRunSolutionExplanation": "Vedere il documento introduttivo per apprendere come configurare ed eseguire la soluzione.", "GettingStarted": "Iniziare", - "WebAppDevTutorial": "Tutorial per sviluppatori di app Web", + "WebAppDevTutorial": "Tutorial per sviluppatori di App Web", "WebAppDevTutorialExplanation": "Vedere il documento tutorial sullo sviluppo di applicazioni Web per un esempio di sviluppo passo passo.", "Document": "Documento", "UsingABPSuiteToCURD": "Utilizzo di ABP Suite per la generazione di pagine CRUD e gli strumenti", @@ -264,9 +264,9 @@ "Documentation": "Documentazione", "SeeModulesDocument": "Vedere il documento dei moduli per un elenco di tutti i moduli commerciali (pro) e dei relativi documenti.", "Pricing": "Prezzi", - "PricingExplanation": "Scegli le caratteristiche e le funzionalità di cui la tua azienda ha bisogno oggi. Esegui facilmente l'upgrade man mano che la tua attività cresce.", - "Team": "Squadra", - "Business": "Attività commerciale", + "PricingExplanation": "Scegli le Funzionalità e le funzionalità di cui la tua azienda ha bisogno oggi. Esegui facilmente l'upgrade man mano che la tua attività cresce.", + "Team": "Team", + "Business": "Business", "Enterprise": "Enterprise", "Custom": "Personalizzato", "IncludedDeveloperLicenses": "Licenze per sviluppatori incluse", @@ -285,7 +285,7 @@ "UnlimitedServerDeployment": "Distribuzione illimitata del server", "YearUpgrade": "1 anno di aggiornamento", "YearPremiumForumSupport": "1 anno di supporto forum premium", - "ForumSupportIncidentCountYear": "Conteggio degli incidenti di supporto del forum / anno", + "ForumSupportIncidentCountYear": "Conteggio delle richieste di supporto del forum/anno", "PrivateTicketEmailSupport": "Ticket privato e supporto via e-mail", "BuyNow": "Acquista ora", "PayViaAmexCard": "Come posso pagare tramite la mia carta AMEX?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json index 3d06abb52e..e2fef9e68d 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json @@ -29,14 +29,14 @@ "ContributionGuide": "Contribution Guide", "BugReport": "Virhe raportti", "SeeAllArticles": "Katso kaikki viestit", - "WelcomeToABPCommunity!": "Tervetuloa ABP-yhteisöön!", + "WelcomeToABPCommunity!": "Tervetuloa ABP Community!", "MyProfile": "Profiilini", "MyOrganizations": "Omat organisaatiot", "EmailNotValid": "Ole hyvä ja syötä toimiva sähköpostiosoite.", "FeatureRequest": "Ominaisuuspyyntö", "CreateArticleTitleInfo": "Viestiluettelossa näytettävän viestin nimi.", "CreateArticleSummaryInfo": "Lyhyt yhteenveto viestistä, joka näytetään postituslistalla.", - "CreateArticleCoverInfo": "Lisää tehokkaan artikkelin luomiseksi kansikuva. Lataa 16: 9-kuvasuhteen kuvat parhaan näkymän saamiseksi. Tiedoston enimmäiskoko: 1 Mt.", + "CreateArticleCoverInfo": "Lisää tehokkaan artikkelin luomiseksi kansikuva. Lataa 16:9 -kuvasuhteen kuvat parhaan näkymän saamiseksi. Tiedoston enimmäiskoko: 1MB.", "ThisExtensionIsNotAllowed": "Tätä laajennusta ei sallita.", "TheFileIsTooLarge": "Tiedosto on liian suuri.", "GoToTheArticle": "Siirry artikkeliin", @@ -55,18 +55,18 @@ "Asked": "kysyi", "AllQuestions": "Kaikki kysymykset", "NextVersion": "Seuraava versio", - "MilestoneErrorMessage": "Nykyisiä virstanpylväitä koskevia tietoja ei saatu Githubilta.", + "MilestoneErrorMessage": "Nykyisiä virstanpylväitä koskevia tietoja ei saatu Github.", "QuestionItemErrorMessage": "Viimeisimmät kysymystiedot Stackoverflow'sta epäonnistui.", "Oops": "Oho!", "CreateArticleSuccessMessage": "Artikkeli on lähetetty onnistuneesti. Se julkaistaan sivuston järjestelmänvalvojan tarkistuksen jälkeen.", - "ChooseCoverImage": "Valitse kansikuva ...", + "ChooseCoverImage": "Valitse kansikuva...", "CoverImage": "Kansikuva", "ShareYourExperiencesWithTheABPFramework": "Jaa kokemuksesi ABP-puitteista!", "Optional": "Valinnainen", "UpdateUserWebSiteInfo": "Esimerkki: https://johndoe.com", "UpdateUserTwitterInfo": "Esimerkki: johndoe", "UpdateUserGithubInfo": "Esimerkki: johndoe", - "UpdateUserLinkedinInfo": "Esimerkki: https: //www.linkedin.com / ...", + "UpdateUserLinkedinInfo": "Esimerkki: https://www.linkedin.com/...", "UpdateUserCompanyInfo": "Esimerkki: Volosoft", "UpdateUserJobTitleInfo": "Esimerkki: Ohjelmistokehittäjä", "UserName": "Käyttäjänimi", @@ -84,7 +84,7 @@ "ProfileImageChange": "Vaihda profiilikuva", "BlogItemErrorMessage": "Viimeisimpiä blogiviestitietoja ei saatu ABP: ltä.", "PlannedReleaseDate": "Suunniteltu julkaisupäivä", - "CommunityArticleRequestErrorMessage": "Uusinta artikkelipyyntöä ei saatu Githubilta.", + "CommunityArticleRequestErrorMessage": "Uusinta artikkelipyyntöä ei saatu Github.", "ArticleRequestFromGithubIssue": "Artikkelipyyntöjä ei ole nyt.", "LatestArticles": "Uusimmat viestit", "ArticleRequests": "Artikkelipyynnöt", @@ -115,30 +115,30 @@ "VideoUrl": "Videon URL-osoite", "GithubArticleUrl": "Github-artikkelien URL-osoite", "ExternalArticleUrl": "Ulkoisen artikkelin URL-osoite", - "CreatePostCoverInfo": "Lisää kansikuva, jotta voit luoda tehokkaan viestin. Lataa 16: 9-kuvasuhteen kuvat parhaan näkymän saamiseksi. Tiedoston enimmäiskoko: 1 Mt.", - "ThankYouForContribution": "Kiitos osallistumisesta ABP-yhteisöön.", + "CreatePostCoverInfo": "Lisää kansikuva, jotta voit luoda tehokkaan viestin. Lataa 16:9 -kuvasuhteen kuvat parhaan näkymän saamiseksi. Tiedoston enimmäiskoko: 1MB.", + "ThankYouForContribution": "Kiitos osallistumisesta ABP Community.", "GithubArticle": "Github-artikkeli", - "GithubArticleSubmitStepOne": "1. Kirjoita artikkeli mistä tahansa julkisesta GitHub-arkistosta Markdown-muodossa. esimerkki ", - "GithubArticleSubmitStepTwo": " 2. Lähetä artikkelin URL-osoite lomaketta käyttämällä.", - "GithubArticleSubmitStepThree": " 3. Artikkelisi renderöidään tällä verkkosivustolla.", + "GithubArticleSubmitStepOne": "1. Kirjoita artikkeli mistä tahansa julkisesta GitHub-arkistosta Markdown-muodossa. esimerkki ", + "GithubArticleSubmitStepTwo": " 2. Lähetä artikkelin URL-osoite lomaketta käyttämällä.", + "GithubArticleSubmitStepThree": " 3. Artikkelisi renderöidään tällä verkkosivustolla.", "YoutubeVideo": "Youtube-video", - "YoutubeVideoSubmitStepOne": " 1. Julkaise videosi YouTubessa.", - "YoutubeVideoSubmitStepTwo": " 2. Lähetä videon URL-osoite lomaketta käyttäen.", - "YoutubeVideoSubmitStepThree": " 3. Vierailijat voivat katsella videosisältöäsi suoraan tällä verkkosivustolla.", + "YoutubeVideoSubmitStepOne": " 1. Julkaise videosi YouTubessa.", + "YoutubeVideoSubmitStepTwo": " 2. Lähetä videon URL-osoite lomaketta käyttäen.", + "YoutubeVideoSubmitStepThree": " 3. Vierailijat voivat katsella videosisältöäsi suoraan tällä verkkosivustolla.", "ExternalContent": "Ulkoinen sisältö", - "ExternalContentSubmitStepOne": " 1. Luo sisältöä mille tahansa julkiselle alustalle (media, oma blogi tai mihin tahansa haluat).", - "ExternalContentSubmitStepTwo": " 2. Lähetä sisällön URL-osoite lomaketta käyttämällä.", - "ExternalContentSubmitStepThree": " 3. Vierailijat ohjataan alkuperäisen verkkosivuston sisältöön.", + "ExternalContentSubmitStepOne": " 1. Luo sisältöä mille tahansa julkiselle alustalle (media, oma blogi tai mihin tahansa haluat).", + "ExternalContentSubmitStepTwo": " 2. Lähetä sisällön URL-osoite lomaketta käyttämällä.", + "ExternalContentSubmitStepThree": " 3. Vierailijat ohjataan alkuperäisen verkkosivuston sisältöön.", "ChooseYourContentType": "Valitse tapa, jolla haluat lisätä sisältöä.", - "PostContentViaGithub": "Haluan lisätä artikkelini GitHub -merkintäsääntöjen mukaisesti.", - "PostContentViaYoutube": "Haluan jakaa videoni, jotka ovat käytettävissä Youtube täällä.", - "PostContentViaExternalSource": "Haluan lisätä toisella alustalla julkaisemani sisällön tähän.", + "PostContentViaGithub": "Haluan lisätä artikkelini GitHub -merkintäsääntöjen mukaisesti.", + "PostContentViaYoutube": "Haluan jakaa videoni, jotka ovat käytettävissä Youtube täällä.", + "PostContentViaExternalSource": "Haluan lisätä toisella alustalla julkaisemani sisällön tähän.", "GitHubUserNameValidationMessage": "Github-käyttäjänimesi ei voi sisältää välilyöntiä. Varmista, että Github-käyttäjänimesi on oikea.", "PersonalSiteUrlValidationMessage": "Henkilökohtaisen sivuston URL-osoite ei voi sisältää välilyöntiä. Varmista, että henkilökohtaisen sivuston URL-osoite on oikea.", "TwitterUserNameValidationMessage": "Twitter-käyttäjänimesi ei voi sisältää välilyöntiä. Varmista, että Twitter-käyttäjänimesi on oikea.", "LinkedinUrlValidationMessage": "Linkedin-URL-osoitteesi ei voi sisältää välilyöntiä. Varmista, että Linkedin-URL-osoitteesi on oikea.", "NoPostsFound": "Viestejä ei löytynyt!", - "SearchInPosts": "Hae viesteistä ...", + "SearchInPosts": "Hae viesteistä...", "MinimumSearchContent": "Sinun on annettava vähintään 3 merkkiä!" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fr.json index 734dadadcd..5530d28100 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fr.json @@ -59,14 +59,14 @@ "QuestionItemErrorMessage": "Impossible d'obtenir les derniers détails de la question de Stackoverflow.", "Oops": "Oops!", "CreateArticleSuccessMessage": "L'article a été soumis avec succès. Il sera publié après un examen de l'administrateur du site.", - "ChooseCoverImage": "Choisissez une image de couverture ...", + "ChooseCoverImage": "Choisissez une image de couverture...", "CoverImage": "Image de couverture", "ShareYourExperiencesWithTheABPFramework": "Partagez vos expériences avec le Framework ABP!", "Optional": "Optionnel", "UpdateUserWebSiteInfo": "Exemple: https://johndoe.com", "UpdateUserTwitterInfo": "Exemple: johndoe", "UpdateUserGithubInfo": "Exemple: johndoe", - "UpdateUserLinkedinInfo": "Exemple: https: //www.linkedin.com / ...", + "UpdateUserLinkedinInfo": "Exemple: https://www.linkedin.com/...", "UpdateUserCompanyInfo": "Exemple: Volosoft", "UpdateUserJobTitleInfo": "Exemple: développeur de logiciels", "UserName": "Nom d'utilisateur", @@ -118,27 +118,27 @@ "CreatePostCoverInfo": "Pour créer un article efficace, ajoutez une photo de couverture. Téléchargez des images au format 16: 9 pour une meilleure vue. Taille maximale du fichier: 1 Mo.", "ThankYouForContribution": "Merci de contribuer à la communauté ABP.", "GithubArticle": "Article Github", - "GithubArticleSubmitStepOne": " 1. Rédigez un article sur n'importe quel référentiel GitHub public au format Markdown. Exemple de ", - "GithubArticleSubmitStepTwo": " 2. Envoyez l'URL de votre article à l'aide du formulaire.", - "GithubArticleSubmitStepThree": " 3. Votre article sera rendu sur ce site Web.", + "GithubArticleSubmitStepOne": " 1. Rédigez un article sur n'importe quel référentiel GitHub public au format Markdown. Exemple de ", + "GithubArticleSubmitStepTwo": " 2. Envoyez l'URL de votre article à l'aide du formulaire.", + "GithubArticleSubmitStepThree": " 3. Votre article sera rendu sur ce site Web.", "YoutubeVideo": "Vidéo Youtube", - "YoutubeVideoSubmitStepOne": " 1. Publiez votre vidéo sur YouTube.", - "YoutubeVideoSubmitStepTwo": " 2. Envoyez l'URL de la vidéo à l'aide du formulaire.", - "YoutubeVideoSubmitStepThree": " 3. Les visiteurs pourront visionner votre contenu vidéo directement sur ce site Web.", + "YoutubeVideoSubmitStepOne": " 1. Publiez votre vidéo sur YouTube.", + "YoutubeVideoSubmitStepTwo": " 2. Envoyez l'URL de la vidéo à l'aide du formulaire.", + "YoutubeVideoSubmitStepThree": " 3. Les visiteurs pourront visionner votre contenu vidéo directement sur ce site Web.", "ExternalContent": "Contenu externe", - "ExternalContentSubmitStepOne": " 1. Créez un contenu sur n'importe quelle plate-forme publique (support, votre propre blog ou partout où vous le souhaitez).", - "ExternalContentSubmitStepTwo": " 2. Envoyez votre URL de contenu à l'aide du formulaire.", - "ExternalContentSubmitStepThree": " 3. Les visiteurs sont redirigés vers le contenu du site Web d'origine.", + "ExternalContentSubmitStepOne": " 1. Créez un contenu sur n'importe quelle plate-forme publique (support, votre propre blog ou partout où vous le souhaitez).", + "ExternalContentSubmitStepTwo": " 2. Envoyez votre URL de contenu à l'aide du formulaire.", + "ExternalContentSubmitStepThree": " 3. Les visiteurs sont redirigés vers le contenu du site Web d'origine.", "ChooseYourContentType": "Veuillez choisir la manière dont vous souhaitez ajouter votre contenu.", - "PostContentViaGithub": "Je souhaite ajouter mon article avec GitHub conformément aux règles de démarque.", - "PostContentViaYoutube": "Je souhaite partager mes vidéos disponibles sur Youtube ici.", - "PostContentViaExternalSource": "Je souhaite ajouter le contenu que j'ai publié sur une autre plate-forme ici.", + "PostContentViaGithub": "Je souhaite ajouter mon article avec GitHub conformément aux règles de démarque.", + "PostContentViaYoutube": "Je souhaite partager mes vidéos disponibles sur Youtube ici.", + "PostContentViaExternalSource": "Je souhaite ajouter le contenu que j'ai publié sur une autre plate-forme ici.", "GitHubUserNameValidationMessage": "Votre nom d'utilisateur Github ne peut pas inclure d'espaces, veuillez vous assurer que votre nom d'utilisateur Github est correct.", "PersonalSiteUrlValidationMessage": "L'URL de votre site personnel ne peut pas inclure d'espaces, veuillez vous assurer que l'URL de votre site personnel est correcte.", "TwitterUserNameValidationMessage": "Votre nom d'utilisateur Twitter ne peut pas inclure d'espaces, veuillez vous assurer que votre nom d'utilisateur Twitter est correct.", "LinkedinUrlValidationMessage": "Votre URL Linkedin ne peut pas inclure d'espace blanc, veuillez vous assurer que votre URL Linkedin est correcte.", "NoPostsFound": "Aucun article trouvé!", - "SearchInPosts": "Rechercher dans les messages ...", + "SearchInPosts": "Rechercher dans les messages...", "MinimumSearchContent": "Vous devez saisir au moins 3 caractères!" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hi.json index 546531445e..c7977142c4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hi.json @@ -59,14 +59,14 @@ "QuestionItemErrorMessage": "Stackoverflow से नवीनतम प्रश्न विवरण प्राप्त नहीं कर सका।", "Oops": "उफ़!", "CreateArticleSuccessMessage": "अनुच्छेद सफलतापूर्वक प्रस्तुत किया गया है। इसे साइट व्यवस्थापक से समीक्षा के बाद प्रकाशित किया जाएगा।", - "ChooseCoverImage": "कवर छवि चुनें ...", + "ChooseCoverImage": "कवर छवि चुनें...", "CoverImage": "कवर छवि", "ShareYourExperiencesWithTheABPFramework": "ABP फ्रेमवर्क के साथ अपने अनुभव साझा करें!", "Optional": "ऐच्छिक", "UpdateUserWebSiteInfo": "उदाहरण: https://johndoe.com", "UpdateUserTwitterInfo": "उदाहरण: जॉन्डो", "UpdateUserGithubInfo": "उदाहरण: जॉन्डो", - "UpdateUserLinkedinInfo": "उदाहरण: https: //www.linkedin.com / ...", + "UpdateUserLinkedinInfo": "उदाहरण: https://www.linkedin.com/...", "UpdateUserCompanyInfo": "उदाहरण: वोलोसॉफ्ट", "UpdateUserJobTitleInfo": "उदाहरण: सॉफ्टवेयर डेवलपर", "UserName": "उपयोगकर्ता नाम", @@ -119,26 +119,26 @@ "ThankYouForContribution": "ABP समुदाय में योगदान के लिए धन्यवाद।", "GithubArticle": "गीथब लेख", "GithubArticleSubmitStepOne": "1. मार्कडाउन प्रारूप के साथ किसी भी सार्वजनिक GitHub रिपॉजिटरी पर एक लेख लिखें। उदाहरण ", - "GithubArticleSubmitStepTwo": " 2। फ़ॉर्म का उपयोग करके अपना लेख URL सबमिट करें।", - "GithubArticleSubmitStepThree": " 3। इस वेब साइट में आपका लेख प्रस्तुत किया जाएगा।", + "GithubArticleSubmitStepTwo": " 2। फ़ॉर्म का उपयोग करके अपना लेख URL सबमिट करें।", + "GithubArticleSubmitStepThree": " 3। इस वेब साइट में आपका लेख प्रस्तुत किया जाएगा।", "YoutubeVideo": "यूट्यूब वीडियो", - "YoutubeVideoSubmitStepOne": " 1। YouTube पर अपना वीडियो प्रकाशित करें।", - "YoutubeVideoSubmitStepTwo": " 2। फ़ॉर्म का उपयोग करके वीडियो URL सबमिट करें।", - "YoutubeVideoSubmitStepThree": " 3। आगंतुक इस वेबसाइट पर सीधे आपकी वीडियो सामग्री देख सकेंगे।", + "YoutubeVideoSubmitStepOne": " 1। YouTube पर अपना वीडियो प्रकाशित करें।", + "YoutubeVideoSubmitStepTwo": " 2। फ़ॉर्म का उपयोग करके वीडियो URL सबमिट करें।", + "YoutubeVideoSubmitStepThree": " 3। आगंतुक इस वेबसाइट पर सीधे आपकी वीडियो सामग्री देख सकेंगे।", "ExternalContent": "बाहरी सामग्री", - "ExternalContentSubmitStepOne": " 1। किसी भी सार्वजनिक मंच पर एक सामग्री बनाएं (मध्यम, अपना स्वयं का ब्लॉग या कहीं भी आप चाहें)।", - "ExternalContentSubmitStepTwo": " 2। फ़ॉर्म का उपयोग करके अपना सामग्री URL सबमिट करें।", - "ExternalContentSubmitStepThree": " 3। मूल वेबसाइट पर आगंतुकों को सामग्री पर पुनर्निर्देशित किया गया है।", + "ExternalContentSubmitStepOne": " 1। किसी भी सार्वजनिक मंच पर एक सामग्री बनाएं (मध्यम, अपना स्वयं का ब्लॉग या कहीं भी आप चाहें)।", + "ExternalContentSubmitStepTwo": " 2। फ़ॉर्म का उपयोग करके अपना सामग्री URL सबमिट करें।", + "ExternalContentSubmitStepThree": " 3। मूल वेबसाइट पर आगंतुकों को सामग्री पर पुनर्निर्देशित किया गया है।", "ChooseYourContentType": "कृपया अपनी सामग्री जोड़ने का तरीका चुनें।", - "PostContentViaGithub": "मैं अपना लेख जोड़ना चाहता हूं GitHub अंकन नियमों के अनुसार।", - "PostContentViaYoutube": "मैं यहां उपलब्ध अपने वीडियो को Youtube पर साझा करना चाहता हूं।", - "PostContentViaExternalSource": "मैं यहां एक अन्य प्लेटफ़ॉर्म पर प्रकाशित सामग्री जोड़ना चाहता हूं।", + "PostContentViaGithub": "मैं अपना लेख जोड़ना चाहता हूं GitHub अंकन नियमों के अनुसार।", + "PostContentViaYoutube": "मैं यहां उपलब्ध अपने वीडियो को Youtube पर साझा करना चाहता हूं।", + "PostContentViaExternalSource": "मैं यहां एक अन्य प्लेटफ़ॉर्म पर प्रकाशित सामग्री जोड़ना चाहता हूं।", "GitHubUserNameValidationMessage": "आपके Github उपयोगकर्ता नाम में व्हॉट्सएप शामिल नहीं हो सकता है, कृपया सुनिश्चित करें कि आपका Github उपयोगकर्ता नाम सही है।", "PersonalSiteUrlValidationMessage": "आपके व्यक्तिगत साइट URL में व्हॉट्सएप शामिल नहीं हो सकता है, कृपया सुनिश्चित करें कि आपका व्यक्तिगत साइट URL सही है।", "TwitterUserNameValidationMessage": "आपके ट्विटर उपयोगकर्ता नाम में व्हाट्सएप शामिल नहीं हो सकता है, कृपया सुनिश्चित करें कि आपका ट्विटर उपयोगकर्ता नाम सही है।", "LinkedinUrlValidationMessage": "आपके लिंक्डइन URL में व्हॉट्सएप शामिल नहीं हो सकता है, कृपया सुनिश्चित करें कि आपका लिंक्डइन URL सही है।", "NoPostsFound": "कोई प्रकाशन नहीं मिला!", - "SearchInPosts": "पदों में खोजें ...", + "SearchInPosts": "पदों में खोजें...", "MinimumSearchContent": "आपको कम से कम 3 वर्ण दर्ज करने होंगे!", "Volo.AbpIo.Domain:060001": "स्रोत URL (\"{ArticleUrl}\") जीथब URL नहीं है", "Volo.AbpIo.Domain:060002": "लेख सामग्री Github (\"{ArticleUrl}\") संसाधन से उपलब्ध नहीं है।", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json index 6e8dfc31e7..6df3bd6ca4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json @@ -1,21 +1,21 @@ { "culture": "it", "texts": { - "Permission:CommunityArticle": "Articolo comunitario", - "Permission:Edit": "modificare", + "Permission:CommunityArticle": "Articolo della comunità", + "Permission:Edit": "modifica", "Waiting": "In attesa", "Approved": "Approvato", "Rejected": "Respinto", - "Wait": "Aspettare", - "Approve": "Approvare", - "Reject": "Rifiutare", + "Wait": "Attendere", + "Approve": "Approva", + "Reject": "Rifiuta", "ReadArticle": "Leggi l'articolo", "Status": "Stato", - "ContentSource": "Fonte di contenuto", + "ContentSource": "Fonte contenuto", "Details": "Dettagli", "Url": "Url", "Title": "Titolo", - "CreationTime": "Tempo di creazione", + "CreationTime": "Orario di creazione", "Save": "Salva", "SameUrlAlreadyExist": "Lo stesso URL esiste già se vuoi aggiungere questo articolo, dovresti cambiare l'URL!", "UrlIsNotValid": "URL non valido.", @@ -26,8 +26,8 @@ "Latest": "Ultimo", "ContributeAbpCommunity": "Contribuisci alla comunità ABP", "SubmitYourArticle": "Invia il tuo post", - "ContributionGuide": "Guida al contributo", - "BugReport": "Riportare un errore", + "ContributionGuide": "Guida per i contributi", + "BugReport": "Segnala un errore", "SeeAllArticles": "Vedi tutti i post", "WelcomeToABPCommunity!": "Benvenuto nella comunità ABP!", "MyProfile": "Il mio profilo", @@ -36,11 +36,11 @@ "FeatureRequest": "Richiesta di funzionalità", "CreateArticleTitleInfo": "Titolo del post da mostrare nell'elenco dei post.", "CreateArticleSummaryInfo": "Un breve riassunto del post da mostrare nell'elenco dei post.", - "CreateArticleCoverInfo": "Per creare un articolo efficace, aggiungi una foto di copertina. Carica immagini in formato 16: 9 per una visualizzazione migliore. Dimensione massima del file: 1 MB.", + "CreateArticleCoverInfo": "Per creare un articolo efficace, aggiungi una foto di copertina. Carica immagini in formato 16: 9 per una visualizzazione migliore. Dimensione massima del file: 1MB.", "ThisExtensionIsNotAllowed": "Questa estensione non è consentita.", "TheFileIsTooLarge": "Il file è troppo grande.", "GoToTheArticle": "Vai all'articolo", - "Contribute": "Contribuire", + "Contribute": "Contribuisci", "OverallProgress": "Progressi generali", "Done": "Fatto", "Open": "Aperto", @@ -59,28 +59,28 @@ "QuestionItemErrorMessage": "Impossibile ottenere gli ultimi dettagli della domanda da Stackoverflow.", "Oops": "Ops!", "CreateArticleSuccessMessage": "L'articolo è stato inviato con successo. Verrà pubblicato dopo una revisione da parte dell'amministratore del sito.", - "ChooseCoverImage": "Scegli un'immagine di copertina ...", + "ChooseCoverImage": "Scegli un'immagine di copertina...", "CoverImage": "Immagine di copertina", "ShareYourExperiencesWithTheABPFramework": "Condividi le tue esperienze con ABP Framework!", "Optional": "Opzionale", "UpdateUserWebSiteInfo": "Esempio: https://johndoe.com", "UpdateUserTwitterInfo": "Esempio: johndoe", "UpdateUserGithubInfo": "Esempio: johndoe", - "UpdateUserLinkedinInfo": "Esempio: https: //www.linkedin.com / ...", + "UpdateUserLinkedinInfo": "Esempio: https://www.linkedin.com/...", "UpdateUserCompanyInfo": "Esempio: Volosoft", "UpdateUserJobTitleInfo": "Esempio: sviluppatore di software", "UserName": "Nome utente", "Company": "Azienda", "PersonalWebsite": "Sito web personale", "RegistrationDate": "Data di registrazione", - "Social": "Sociale", + "Social": "Social", "Biography": "Biografia", "HasNoPublishedArticlesYet": "non ha ancora articoli pubblicati", "Author": "Autore", "LatestGithubAnnouncements": "Ultimi annunci su GitHub", "SeeAllAnnouncements": "Vedi tutti gli annunci", "LatestBlogPost": "Ultimo post sul blog", - "Edit": "modificare", + "Edit": "modifica", "ProfileImageChange": "Cambia l'immagine del profilo", "BlogItemErrorMessage": "Impossibile ottenere i dettagli più recenti del post del blog da ABP.", "PlannedReleaseDate": "Data di rilascio prevista", @@ -96,14 +96,14 @@ "JoinOurArticleNewsletter": "Iscriviti alla nostra newsletter articolo", "Community": "Comunità", "Marketing": "Marketing", - "CommunityPrivacyPolicyConfirmation": "Accetto i Termini e condizioni e l ' Informativa sulla privacy .", - "ArticleRequestMessageTitle": " Apri un numero su GitHub per richiedere un articolo / tutorial che desideri vedere su questo sito web.", + "CommunityPrivacyPolicyConfirmation": "Accetto i Termini e condizioni e l 'Informativa sulla privacy.", + "ArticleRequestMessageTitle": "Apri un numero su GitHub per richiedere un articolo / tutorial che desideri vedere su questo sito web.", "ArticleRequestMessageBody": "Di seguito l'elenco degli articoli richiesti dalla community. Vuoi scrivere un articolo richiesto? Fare clic sulla richiesta e partecipare alla discussione.", - "Language": "linguaggio", + "Language": "Lingua", "CreateArticleLanguageInfo": "La lingua per il contenuto del post.", "VideoPost": "Post video", "Article": "Articolo", - "Read": "Leggere", + "Read": "Leggi", "CreateGithubArticleUrlInfo": "URL originale di GitHub dell'articolo.", "CreateVideoContentUrlInfo": "URL YouTube originale del post.", "CreateExternalArticleUrlInfo": "URL esterno originale dell'articolo.", @@ -115,33 +115,33 @@ "VideoUrl": "URL video", "GithubArticleUrl": "URL articolo Github", "ExternalArticleUrl": "URL articolo esterno", - "CreatePostCoverInfo": "Per creare un post efficace, aggiungi una foto di copertina. Carica immagini in formato 16: 9 per una visualizzazione migliore. Dimensione massima del file: 1 MB.", + "CreatePostCoverInfo": "Per creare un post efficace, aggiungi una foto di copertina. Carica immagini in formato 16: 9 per una visualizzazione migliore. Dimensione massima del file: 1MB.", "ThankYouForContribution": "Grazie per aver contribuito alla comunità ABP.", "GithubArticle": "Articolo GitHub", - "GithubArticleSubmitStepOne": " 1. Scrivi un articolo su qualsiasi repository GitHub pubblico con il formato Markdown. esempio ", - "GithubArticleSubmitStepTwo": " 2. Invia l'URL del tuo articolo utilizzando il modulo.", - "GithubArticleSubmitStepThree": " 3. Il tuo articolo verrà visualizzato in questo sito web.", + "GithubArticleSubmitStepOne": "1. Scrivi un articolo su qualsiasi repository GitHub pubblico con il formato Markdown.esempio", + "GithubArticleSubmitStepTwo": "2. Invia l'URL del tuo articolo utilizzando il modulo.", + "GithubArticleSubmitStepThree": "3. Il tuo articolo verrà visualizzato in questo sito web.", "YoutubeVideo": "Video Youtube", - "YoutubeVideoSubmitStepOne": " 1. Pubblica il tuo video su YouTube.", - "YoutubeVideoSubmitStepTwo": " 2. Invia l'URL del video utilizzando il modulo.", - "YoutubeVideoSubmitStepThree": " 3. I visitatori potranno guardare i tuoi contenuti video direttamente su questo sito web.", + "YoutubeVideoSubmitStepOne": "1. Pubblica il tuo video su YouTube.", + "YoutubeVideoSubmitStepTwo": "2. Invia l'URL del video utilizzando il modulo.", + "YoutubeVideoSubmitStepThree": "3. I visitatori potranno guardare i tuoi contenuti video direttamente su questo sito web.", "ExternalContent": "Contenuto esterno", - "ExternalContentSubmitStepOne": " 1. Crea un contenuto su qualsiasi piattaforma pubblica (mezzo, il tuo blog o ovunque tu voglia).", - "ExternalContentSubmitStepTwo": " 2. Invia l'URL dei tuoi contenuti utilizzando il modulo.", - "ExternalContentSubmitStepThree": " 3. I visitatori vengono reindirizzati al contenuto del sito web originale.", + "ExternalContentSubmitStepOne": "1. Crea un contenuto su qualsiasi piattaforma pubblica (mezzo, il tuo blog o ovunque tu voglia).", + "ExternalContentSubmitStepTwo": "2. Invia l'URL dei tuoi contenuti utilizzando il modulo.", + "ExternalContentSubmitStepThree": "3. I visitatori vengono reindirizzati al contenuto del sito web originale.", "ChooseYourContentType": "Scegli il modo in cui desideri aggiungere i tuoi contenuti.", - "PostContentViaGithub": "Voglio aggiungere il mio articolo con GitHub in conformità con le regole di markdown.", - "PostContentViaYoutube": "Voglio condividere i miei video disponibili su Youtube qui.", - "PostContentViaExternalSource": "Voglio aggiungere qui il contenuto che ho pubblicato su un'altra piattaforma .", + "PostContentViaGithub": "Voglio aggiungere il mio articolo con GitHub in conformità con le regole di markdown.", + "PostContentViaYoutube": "Voglio condividere i miei video disponibili su Youtube qui.", + "PostContentViaExternalSource": "Voglio aggiungere qui il contenuto che ho pubblicato su un'altra piattaforma.", "GitHubUserNameValidationMessage": "Il tuo nome utente Github non può includere spazi bianchi, assicurati che il tuo nome utente Github sia corretto.", "PersonalSiteUrlValidationMessage": "L'URL del tuo sito personale non può includere spazi bianchi, assicurati che l'URL del tuo sito personale sia corretto.", "TwitterUserNameValidationMessage": "Il tuo nome utente Twitter non può includere spazi bianchi, assicurati che il tuo nome utente Twitter sia corretto.", "LinkedinUrlValidationMessage": "Il tuo URL di Linkedin non può includere spazi bianchi, assicurati che il tuo URL di Linkedin sia corretto.", "NoPostsFound": "Nessun post trovato!", - "SearchInPosts": "Cerca nei post ...", + "SearchInPosts": "Cerca nei post...", "MinimumSearchContent": "Devi inserire almeno 3 caratteri!", - "Volo.AbpIo.Domain:060001": "L'URL di origine (\"{ArticleUrl}\") non è l'URL di GitHub", - "Volo.AbpIo.Domain:060002": "Il contenuto dell'articolo non è disponibile dalla risorsa Github (\"{ArticleUrl}\").", + "Volo.AbpIo.Domain:060001": "Source URL(\"{ArticleUrl}\") non è un URL di GitHub", + "Volo.AbpIo.Domain:060002": "Il contenuto dell'articolo non è disponibile dalla risorsa Github(\"{ArticleUrl}\").", "Volo.AbpIo.Domain:060003": "Nessun contenuto dell'articolo trovato!" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json index 9b15582b38..3f0ab0a153 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json @@ -36,13 +36,13 @@ "BuiltInBundlingMinification": "Sisäänrakennettu niputtaminen ja pienentäminen", "BuiltInBundlingMinificationExplanation": "Niputtamiseen ja pienentämiseen ei tarvitse käyttää ulkoisia työkaluja. ABP tarjoaa yksinkertaisemman, dynaamisemman, tehokkaamman, modulaarisemman ja sisäänrakennetun tavan!", "VirtualFileSystem": "Virtuaalinen tiedostojärjestelmä", - "VirtualFileSystemExplanation": "Upota näkymät, komentosarjat, tyylit, kuvat ... paketteihin / kirjastoihin ja käytä niitä uudelleen eri sovelluksissa.", + "VirtualFileSystemExplanation": "Upota näkymät, komentosarjat, tyylit, kuvat... paketteihin / kirjastoihin ja käytä niitä uudelleen eri sovelluksissa.", "Theming": "Heidät", "ThemingExplanationShort": "Käytä ja muokkaa bootstrap-pohjaista vakiokäyttöliittymän teemaa tai luo oma.", "BootstrapTagHelpersDynamicForms": "Bootstrap Tag Helpers ja dynaamiset lomakkeet", - "BootstrapTagHelpersDynamicFormsExplanation": "Sen sijaan, että kirjoittaisit manuaalisesti käynnistysstrap-komponenttien toistuvia yksityiskohtia, käytä ABP: n tag-avustajia yksinkertaistaaksesi sitä ja hyödyntääksesi älykkäitä ominaisuuksia. Rakenna käyttöliittymälomakkeet nopeasti C # -mallin perusteella käyttämällä dynaamista lomaketunnisteen auttajaa.", + "BootstrapTagHelpersDynamicFormsExplanation": "Sen sijaan, että kirjoittaisit manuaalisesti käynnistysstrap-komponenttien toistuvia yksityiskohtia, käytä ABP: n tag-avustajia yksinkertaistaaksesi sitä ja hyödyntääksesi älykkäitä ominaisuuksia. Rakenna käyttöliittymälomakkeet nopeasti C# -mallin perusteella käyttämällä dynaamista lomaketunnisteen auttajaa.", "HTTPAPIsDynamicProxies": "HTTP-sovellusliittymät ja dynaamiset välityspalvelimet", - "HTTPAPIsDynamicProxiesExplanation": "Altista sovelluspalvelut automaattisesti REST-tyylisiksi HTTP-sovellusliittymiksi ja kuluta niitä dynaamisilla JavaScript- ja C # -välityspalvelimilla.", + "HTTPAPIsDynamicProxiesExplanation": "Altista sovelluspalvelut automaattisesti REST-tyylisiksi HTTP-sovellusliittymiksi ja kuluta niitä dynaamisilla JavaScript- ja C# -välityspalvelimilla.", "CompleteArchitectureInfo": "Moderni arkkitehtuuri ylläpidettävien ohjelmistoratkaisujen luomiseksi.", "DomainDrivenDesignBasedLayeringModelExplanation": "Auttaa sinua toteuttamaan DDD-pohjaisen kerrostetun arkkitehtuurin ja rakentamaan ylläpidettävän koodipohjan.", "DomainDrivenDesignBasedLayeringModelExplanationCont": "Tarjoaa käynnistysmalleja, abstrakteja, perusluokkia, palveluja, dokumentaatiota ja oppaita, joiden avulla voit kehittää sovellustasi DDD-mallien ja -periaatteiden perusteella.", @@ -70,7 +70,7 @@ "ConventionOverConfigurationExplanation": "ABP toteuttaa oletusarvoisesti yleiset sovelluskäytännöt minimaalisella tai nolla-kokoonpanolla.", "ConventionOverConfigurationExplanationList1": "Auto rekisteröi tunnetut palvelut riippuvuusinjektioon.", "ConventionOverConfigurationExplanationList2": "Paljastaa sovelluspalvelut HTTP-sovellusliittyminä nimeämällä käytäntöjä.", - "ConventionOverConfigurationExplanationList3": "Luo dynaamiset HTTP-asiakasvälityspalvelimet C #: lle ja JavaScriptille.", + "ConventionOverConfigurationExplanationList3": "Luo dynaamiset HTTP-asiakasvälityspalvelimet C# : lle ja JavaScript.", "ConventionOverConfigurationExplanationList4": "Tarjoaa oletusvarastoja yhteisöillesi.", "ConventionOverConfigurationExplanationList5": "Hallitsee työyksikköä verkkopyynnön tai sovelluspalvelumenetelmän mukaan.", "ConventionOverConfigurationExplanationList6": "Julkaisee luoda, päivittää ja poistaa tapahtumia yhteisöillesi.", @@ -94,7 +94,7 @@ "DynamicForms": "Dynaamiset lomakkeet", "BundlingMinification": "Niputtaminen ja minimointi", "BackgroundJobs": "Taustatyöt", - "BackgroundJobsExplanation": "Määritä yksinkertaiset luokat taustalla olevien töiden suorittamiseksi jonossa. Käytä sisäänrakennettua työnhallintaa tai integroi oma. Hangfire ja RabbitMQ -integraatiot ovat jo käytettävissä.", + "BackgroundJobsExplanation": "Määritä yksinkertaiset luokat taustalla olevien töiden suorittamiseksi jonossa. Käytä sisäänrakennettua työnhallintaa tai integroi oma. Hangfire ja RabbitMQ -integraatiot ovat jo käytettävissä.", "DDDInfrastructure": "DDD-infrastruktuuri", "DomainDrivenDesignInfrastructure": "Toimialueohjattu suunnittelun infrastruktuuri", "AutoRESTAPIs": "Auto REST -sovellusliittymät", @@ -121,13 +121,13 @@ "MultiTenancyExplanation3": "Tukee yhtä tietokantaa, tietokantaa vuokralaista kohti ja hybridi-lähestymistapoja.", "MultiTenancyExplanation4": "Keskity yrityksesi koodiin ja annat kehyksen hoitamaan monivuokrausta puolestasi.", "BootstrapTagHelpersExplanation": "Sen sijaan, että kirjoittaisit manuaalisesti uudelleenkäynnistyskomponenttien yksityiskohtia, käytä ABP: n tunnisteita yksinkertaistaaksesi sitä ja hyödyntäksesi älykkäitä ominaisuuksia. Voit ehdottomasti käyttää Bootstrapia milloin tahansa.", - "DynamicFormsExplanation": "Dynaamiset lomake- ja syöttötunnisteiden apurit voivat luoda täydellisen lomakkeen mallina C # -luokasta.", + "DynamicFormsExplanation": "Dynaamiset lomake- ja syöttötunnisteiden apurit voivat luoda täydellisen lomakkeen mallina C# -luokasta.", "AuthenticationAuthorizationExplanation": "ASP.NET Core Identity & IdentityServer4 -palveluun integroidut monipuoliset todennus- ja todennusvaihtoehdot. Tarjoaa laajennettavan ja yksityiskohtaisen lupajärjestelmän.", "CrossCuttingConcernsExplanation": "Älä toista itseäsi kaikkien näiden yleisten asioiden toteuttamiseksi uudelleen ja uudelleen. Keskity yrityskoodiin ja anna ABP: n automatisoida ne käytäntöjen mukaan.", "DatabaseConnectionTransactionManagement": "Tietokantayhteys ja tapahtumien hallinta", "CorrelationIdTracking": "Korrelaatio-Id-seuranta", "BundlingMinificationExplanation": "ABP tarjoaa yksinkertaisen, dynaamisen, tehokkaan, modulaarisen ja sisäänrakennetun niputus- ja pienentämisjärjestelmän.", - "VirtualFileSystemnExplanation": "Virtuaalinen tiedostojärjestelmä mahdollistaa sellaisten tiedostojen hallinnan, joita ei ole fyysisesti tiedostojärjestelmässä (levyllä). Sitä käytetään pääasiassa upottamaan (js, css, kuva, cshtml ...) tiedostot kokoonpanoiksi ja käyttämään niitä kuin fyysisiä tiedostoja ajon aikana.", + "VirtualFileSystemnExplanation": "Virtuaalinen tiedostojärjestelmä mahdollistaa sellaisten tiedostojen hallinnan, joita ei ole fyysisesti tiedostojärjestelmässä (levyllä). Sitä käytetään pääasiassa upottamaan (js, css, kuva, cshtml...) tiedostot kokoonpanoiksi ja käyttämään niitä kuin fyysisiä tiedostoja ajon aikana.", "ThemingExplanation": "Theming-järjestelmän avulla voit kehittää sovellus- ja moduuliteemasi itsenäisesti määrittelemällä joukon yhteisiä peruskirjastoja ja asetteluja uusimman Bootstrap-kehyksen perusteella.", "DomainDrivenDesignInfrastructureExplanation": "Täydellinen infrastruktuuri kerrostettujen sovellusten rakentamiseen, joka perustuu toimialueohjattuihin suunnittelumalleihin ja periaatteisiin;", "Specification": "Erittely", @@ -138,7 +138,7 @@ "DataTransferObject": "Tiedonsiirtokohde", "AggregateRootEntity": "Kokonaisjuuri, entiteetti", "AutoRESTAPIsExplanation": "ABP voi määrittää sovelluspalvelut automaattisesti API-ohjaimiksi sopimuksen mukaan.", - "DynamicClientProxiesExplanation": "Kuluta helposti API: si JavaScript- ja C # -asiakkailta.", + "DynamicClientProxiesExplanation": "Kuluta helposti API: si JavaScript- ja C# -asiakkailta.", "DistributedEventBusWithRabbitMQIntegrationExplanation": "Julkaise ja kuluta jaettuja tapahtumia helposti käyttämällä sisäänrakennettua hajautettua tapahtumaväylää, jossa on käytettävissä RabbitMQ-integraatio.", "TestInfrastructureExplanation": "Kehys on kehitetty yksikkö- ja integraatiotestaus ajatellen. Tarjoaa sinulle perusluokkia helpottamaan. Käynnistysmalleissa on valmiiksi konfiguroitu testaus.", "AuditLoggingEntityHistoriesExplanation": "Sisäänrakennettu tarkastuskirjaus yrityskriittisille sovelluksille. Pyyntö-, palvelu-, menetelmätason tarkastusloki ja entiteettihistoria omaisuuden tason yksityiskohdilla.", @@ -155,7 +155,7 @@ "Code": "Koodi", "Result": "Tulos", "SeeTheDocumentForMoreInformation": "Katso lisätietoja {0} asiakirjasta ", - "IndexPageHeroSection": " avoin lähdekoodi verkkosovellus
Framework
asp.net-ytimelle ", + "IndexPageHeroSection": " avoin lähdekoodi verkkosovellus
Framework
asp.net-ytimelle ", "UiFramework": "Käyttöliittymäkehys", "EmailAddress": "Sähköpostiosoite", "Mobile": "Matkapuhelin", @@ -169,13 +169,13 @@ "JoinTheABPCommunityInfo": "Ole mukana elävässä yhteisössä ja tule osallistujana sivutuotteiden kehykseen!", "AllArticles": "Kaikki artikkelit", "SubmitYourArticle": "Lähetä artikkelisi", - "DynamicClientProxyDocument": "Katso dynaamisen asiakkaan välityspalvelimen dokumentaatiot JavaScriptille ja C # .", + "DynamicClientProxyDocument": "Katso dynaamisen asiakkaan välityspalvelimen dokumentaatiot JavaScript ja C#.", "EmailSMSAbstractionsDocument": "Katso lisätietoja sähköpostitse ja tekstiviestien lähettäminen -asiakirjoista.", "CreateProjectWizard": "Tämä ohjattu toiminto luo uuden projektin käynnistysmallista, joka on määritetty oikein aloittamaan projekti.", "TieredOption": "Luo porrastetun ratkaisun, jossa Web- ja Http-API-kerrokset erotetaan fyysisesti. Jos sitä ei ole valittu, luodaan kerrostettu ratkaisu, joka on vähemmän monimutkainen ja sopii useimpiin tilanteisiin.", "SeparateIdentityServerOption": "Erottaa palvelinpuolen kahteen sovellukseen: Ensimmäinen on identiteettipalvelimelle ja toinen palvelinpuolen HTTP-sovellusliittymälle.", "UseslatestPreVersion": "Käyttää uusinta julkaisua edeltävää versiota", - "ReadTheDocumentation": " Lue Dokumentaatio ", + "ReadTheDocumentation": " Lue Dokumentaatio ", "Documentation": "Dokumentointi", "GettingStartedTutorial": "Aloitusopas", "ApplicationDevelopmentTutorial": "Sovelluskehitysopastus", @@ -195,7 +195,7 @@ "MultipleUIOptionsExplanation": "Ydinkehys on suunniteltu käyttöliittymästä riippumattomaksi ja se voi toimia minkä tahansa tyyppisen käyttöliittymäjärjestelmän kanssa, kun taas useita valmiiksi rakennettuja ja integroituja vaihtoehtoja toimitetaan heti.", "MultipleDBOptionsExplanation": "Kehys voi toimia minkä tahansa tietolähteen kanssa, kun taas seuraavat palveluntarjoajat on virallisesti kehitetty ja tuettu;", "SelectLanguage": "Valitse kieli", - "LatestArticleOnCommunity": "Viimeisin artikkeli ABP-yhteisöstä", + "LatestArticleOnCommunity": "Viimeisin artikkeli ABP Community", "Register": "Rekisteröidy", "IsDownloadable": "On ladattavissa" } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json index 23ae2cc444..6b17234477 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json @@ -36,11 +36,11 @@ "BuiltInBundlingMinification": "Regroupement et minification intégrés", "BuiltInBundlingMinificationExplanation": "Pas besoin d'utiliser des outils externes pour le regroupement et la minimisation. ABP offre un moyen plus simple, dynamique, puissant, modulaire et intégré!", "VirtualFileSystem": "Système de fichiers virtuel", - "VirtualFileSystemExplanation": "Incorporez des vues, des scripts, des styles, des images ... dans des packages / bibliothèques et réutilisez-les dans différentes applications.", + "VirtualFileSystemExplanation": "Incorporez des vues, des scripts, des styles, des images... dans des packages / bibliothèques et réutilisez-les dans différentes applications.", "Theming": "Thème", "ThemingExplanationShort": "Utilisez et personnalisez le thème d'interface utilisateur standard basé sur le bootstrap ou créez le vôtre.", "BootstrapTagHelpersDynamicForms": "Aide aux balises Bootstrap et formulaires dynamiques", - "BootstrapTagHelpersDynamicFormsExplanation": "Au lieu d'écrire manuellement les détails répétitifs des composants d'amorçage, utilisez les assistants de balises d'ABP pour le simplifier et tirer parti d'intellisense. Créez rapidement des formulaires d'interface utilisateur basés sur un modèle C # à l'aide de l'assistant de balise de formulaire dynamique.", + "BootstrapTagHelpersDynamicFormsExplanation": "Au lieu d'écrire manuellement les détails répétitifs des composants d'amorçage, utilisez les assistants de balises d'ABP pour le simplifier et tirer parti d'intellisense. Créez rapidement des formulaires d'interface utilisateur basés sur un modèle C# à l'aide de l'assistant de balise de formulaire dynamique.", "HTTPAPIsDynamicProxies": "API HTTP et proxys dynamiques", "HTTPAPIsDynamicProxiesExplanation": "Exposez automatiquement les services d'application en tant qu'API HTTP de style REST et utilisez-les avec des proxys JavaScript et C# dynamiques.", "CompleteArchitectureInfo": "Architecture moderne pour créer des solutions logicielles maintenables.", @@ -127,7 +127,7 @@ "DatabaseConnectionTransactionManagement": "Connexion à la base de données et gestion des transactions", "CorrelationIdTracking": "Suivi des identifiants de corrélation", "BundlingMinificationExplanation": "ABP offre un système de regroupement et de minification simple, dynamique, puissant, modulaire et intégré.", - "VirtualFileSystemnExplanation": "Le système de fichiers virtuel permet de gérer des fichiers qui n'existent pas physiquement sur le système de fichiers (disque). Il est principalement utilisé pour incorporer des fichiers (js, css, image, cshtml ...) dans des assemblys et les utiliser comme des fichiers physiques lors de l'exécution.", + "VirtualFileSystemnExplanation": "Le système de fichiers virtuel permet de gérer des fichiers qui n'existent pas physiquement sur le système de fichiers (disque). Il est principalement utilisé pour incorporer des fichiers (js, css, image, cshtml...) dans des assemblys et les utiliser comme des fichiers physiques lors de l'exécution.", "ThemingExplanation": "Le système de thématisation permet de développer votre application et vos modules indépendamment du thème en définissant un ensemble de bibliothèques et de mises en page de base communes, basées sur le dernier framework Bootstrap.", "DomainDrivenDesignInfrastructureExplanation": "Une infrastructure complète pour créer des applications en couches basées sur les modèles et principes de conception pilotée par domaine;", "Specification": "spécification", @@ -138,7 +138,7 @@ "DataTransferObject": "Objet de transfert de données", "AggregateRootEntity": "Racine agrégée, entité", "AutoRESTAPIsExplanation": "ABP peut configurer automatiquement vos services d'application en tant que contrôleurs d'API par convention.", - "DynamicClientProxiesExplanation": "Utilisez facilement vos API à partir de clients JavaScript et C#.", + "DynamicClientProxiesExplanation": "Utilisez facilement vos API à partir de clients JavaScript et C# .", "DistributedEventBusWithRabbitMQIntegrationExplanation": "Publiez et consommez facilement des événements distribués à l'aide du bus d'événements distribués intégré avec l'intégration RabbitMQ disponible.", "TestInfrastructureExplanation": "Le framework a été développé en pensant aux tests unitaires et d'intégration. Vous fournit des classes de base pour vous faciliter la tâche. Les modèles de démarrage sont pré-configurés pour les tests.", "AuditLoggingEntityHistoriesExplanation": "Journalisation d'audit intégrée pour les applications stratégiques. Requête, service, journalisation d'audit au niveau de la méthode et historiques d'entités avec des détails au niveau de la propriété.", @@ -155,7 +155,7 @@ "Code": "Code", "Result": "Résultat", "SeeTheDocumentForMoreInformation": "Consultez le {0} document pour plus d'informations", - "IndexPageHeroSection": "open sourceWeb Application
Framework
for asp.net core", + "IndexPageHeroSection": "open sourceWeb Application
Framework
for asp.net core", "UiFramework": "Framework de l'interface utilisateur", "EmailAddress": "Adresse e-mail", "Mobile": "Mobile", @@ -169,13 +169,13 @@ "JoinTheABPCommunityInfo": "Impliquez-vous dans une communauté dynamique et devenez un contributeur au cadre ABP!", "AllArticles": "Tous les articles", "SubmitYourArticle": "Soumettez votre article", - "DynamicClientProxyDocument": "Consultez les documentations sur le proxy client dynamique pour JavaScript et C # .", + "DynamicClientProxyDocument": "Consultez les documentations sur le proxy client dynamique pour JavaScript et C#.", "EmailSMSAbstractionsDocument": "Consultez les documents e-mail et Envoi de SMS pour plus d'informations.", "CreateProjectWizard": "Cet assistant crée un nouveau projet à partir du modèle de démarrage qui est correctement configuré pour démarrer rapidement votre projet.", "TieredOption": "Crée une solution à plusieurs niveaux dans laquelle les couches API Web et Http sont physiquement séparées. Si elle n'est pas cochée, crée une solution en couches qui est moins complexe et adaptée à la plupart des scénarios.", "SeparateIdentityServerOption": "Sépare le côté serveur en deux applications: la première est pour le serveur d'identité et la seconde pour votre API HTTP côté serveur.", "UseslatestPreVersion": "Utilise la dernière version préliminaire", - "ReadTheDocumentation": " Lire La documentation ", + "ReadTheDocumentation": " Lire La documentation ", "Documentation": "Documentation", "GettingStartedTutorial": "Tutoriel de mise en route", "ApplicationDevelopmentTutorial": "Tutoriel de développement d'applications", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json index a36dbf5aeb..7902f2410e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json @@ -40,9 +40,9 @@ "Theming": "थीम", "ThemingExplanationShort": "बूटस्ट्रैप-आधारित मानक UI थीम का उपयोग करें और अनुकूलित करें या अपना स्वयं का बनाएं।", "BootstrapTagHelpersDynamicForms": "बूटस्ट्रैप टैग हेल्पर्स और डायनामिक फॉर्म", - "BootstrapTagHelpersDynamicFormsExplanation": "बूटस्ट्रैप घटकों के दोहराए गए विवरणों को मैन्युअल रूप से लिखने के बजाय, इसे सरल बनाने और अंतरंगता का लाभ उठाने के लिए एबीपी के टैग सहायकों का उपयोग करें। डायनामिक फॉर्म टैग हेल्पर का उपयोग करके C # मॉडल के आधार पर जल्दी से UI फॉर्म का निर्माण करें।", + "BootstrapTagHelpersDynamicFormsExplanation": "बूटस्ट्रैप घटकों के दोहराए गए विवरणों को मैन्युअल रूप से लिखने के बजाय, इसे सरल बनाने और अंतरंगता का लाभ उठाने के लिए एबीपी के टैग सहायकों का उपयोग करें। डायनामिक फॉर्म टैग हेल्पर का उपयोग करके C# मॉडल के आधार पर जल्दी से UI फॉर्म का निर्माण करें।", "HTTPAPIsDynamicProxies": "HTTP एपीआई और डायनेमिक प्रॉक्सी", - "HTTPAPIsDynamicProxiesExplanation": "REST शैली HTTP API के रूप में एप्लिकेशन सेवाओं को स्वचालित रूप से उजागर करें, और उन्हें गतिशील जावास्क्रिप्ट और C # प्रॉक्सी के साथ उपभोग करें।", + "HTTPAPIsDynamicProxiesExplanation": "REST शैली HTTP API के रूप में एप्लिकेशन सेवाओं को स्वचालित रूप से उजागर करें, और उन्हें गतिशील जावास्क्रिप्ट और C# प्रॉक्सी के साथ उपभोग करें।", "CompleteArchitectureInfo": "बनाए रखने योग्य सॉफ़्टवेयर समाधान बनाने के लिए आधुनिक वास्तुकला।", "DomainDrivenDesignBasedLayeringModelExplanation": "डीडीडी आधारित स्तरित वास्तुकला को लागू करने और बनाए रखने योग्य कोड आधार बनाने में आपकी सहायता करता है।", "DomainDrivenDesignBasedLayeringModelExplanationCont": "DDD पैटर्न और सिद्धांतों के आधार पर आपके एप्लिकेशन को विकसित करने में मदद करने के लिए स्टार्टअप टेम्प्लेट, सार, आधार कक्षाएं, सेवाएं, प्रलेखन और मार्गदर्शिका प्रदान करता है।", @@ -70,7 +70,7 @@ "ConventionOverConfigurationExplanation": "ABP न्यूनतम या शून्य कॉन्फ़िगरेशन के साथ डिफ़ॉल्ट रूप से सामान्य अनुप्रयोग सम्मेलनों को लागू करता है।", "ConventionOverConfigurationExplanationList1": "ऑटो निर्भरता इंजेक्शन के लिए सेवाओं को पंजीकृत करता है।", "ConventionOverConfigurationExplanationList2": "नामकरण सम्मेलनों द्वारा HTTP APIs के रूप में अनुप्रयोग सेवाओं का प्रस्ताव है।", - "ConventionOverConfigurationExplanationList3": "C # और JavaScript के लिए गतिशील HTTP क्लाइंट प्रॉक्सी बनाता है।", + "ConventionOverConfigurationExplanationList3": " C# और JavaScript के लिए गतिशील HTTP क्लाइंट प्रॉक्सी बनाता है।", "ConventionOverConfigurationExplanationList4": "आपकी संस्थाओं के लिए डिफ़ॉल्ट रिपॉजिटरी प्रदान करता है।", "ConventionOverConfigurationExplanationList5": "वेब अनुरोध या एप्लिकेशन सेवा पद्धति के अनुसार कार्य की इकाई का प्रबंधन।", "ConventionOverConfigurationExplanationList6": "आपकी संस्थाओं के लिए ईवेंट बनाएं, अपडेट करें और हटाएं।", @@ -121,13 +121,13 @@ "MultiTenancyExplanation3": "एकल डेटाबेस, डेटाबेस प्रति किरायेदार और हाइब्रिड दृष्टिकोण का समर्थन करता है।", "MultiTenancyExplanation4": "आप अपने व्यवसाय कोड पर ध्यान केंद्रित करते हैं और आपकी ओर से मल्टी-टेनेंसी को संभालने की रूपरेखा तैयार करते हैं।", "BootstrapTagHelpersExplanation": "बूटस्ट्रैप घटकों के दोहराए गए विवरणों को मैन्युअल रूप से लिखने के बजाय, इसे सरल बनाने और अंतरंगता का लाभ उठाने के लिए एबीपी के टैग सहायकों का उपयोग करें। जब भी आपको जरूरत हो आप बूटस्ट्रैप का इस्तेमाल जरूर कर सकते हैं।", - "DynamicFormsExplanation": "डायनामिक फॉर्म और इनपुट टैग हेल्पर्स मॉडल के रूप में C # क्लास से पूरा फॉर्म बना सकते हैं।", + "DynamicFormsExplanation": "डायनामिक फॉर्म और इनपुट टैग हेल्पर्स मॉडल के रूप में C# क्लास से पूरा फॉर्म बना सकते हैं।", "AuthenticationAuthorizationExplanation": "रिच प्रमाणीकरण और प्राधिकरण विकल्प ASP.NET कोर आइडेंटिटी और आइडेंटिटी सेवर 4 को एकीकृत करता है। एक एक्स्टेंसिबल और विस्तृत अनुमति प्रणाली प्रदान करता है।", "CrossCuttingConcernsExplanation": "इन सभी सामान्य चीज़ों को बार-बार लागू करने के लिए अपने आप को दोहराएं नहीं। अपने व्यवसाय कोड पर ध्यान दें और एबीपी को उन्हें सम्मेलनों द्वारा स्वचालित करें।", "DatabaseConnectionTransactionManagement": "डेटाबेस कनेक्शन और लेनदेन प्रबंधन", "CorrelationIdTracking": "सहसंबंध-आईडी ट्रैकिंग", "BundlingMinificationExplanation": "ABP एक सरल, गतिशील, शक्तिशाली, मॉड्यूलर और बिल्ट-इन बंडलिंग और मिनिफिकेशन सिस्टम प्रदान करता है।", - "VirtualFileSystemnExplanation": "वर्चुअल फ़ाइल सिस्टम उन फ़ाइलों को प्रबंधित करना संभव बनाता है जो फ़ाइल सिस्टम (डिस्क) पर भौतिक रूप से मौजूद नहीं हैं। यह मुख्य रूप से विधानसभाओं में (js, css, image, cshtml ...) फ़ाइलों को एम्बेड करने और रनटाइम के दौरान भौतिक फ़ाइलों की तरह उपयोग करने के लिए उपयोग किया जाता है।", + "VirtualFileSystemnExplanation": "वर्चुअल फ़ाइल सिस्टम उन फ़ाइलों को प्रबंधित करना संभव बनाता है जो फ़ाइल सिस्टम (डिस्क) पर भौतिक रूप से मौजूद नहीं हैं। यह मुख्य रूप से विधानसभाओं में (js, css, image, cshtml...) फ़ाइलों को एम्बेड करने और रनटाइम के दौरान भौतिक फ़ाइलों की तरह उपयोग करने के लिए उपयोग किया जाता है।", "ThemingExplanation": "थिमिंग सिस्टम नवीनतम बूटस्ट्रैप ढांचे के आधार पर, सामान्य आधार पुस्तकालयों और लेआउट के एक सेट को परिभाषित करके आपके एप्लिकेशन और मॉड्यूल विषय को विकसित करने की अनुमति देता है।", "DomainDrivenDesignInfrastructureExplanation": "डोमेन संचालित डिज़ाइन पैटर्न और सिद्धांतों के आधार पर स्तरित अनुप्रयोगों के निर्माण के लिए एक पूर्ण बुनियादी ढांचा;", "Specification": "विनिर्देश", @@ -155,7 +155,7 @@ "Code": "कोड", "Result": "परिणाम", "SeeTheDocumentForMoreInformation": "अधिक जानकारी के लिए {0} दस्तावेज़ देखें", - "IndexPageHeroSection": "open sourceWeb Application
Framework
for asp.net core", + "IndexPageHeroSection": "open sourceWeb Application
Framework
for asp.net core", "UiFramework": "यूआई फ्रेमवर्क", "EmailAddress": "ईमेल पता", "Mobile": "मोबाइल", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json index 35d86ceefb..1a55221f1f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json @@ -2,7 +2,7 @@ "culture": "it", "texts": { "GetStarted": "Inizia - Modelli di avvio", - "Create": "Creare", + "Create": "Crea", "NewProject": "Nuovo progetto", "DirectDownload": "Download diretto", "ProjectName": "Nome del progetto", @@ -18,35 +18,35 @@ "SeeDetails": "Vedi i dettagli", "AbpShortDescription": "ABP Framework è un'infrastruttura completa per creare applicazioni Web moderne seguendo le migliori pratiche e convenzioni di sviluppo software.", "SourceCodeUpper": "CODICE SORGENTE", - "LatestReleaseLogs": "Ultimi registri di rilascio", + "LatestReleaseLogs": "Ultimi note di rilascio", "Infrastructure": "Infrastruttura", "Architecture": "Architettura", "Modular": "Modulare", "DontRepeatYourself": "Non ripetere te stesso", - "DeveloperFocused": "Concentrato sullo sviluppatore", + "DeveloperFocused": "Incentrato sullo sviluppatore", "FullStackApplicationInfrastructure": "Infrastruttura applicativa full stack.", - "DomainDrivenDesign": "Progettazione basata sul dominio", + "DomainDrivenDesign": "Domain Driven Design", "DomainDrivenDesignExplanation": "Progettato e sviluppato sulla base di modelli e principi DDD. Fornisce un modello a più livelli per la tua applicazione.", "Authorization": "Autorizzazione", "AuthorizationExplanation": "Autorizzazione avanzata con utente, ruolo e sistema di autorizzazioni granulare. Basato sulla libreria Microsoft Identity.", "MultiTenancy": "Multi-Tenancy", "MultiTenancyExplanationShort": "Applicazioni SaaS rese facili! Multi-tenancy integrato dal database all'interfaccia utente.", - "CrossCuttingConcerns": "Preoccupazioni trasversali", + "CrossCuttingConcerns": "Questioni trasversali", "CrossCuttingConcernsExplanationShort": "Infrastruttura completa per autorizzazione, convalida, gestione delle eccezioni, memorizzazione nella cache, registrazione di audit, gestione delle transazioni e altro ancora.", "BuiltInBundlingMinification": "Raggruppamento e minimizzazione incorporati", "BuiltInBundlingMinificationExplanation": "Non è necessario utilizzare strumenti esterni per raggruppare e minimizzare. ABP offre un modo più semplice, dinamico, potente, modulare e integrato!", "VirtualFileSystem": "File system virtuale", - "VirtualFileSystemExplanation": "Incorpora viste, script, stili, immagini ... in pacchetti / librerie e riutilizzali in diverse applicazioni.", - "Theming": "Theming", + "VirtualFileSystemExplanation": "Incorpora viste, script, stili, immagini... in pacchetti / librerie e riutilizzali in diverse applicazioni.", + "Theming": "Personalizzazione tema", "ThemingExplanationShort": "Usa e personalizza il tema dell'interfaccia utente standard basato su bootstrap o creane uno tuo.", "BootstrapTagHelpersDynamicForms": "Bootstrap Tag Helpers e moduli dinamici", - "BootstrapTagHelpersDynamicFormsExplanation": "Invece di scrivere manualmente i dettagli ripetuti dei componenti bootstrap, usa gli helper tag di ABP per semplificarlo e sfruttare intellisense. Crea rapidamente moduli dell'interfaccia utente basati su un modello C # utilizzando l'helper tag del modulo dinamico.", + "BootstrapTagHelpersDynamicFormsExplanation": "Invece di scrivere manualmente i dettagli ripetuti dei componenti bootstrap, usa i tag helper di ABP per semplificarlo e sfruttare intellisense. Crea rapidamente moduli dell'interfaccia utente basati su un modello C# utilizzando l'helper tag del modulo dinamico.", "HTTPAPIsDynamicProxies": "API HTTP e proxy dinamici", - "HTTPAPIsDynamicProxiesExplanation": "Esponi automaticamente i servizi dell'applicazione come API HTTP in stile REST e utilizzali con JavaScript dinamici e proxy C #.", + "HTTPAPIsDynamicProxiesExplanation": "Esponi automaticamente i servizi dell'applicazione come API HTTP in stile REST e utilizzali con JavaScript dinamici e proxy C# .", "CompleteArchitectureInfo": "Architettura moderna per creare soluzioni software manutenibili.", "DomainDrivenDesignBasedLayeringModelExplanation": "Aiuta a implementare un'architettura a strati basata su DDD e a costruire una base di codice gestibile.", "DomainDrivenDesignBasedLayeringModelExplanationCont": "Fornisce modelli di avvio, astrazioni, classi di base, servizi, documentazione e guide per aiutarti a sviluppare la tua applicazione in base a modelli e principi DDD.", - "MicroserviceCompatibleModelExplanation": "Il framework principale ei moduli di pre-compilazione sono progettati pensando all'architettura dei microservizi.", + "MicroserviceCompatibleModelExplanation": "Il framework principale ed i moduli predefiniti sono progettati pensando all'architettura dei microservizi.", "MicroserviceCompatibleModelExplanationCont": "Fornisce infrastruttura, integrazioni, campioni e documentazione per implementare più facilmente soluzioni di microservizi, mentre non apporta ulteriore complessità se si desidera un'applicazione monolitica.", "ModularInfo": "ABP fornisce un sistema di moduli che consente di sviluppare moduli applicativi riutilizzabili, collegarsi agli eventi del ciclo di vita dell'applicazione ed esprimere le dipendenze tra le parti principali del sistema.", "PreBuiltModulesThemes": "Moduli e temi predefiniti", @@ -62,18 +62,18 @@ "Validation": "Validazione", "DatabaseConnection": "Connessione al database", "TransactionManagement": "Gestione delle transazioni", - "AuditLogging": "Registrazione di audit", + "AuditLogging": "Registri di controllo", "Caching": "Caching", "Multitenancy": "Multitenancy", "DataFiltering": "Filtraggio dei dati", - "ConventionOverConfiguration": "Convenzione sulla configurazione", + "ConventionOverConfiguration": "Configurazione su convenzioni", "ConventionOverConfigurationExplanation": "ABP implementa convenzioni di applicazioni comuni per impostazione predefinita con una configurazione minima o zero.", "ConventionOverConfigurationExplanationList1": "Registra automaticamente i servizi noti per l'inserimento delle dipendenze.", "ConventionOverConfigurationExplanationList2": "Espone i servizi dell'applicazione come API HTTP mediante convenzioni di denominazione.", - "ConventionOverConfigurationExplanationList3": "Crea proxy client HTTP dinamici per C # e JavaScript.", + "ConventionOverConfigurationExplanationList3": "Crea proxy client HTTP dinamici per C# e JavaScript.", "ConventionOverConfigurationExplanationList4": "Fornisce archivi predefiniti per le tue entità.", - "ConventionOverConfigurationExplanationList5": "Gestisce l'unità di lavoro per richiesta Web o metodo di servizio dell'applicazione.", - "ConventionOverConfigurationExplanationList6": "Pubblica creare, aggiornare ed eliminare eventi per le tue entità.", + "ConventionOverConfigurationExplanationList5": "Gestisce l'UnitofWork per richieste Web o per i metodi dei servizi dell'applicazione.", + "ConventionOverConfigurationExplanationList6": "Pubblica gli eventi creazione, aggiornamento ed eliminazione per le tue entità.", "BaseClasses": "Classi di base", "BaseClassesExplanation": "Classi di base predefinite per modelli di applicazioni comuni.", "DeveloperFocusedExplanation": "ABP è per gli sviluppatori.", @@ -91,16 +91,16 @@ "ABPCLI": "ABP CLI", "Modularity": "Modularità", "BootstrapTagHelpers": "Bootstrap Tag Helpers", - "DynamicForms": "Forme dinamiche", + "DynamicForms": "Moduli dinamici", "BundlingMinification": "Raggruppamento e minimizzazione", - "BackgroundJobs": "Lavori in background", - "BackgroundJobsExplanation": "Definire classi semplici per eseguire lavori in background come in coda. Usa il gestore dei lavori integrato o integra il tuo. Le integrazioni Hangfire e RabbitMQ sono già disponibili.", + "BackgroundJobs": "Operazioni in background", + "BackgroundJobsExplanation": "Definire classi semplici per eseguire Operazioni in background come in coda. Usa il gestore dei lavori integrato o integra il tuo. Le integrazioni Hangfire e RabbitMQ sono già disponibili.", "DDDInfrastructure": "Infrastruttura DDD", - "DomainDrivenDesignInfrastructure": "Infrastruttura di progettazione basata sul dominio", + "DomainDrivenDesignInfrastructure": "Infrastruttura Domain Driven Design", "AutoRESTAPIs": "API REST automatiche", "DynamicClientProxies": "Proxy client dinamici", - "DistributedEventBus": "Bus di eventi distribuito", - "DistributedEventBusWithRabbitMQIntegration": "Bus di eventi distribuito con integrazione RabbitMQ", + "DistributedEventBus": "Bus Eventi Distribuito", + "DistributedEventBusWithRabbitMQIntegration": "Bus Eventi Distribuito con integrazione RabbitMQ", "TestInfrastructure": "Infrastruttura di test", "AuditLoggingEntityHistories": "Registrazione di audit e cronologie delle entità", "ObjectToObjectMapping": "Mappatura da oggetto a oggetto", @@ -109,36 +109,36 @@ "EmailSMSAbstractionsWithTemplatingSupport": "Astrazioni tramite posta elettronica e SMS con supporto per i modelli", "Localization": "Localizzazione", "SettingManagement": "Gestione delle impostazioni", - "ExtensionMethods": "Metodi di estensione", - "ExtensionMethodsHelpers": "Metodi di estensione e aiutanti", + "ExtensionMethods": "Metodi estensione", + "ExtensionMethodsHelpers": "Metodi estensione e assistenti", "AspectOrientedProgramming": "Programmazione orientata agli aspetti", - "DependencyInjection": "Iniezione di dipendenza", + "DependencyInjection": "Iniezione delle dipendenze", "DependencyInjectionByConventions": "Inserimento delle dipendenze mediante convenzioni", "ABPCLIExplanation": "ABP CLI (Command Line Interface) è uno strumento a riga di comando per eseguire alcune operazioni comuni per soluzioni basate su ABP.", "ModularityExplanation": "ABP fornisce un'infrastruttura completa per creare i propri moduli applicativi che possono avere entità, servizi, integrazione di database, API, componenti dell'interfaccia utente e così via.", "MultiTenancyExplanation": "Il framework ABP non solo supporta lo sviluppo di applicazioni multi-tenant, ma rende anche il tuo codice per lo più inconsapevole del multi-tenancy.", - "MultiTenancyExplanation2": "Può determinare automaticamente l'inquilino corrente, isolare i dati di diversi inquilini l'uno dall'altro.", + "MultiTenancyExplanation2": "Può determinare automaticamente il tenant corrente, isolare i dati di diversi inquilini l'uno dall'altro.", "MultiTenancyExplanation3": "Supporta database singolo, database per tenant e approcci ibridi.", "MultiTenancyExplanation4": "Ti concentri sul tuo codice aziendale e lasci che il framework gestisca il multi-tenancy per tuo conto.", "BootstrapTagHelpersExplanation": "Invece di scrivere manualmente i dettagli ripetuti dei componenti bootstrap, usa gli helper tag di ABP per semplificarlo e sfruttare intellisense. Puoi sicuramente usare Bootstrap ogni volta che ne hai bisogno.", - "DynamicFormsExplanation": "Gli helper dei moduli dinamici e dei tag di input possono creare il modulo completo da una classe C # come modello.", + "DynamicFormsExplanation": "Gli helper dei moduli dinamici e dei tag di input possono creare il modulo completo da una classe C# come modello.", "AuthenticationAuthorizationExplanation": "Ricche opzioni di autenticazione e autorizzazione integrate in ASP.NET Core Identity & IdentityServer4. Fornisce un sistema di autorizzazione estensibile e dettagliato.", "CrossCuttingConcernsExplanation": "Non ripetere te stesso per implementare tutte queste cose comuni ancora e ancora. Concentrati sul tuo codice aziendale e lascia che ABP li automatizzi secondo le convenzioni.", "DatabaseConnectionTransactionManagement": "Connessione al database e gestione delle transazioni", "CorrelationIdTracking": "Monitoraggio dell'ID di correlazione", "BundlingMinificationExplanation": "ABP offre un sistema di raggruppamento e minimizzazione semplice, dinamico, potente, modulare e integrato.", - "VirtualFileSystemnExplanation": "Il Virtual File System consente di gestire file che non esistono fisicamente nel file system (disco). Viene utilizzato principalmente per incorporare file (js, css, immagine, cshtml ...) negli assembly e utilizzarli come file fisici in runtime.", + "VirtualFileSystemnExplanation": "Il Virtual File System consente di gestire file che non esistono fisicamente nel file system (disco). Viene utilizzato principalmente per incorporare file (js, css, immagine, cshtml...) negli assembly e utilizzarli come file fisici in runtime.", "ThemingExplanation": "Il sistema di temi consente di sviluppare applicazioni e moduli indipendentemente dal tema definendo un set di librerie e layout di base comuni, basati sul più recente framework Bootstrap.", "DomainDrivenDesignInfrastructureExplanation": "Un'infrastruttura completa per creare applicazioni a più livelli basate sui modelli e sui principi di Domain Driven Design;", - "Specification": "Specifica", + "Specification": "Specificazione", "Repository": "Repository", "DomainService": "Servizio di dominio", "ValueObject": "Oggetto valore", - "ApplicationService": "Servizio applicazioni", + "ApplicationService": "Servizio applicazione", "DataTransferObject": "Oggetto trasferimento dati", - "AggregateRootEntity": "Radice aggregata, entità", + "AggregateRootEntity": "Aggregate Root, entità", "AutoRESTAPIsExplanation": "ABP può configurare automaticamente i servizi dell'applicazione come controller API per convenzione.", - "DynamicClientProxiesExplanation": "Utilizza facilmente le tue API da client JavaScript e C #.", + "DynamicClientProxiesExplanation": "Utilizza facilmente le tue API da client JavaScript e C# .", "DistributedEventBusWithRabbitMQIntegrationExplanation": "Pubblica e utilizza facilmente eventi distribuiti utilizzando Distributed Event Bus integrato con integrazione RabbitMQ disponibile.", "TestInfrastructureExplanation": "Il framework è stato sviluppato in mente per test di unità e integrazione. Fornisce classi di base per renderlo più facile. I modelli di avvio vengono forniti preconfigurati per i test.", "AuditLoggingEntityHistoriesExplanation": "Registrazione di audit integrata per applicazioni business-critical. Richiesta, servizio, registrazione di controllo a livello di metodo e cronologie di entità con dettagli a livello di proprietà.", @@ -151,17 +151,17 @@ "DataFilteringExplanation": "Definisci e utilizza i filtri di dati che vengono applicati automaticamente quando esegui query sulle entità dal database. Quando si implementano interfacce semplici, vengono forniti filtri Soft Delete e MultiTenant.", "PublishEvents": "Pubblica eventi", "HandleEvents": "Gestisci eventi", - "AndMore": "e altro ancora ...", + "AndMore": "e altro ancora...", "Code": "Codice", "Result": "Risultato", "SeeTheDocumentForMoreInformation": "Consulta il {0} documento per ulteriori informazioni", - "IndexPageHeroSection": " open source Framework
applicazione web
per asp.net core ", + "IndexPageHeroSection": "open sourceFramework
applicazione web
per asp.net core", "UiFramework": "Framework dell'interfaccia utente", "EmailAddress": "Indirizzo e-mail", "Mobile": "Mobile", "ReactNative": "React Native", "Strong": "Forte", - "Complete": "Completare", + "Complete": "Completa", "BasedLayeringModel": "Modello di stratificazione basato", "Microservice": "Microservizio", "Compatible": "Compatibile", @@ -169,21 +169,21 @@ "JoinTheABPCommunityInfo": "Fatti coinvolgere da una vivace comunità e diventa un collaboratore di ABP Framework!", "AllArticles": "Tutti gli articoli", "SubmitYourArticle": "Invia il tuo articolo", - "DynamicClientProxyDocument": "Consulta la documentazione relativa al proxy del client dinamico per JavaScript e C # .", - "EmailSMSAbstractionsDocument": "Per ulteriori informazioni, consulta i documenti di invio di email e invio di SMS .", + "DynamicClientProxyDocument": "Consulta la documentazione relativa al proxy del client dinamico per JavaScript e C#.", + "EmailSMSAbstractionsDocument": "Per ulteriori informazioni, consulta i documenti di invio di email e invio di SMS.", "CreateProjectWizard": "Questa procedura guidata crea un nuovo progetto dal modello di avvio che è configurato correttamente per avviare rapidamente il progetto.", "TieredOption": "Crea una soluzione a più livelli in cui i livelli API Web e Http sono fisicamente separati. Se non selezionata, crea una soluzione a più livelli meno complessa e adatta alla maggior parte degli scenari.", "SeparateIdentityServerOption": "Separa il lato server in due applicazioni: la prima è per il server di identità e la seconda è per l'API HTTP lato server.", "UseslatestPreVersion": "Utilizza l'ultima versione pre-rilascio", - "ReadTheDocumentation": " Leggi La documentazione ", + "ReadTheDocumentation": "LeggiLa documentazione", "Documentation": "Documentazione", "GettingStartedTutorial": "Tutorial introduttivo", "ApplicationDevelopmentTutorial": "Tutorial sullo sviluppo di applicazioni", "TheStartupTemplate": "Il modello di avvio", "InstallABPCLIInfo": "ABP CLI è il modo più veloce per avviare una nuova soluzione con il framework ABP. Installa ABP CLI utilizzando una finestra della riga di comando:", "DifferentLevelOfNamespaces": "È possibile utilizzare diversi livelli di spazi dei nomi; per esempio. BookStore, Acme.BookStore o Acme.Retail.BookStore.", - "ABPCLIExamplesInfo": "Il comando nuovo crea un ' applicazione MVC a più livelli con Entity Framework Core come provider di database. Tuttavia, ha opzioni aggiuntive. Esempi:", - "SeeCliDocumentForMoreInformation": "Consulta il documento ABP CLI per ulteriori opzioni o seleziona la scheda \"Download diretto\" in alto.", + "ABPCLIExamplesInfo": "Il comando nuovo crea un 'applicazione MVC a più livelli con Entity Framework Core come provider di database. Tuttavia, ha opzioni aggiuntive. Esempi:", + "SeeCliDocumentForMoreInformation": "Consulta la documentazione ABP CLI per ulteriori opzioni o seleziona la scheda \"Download diretto\" in alto.", "Optional": "Opzionale", "LocalFrameworkRef": "Mantieni il riferimento al progetto locale per i pacchetti del framework.", "BlobStoring": "Archiviazione BLOB", @@ -191,7 +191,7 @@ "TextTemplating": "Modelli di testo", "TextTemplatingExplanation": "La creazione di modelli di testo viene utilizzata per eseguire il rendering dinamico dei contenuti in base a un modello e un modello (un oggetto dati). Ad esempio, puoi utilizzarlo per creare contenuti di posta elettronica dinamici con un modello predefinito.", "MultipleUIOptions": "Molteplici opzioni di interfaccia utente", - "MultipleDBOptions": "Più fornitori di database", + "MultipleDBOptions": "Più provider per database", "MultipleUIOptionsExplanation": "Il framework principale è progettato come indipendente dall'interfaccia utente e può funzionare con qualsiasi tipo di sistema di interfaccia utente, mentre sono disponibili più opzioni predefinite e integrate.", "MultipleDBOptionsExplanation": "Il framework può funzionare con qualsiasi fonte di dati, mentre i seguenti provider sono ufficialmente sviluppati e supportati;", "SelectLanguage": "Seleziona la lingua", diff --git a/docs/en/Customizing-Application-Modules-Guide.md b/docs/en/Customizing-Application-Modules-Guide.md index 438c087e0c..b62d4e5bb7 100644 --- a/docs/en/Customizing-Application-Modules-Guide.md +++ b/docs/en/Customizing-Application-Modules-Guide.md @@ -31,7 +31,8 @@ If you don't think to make huge changes on the pre-built modules, re-using them If you want to make **huge changes** or add **major features** on a pre-built module, but the available extension points are not enough, you can consider to directly work the source code of the depended module. -In this case, you typically **add the source code** of the module to your solution and **replace package references** by local project references. **[ABP CLI](CLI.md)** automates this process for you. +In this case, you typically **add the source code** of the module to your solution and replace **every** package reference in the solution with its corresponding local project references. **[ABP CLI](CLI.md)** automates this process for you. + #### Separating the Module Solution diff --git a/docs/en/Startup-Templates/Module.md b/docs/en/Startup-Templates/Module.md index 84b7525944..cdcb964bef 100644 --- a/docs/en/Startup-Templates/Module.md +++ b/docs/en/Startup-Templates/Module.md @@ -20,23 +20,9 @@ abp new Acme.IssueManagement -t module - `Acme.IssueManagement` is the solution name, like *YourCompany.YourProduct*. You can use single level, two-levels or three-levels naming. -### Specify the UI Framework - -This template provides multiple UI frameworks: - -* `mvc`: ASP.NET Core MVC UI with Razor Pages (default) -* `blazor`: Blazor UI -* `angular`: Angular UI - -Use `-u` or `--ui` option to specify the UI framework: - -````bash -abp new Acme.IssueManagement -t module -u angular -```` - ### Without User Interface -The template comes with an MVC UI by default. You can use `--no-ui` option to not include the UI layer. +The template comes with MVC, Blazor & Angular user interfaces by default. You can use `--no-ui` option to not include any of these UI layers. ````bash abp new Acme.IssueManagement -t module --no-ui @@ -179,7 +165,7 @@ You should run the application with the given order: ### Angular UI -If you choose `Angular` as the UI framework (using the `-u angular` option), the solution will have a folder called `angular` in it. This is where the client-side code is located. When you open that folder in an IDE, the folder structure will look like below: +The solution will have a folder called `angular` in it. This is where the Angular client-side code is located. When you open that folder in an IDE, the folder structure will look like below: ![Folder structure of ABP Angular module project](../images/angular-module-folder-structure.png) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo/Abp/AspNetCore/Components/Server/Extensibility/BlazorServerLookupApiRequestService.cs b/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo/Abp/AspNetCore/Components/Server/Extensibility/BlazorServerLookupApiRequestService.cs index b7e2de8364..952a2d6de4 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo/Abp/AspNetCore/Components/Server/Extensibility/BlazorServerLookupApiRequestService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo/Abp/AspNetCore/Components/Server/Extensibility/BlazorServerLookupApiRequestService.cs @@ -19,9 +19,7 @@ namespace Volo.Abp.AspNetCore.Components.Server.Extensibility { public IHttpClientFactory HttpClientFactory { get; } public IRemoteServiceHttpClientAuthenticator HttpClientAuthenticator { get; } - - public AbpRemoteServiceOptions RemoteServiceOptions { get; } - + public IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider { get; } public ICurrentTenant CurrentTenant { get; } public IHttpContextAccessor HttpContextAccessor { get; } public NavigationManager NavigationManager { get; } @@ -29,16 +27,16 @@ namespace Volo.Abp.AspNetCore.Components.Server.Extensibility public BlazorServerLookupApiRequestService(IHttpClientFactory httpClientFactory, IRemoteServiceHttpClientAuthenticator httpClientAuthenticator, ICurrentTenant currentTenant, - IOptions remoteServiceOptions, IHttpContextAccessor httpContextAccessor, - NavigationManager navigationManager) + NavigationManager navigationManager, + IRemoteServiceConfigurationProvider remoteServiceConfigurationProvider) { HttpClientFactory = httpClientFactory; HttpClientAuthenticator = httpClientAuthenticator; - RemoteServiceOptions = remoteServiceOptions.Value; CurrentTenant = currentTenant; HttpContextAccessor = httpContextAccessor; NavigationManager = navigationManager; + RemoteServiceConfigurationProvider = remoteServiceConfigurationProvider; } public async Task SendAsync(string url) @@ -53,7 +51,7 @@ namespace Volo.Abp.AspNetCore.Components.Server.Extensibility try { //Blazor tiered -- mode - var remoteServiceConfig = RemoteServiceOptions.RemoteServices.GetConfigurationOrDefault("Default"); + var remoteServiceConfig = await RemoteServiceConfigurationProvider.GetConfigurationOrDefaultAsync("Default"); baseUrl = remoteServiceConfig.BaseUrl; client.BaseAddress = new Uri(baseUrl); AddHeaders(requestMessage); diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/DefaultServerUrlProvider.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/DefaultServerUrlProvider.cs index 2d0473b4ea..629a19d9f5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/DefaultServerUrlProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/DefaultServerUrlProvider.cs @@ -1,12 +1,13 @@ -using Volo.Abp.DependencyInjection; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; namespace Volo.Abp.AspNetCore.Components.Web { public class DefaultServerUrlProvider : IServerUrlProvider, ISingletonDependency { - public string GetBaseUrl(string remoteServiceName = null) + public Task GetBaseUrlAsync(string remoteServiceName = null) { - return "/"; + return Task.FromResult("/"); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/IServerUrlProvider.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/IServerUrlProvider.cs index 808dc6c7d3..fffec2f606 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/IServerUrlProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/IServerUrlProvider.cs @@ -1,7 +1,9 @@ -namespace Volo.Abp.AspNetCore.Components.Web +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Components.Web { public interface IServerUrlProvider { - string GetBaseUrl(string remoteServiceName = null); + Task GetBaseUrlAsync(string remoteServiceName = null); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/Extensibility/WebAssemblyLookupApiRequestService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/Extensibility/WebAssemblyLookupApiRequestService.cs index be4a6f8bfb..594aa32bae 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/Extensibility/WebAssemblyLookupApiRequestService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/Extensibility/WebAssemblyLookupApiRequestService.cs @@ -17,20 +17,18 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.Extensibility { public IHttpClientFactory HttpClientFactory { get; } public IRemoteServiceHttpClientAuthenticator HttpClientAuthenticator { get; } - - public AbpRemoteServiceOptions RemoteServiceOptions { get; } - + public IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider { get; } public ICurrentTenant CurrentTenant { get; } public WebAssemblyLookupApiRequestService(IHttpClientFactory httpClientFactory, IRemoteServiceHttpClientAuthenticator httpClientAuthenticator, ICurrentTenant currentTenant, - IOptions remoteServiceOptions) + IRemoteServiceConfigurationProvider remoteServiceConfigurationProvider) { HttpClientFactory = httpClientFactory; HttpClientAuthenticator = httpClientAuthenticator; - RemoteServiceOptions = remoteServiceOptions.Value; CurrentTenant = currentTenant; + RemoteServiceConfigurationProvider = remoteServiceConfigurationProvider; } public async Task SendAsync(string url) @@ -42,7 +40,7 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.Extensibility var uri = new Uri(url, UriKind.RelativeOrAbsolute); if (!uri.IsAbsoluteUri) { - var remoteServiceConfig = RemoteServiceOptions.RemoteServices.GetConfigurationOrDefault("Default"); + var remoteServiceConfig = await RemoteServiceConfigurationProvider.GetConfigurationOrDefaultAsync("Default"); client.BaseAddress = new Uri(remoteServiceConfig.BaseUrl); await HttpClientAuthenticator.Authenticate(new RemoteServiceHttpClientAuthenticateContext(client, requestMessage, new RemoteServiceConfiguration(remoteServiceConfig.BaseUrl), string.Empty)); } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyServerUrlProvider.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyServerUrlProvider.cs index 865871b5a5..477dba5418 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyServerUrlProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyServerUrlProvider.cs @@ -1,5 +1,5 @@ using System; -using Microsoft.Extensions.Options; +using System.Threading.Tasks; using Volo.Abp.AspNetCore.Components.Web; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client; @@ -9,19 +9,21 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly [Dependency(ReplaceServices = true)] public class WebAssemblyServerUrlProvider : IServerUrlProvider, ITransientDependency { - public AbpRemoteServiceOptions Options { get; } + protected IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider { get; } public WebAssemblyServerUrlProvider( - IOptions options) + IRemoteServiceConfigurationProvider remoteServiceConfigurationProvider) { - Options = options.Value; + RemoteServiceConfigurationProvider = remoteServiceConfigurationProvider; } - public string GetBaseUrl(string remoteServiceName = null) + public async Task GetBaseUrlAsync(string remoteServiceName = null) { - return Options.RemoteServices.GetConfigurationOrDefault( + var remoteServiceConfiguration = await RemoteServiceConfigurationProvider.GetConfigurationOrDefaultAsync( remoteServiceName ?? RemoteServiceConfigurationDictionary.DefaultName - ).BaseUrl.EnsureEndsWith('/'); + ); + + return remoteServiceConfiguration.BaseUrl.EnsureEndsWith('/'); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/it.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/it.json index e46b96fb20..edaf4fe608 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/it.json +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/it.json @@ -3,11 +3,11 @@ "texts": { "GivenTenantIsNotExist": "Il tenant specificato non esiste: {0}", "GivenTenantIsNotAvailable": "Il tenant specificato non è disponibile: {0}", - "Tenant": "Inquilino", - "Switch": "interruttore", + "Tenant": "Tenant", + "Switch": "Cambia", "Name": "Nome", "SwitchTenantHint": "Lascia vuoto il campo del nome per passare al lato host.", - "SwitchTenant": "Cambia inquilino", + "SwitchTenant": "Cambia tenant", "NotSelected": "Non selezionato" } } \ No newline at end of file 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 e26e4a6d25..663d4e9bad 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 @@ -40,6 +40,14 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.Module "MyCompanyName.MyProjectName.Blazor" )); + steps.Add(new RemoveProjectFromSolutionStep( + "MyCompanyName.MyProjectName.Blazor.Server" + )); + + steps.Add(new RemoveProjectFromSolutionStep( + "MyCompanyName.MyProjectName.Blazor.WebAssembly" + )); + steps.Add(new RemoveProjectFromSolutionStep( "MyCompanyName.MyProjectName.Blazor.Host", projectFolderPath: "/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host" diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/it.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/it.json index 34b5f573c5..3160703123 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/it.json +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/it.json @@ -1,17 +1,17 @@ { "culture": "it", "texts": { - "DisplayName:Abp.Mailing.DefaultFromAddress": "Indirizzo predefinito dall'indirizzo", - "DisplayName:Abp.Mailing.DefaultFromDisplayName": "Predefinito dal nome visualizzato", - "DisplayName:Abp.Mailing.Smtp.Host": "Ospite", + "DisplayName:Abp.Mailing.DefaultFromAddress": "Indirizzo mittente predefinito", + "DisplayName:Abp.Mailing.DefaultFromDisplayName": "Nome mittente visualizzato predefinito", + "DisplayName:Abp.Mailing.Smtp.Host": "Host", "DisplayName:Abp.Mailing.Smtp.Port": "Porta", "DisplayName:Abp.Mailing.Smtp.UserName": "Nome utente", - "DisplayName:Abp.Mailing.Smtp.Password": "Parola d'ordine", + "DisplayName:Abp.Mailing.Smtp.Password": "Password", "DisplayName:Abp.Mailing.Smtp.Domain": "Dominio", "DisplayName:Abp.Mailing.Smtp.EnableSsl": "Abilita SSL", "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Usa credenziali predefinite", - "Description:Abp.Mailing.DefaultFromAddress": "L'indirizzo predefinito da", - "Description:Abp.Mailing.DefaultFromDisplayName": "Il valore predefinito dal nome visualizzato", + "Description:Abp.Mailing.DefaultFromAddress": "L'indirizzo predefinito mittente", + "Description:Abp.Mailing.DefaultFromDisplayName": "Il valore nome mittente visualizzato predefinito", "Description:Abp.Mailing.Smtp.Host": "Il nome o l'indirizzo IP dell'host utilizzato per le transazioni SMTP.", "Description:Abp.Mailing.Smtp.Port": "La porta utilizzata per le transazioni SMTP.", "Description:Abp.Mailing.Smtp.UserName": "Nome utente associato alle credenziali.", diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs index a397f1b53e..7914068bca 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs @@ -34,7 +34,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying protected AbpCorrelationIdOptions AbpCorrelationIdOptions { get; } protected IDynamicProxyHttpClientFactory HttpClientFactory { get; } protected IApiDescriptionFinder ApiDescriptionFinder { get; } - protected AbpRemoteServiceOptions AbpRemoteServiceOptions { get; } + protected IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider { get; } protected AbpHttpClientOptions ClientOptions { get; } protected IJsonSerializer JsonSerializer { get; } protected IRemoteServiceHttpClientAuthenticator ClientAuthenticator { get; } @@ -51,25 +51,25 @@ namespace Volo.Abp.Http.Client.DynamicProxying public DynamicHttpProxyInterceptor( IDynamicProxyHttpClientFactory httpClientFactory, IOptions clientOptions, - IOptionsSnapshot remoteServiceOptions, IApiDescriptionFinder apiDescriptionFinder, IJsonSerializer jsonSerializer, IRemoteServiceHttpClientAuthenticator clientAuthenticator, ICancellationTokenProvider cancellationTokenProvider, ICorrelationIdProvider correlationIdProvider, IOptions correlationIdOptions, - ICurrentTenant currentTenant) + ICurrentTenant currentTenant, + IRemoteServiceConfigurationProvider remoteServiceConfigurationProvider) { CancellationTokenProvider = cancellationTokenProvider; CorrelationIdProvider = correlationIdProvider; CurrentTenant = currentTenant; + RemoteServiceConfigurationProvider = remoteServiceConfigurationProvider; AbpCorrelationIdOptions = correlationIdOptions.Value; HttpClientFactory = httpClientFactory; ApiDescriptionFinder = apiDescriptionFinder; JsonSerializer = jsonSerializer; ClientAuthenticator = clientAuthenticator; ClientOptions = clientOptions.Value; - AbpRemoteServiceOptions = remoteServiceOptions.Value; Logger = NullLogger>.Instance; } @@ -135,7 +135,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying private async Task MakeRequestAsync(IAbpMethodInvocation invocation) { var clientConfig = ClientOptions.HttpClientProxies.GetOrDefault(typeof(TService)) ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {typeof(TService).FullName}."); - var remoteServiceConfig = AbpRemoteServiceOptions.RemoteServices.GetConfigurationOrDefault(clientConfig.RemoteServiceName); + var remoteServiceConfig = await RemoteServiceConfigurationProvider.GetConfigurationOrDefaultAsync(clientConfig.RemoteServiceName); var client = HttpClientFactory.Create(clientConfig.RemoteServiceName); @@ -146,7 +146,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying invocation.Method ); - var apiVersion = GetApiVersionInfo(action); + var apiVersion = await GetApiVersionInfoAsync(action); var url = remoteServiceConfig.BaseUrl.EnsureEndsWith('/') + UrlBuilder.GenerateUrlWithParameters(action, invocation.ArgumentsDictionary, apiVersion); var requestMessage = new HttpRequestMessage(action.GetHttpMethod(), url) @@ -182,9 +182,9 @@ namespace Volo.Abp.Http.Client.DynamicProxying return response.Content; } - private ApiVersionInfo GetApiVersionInfo(ActionApiDescriptionModel action) + private async Task GetApiVersionInfoAsync(ActionApiDescriptionModel action) { - var apiVersion = FindBestApiVersion(action); + var apiVersion = await FindBestApiVersionAsync(action); //TODO: Make names configurable? var versionParam = action.Parameters.FirstOrDefault(p => p.Name == "apiVersion" && p.BindingSourceId == ParameterBindingSources.Path) ?? @@ -193,9 +193,9 @@ namespace Volo.Abp.Http.Client.DynamicProxying return new ApiVersionInfo(versionParam?.BindingSourceId, apiVersion); } - private string FindBestApiVersion(ActionApiDescriptionModel action) + private async Task FindBestApiVersionAsync(ActionApiDescriptionModel action) { - var configuredVersion = GetConfiguredApiVersion(); + var configuredVersion = await GetConfiguredApiVersionAsync(); if (action.SupportedVersions.IsNullOrEmpty()) { @@ -258,13 +258,13 @@ namespace Volo.Abp.Http.Client.DynamicProxying requestMessage.Headers.Add("X-Requested-With", "XMLHttpRequest"); } - private string GetConfiguredApiVersion() + private async Task GetConfiguredApiVersionAsync() { var clientConfig = ClientOptions.HttpClientProxies.GetOrDefault(typeof(TService)) ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {typeof(TService).FullName}."); - return AbpRemoteServiceOptions.RemoteServices.GetOrDefault(clientConfig.RemoteServiceName)?.Version - ?? AbpRemoteServiceOptions.RemoteServices.Default?.Version; + return (await RemoteServiceConfigurationProvider + .GetConfigurationOrDefaultOrNullAsync(clientConfig.RemoteServiceName))?.Version; } private async Task ThrowExceptionForResponseAsync(HttpResponseMessage response) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/IRemoteServiceConfigurationProvider.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/IRemoteServiceConfigurationProvider.cs new file mode 100644 index 0000000000..b6a2b040f9 --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/IRemoteServiceConfigurationProvider.cs @@ -0,0 +1,14 @@ +using System.Threading.Tasks; +using JetBrains.Annotations; + +namespace Volo.Abp.Http.Client +{ + public interface IRemoteServiceConfigurationProvider + { + [ItemNotNull] + Task GetConfigurationOrDefaultAsync(string name); + + [ItemCanBeNull] + Task GetConfigurationOrDefaultOrNullAsync(string name); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationDictionary.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationDictionary.cs index 248285d748..fa76ec76b1 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationDictionary.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationDictionary.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using JetBrains.Annotations; namespace Volo.Abp.Http.Client { @@ -12,11 +13,19 @@ namespace Volo.Abp.Http.Client set => this[DefaultName] = value; } + [NotNull] public RemoteServiceConfiguration GetConfigurationOrDefault(string name) { return this.GetOrDefault(name) ?? Default ?? throw new AbpException($"Remote service '{name}' was not found and there is no default configuration."); } + + [CanBeNull] + public RemoteServiceConfiguration GetConfigurationOrDefaultOrNull(string name) + { + return this.GetOrDefault(name) + ?? Default; + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationProvider.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationProvider.cs new file mode 100644 index 0000000000..c14ea40aa3 --- /dev/null +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/RemoteServiceConfigurationProvider.cs @@ -0,0 +1,26 @@ +using System.Threading.Tasks; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Http.Client +{ + public class RemoteServiceConfigurationProvider : IRemoteServiceConfigurationProvider, IScopedDependency + { + protected AbpRemoteServiceOptions Options { get; } + + public RemoteServiceConfigurationProvider(IOptionsSnapshot options) + { + Options = options.Value; + } + + public Task GetConfigurationOrDefaultAsync(string name) + { + return Task.FromResult(Options.RemoteServices.GetConfigurationOrDefault(name)); + } + + public Task GetConfigurationOrDefaultOrNullAsync(string name) + { + return Task.FromResult(Options.RemoteServices.GetConfigurationOrDefaultOrNull(name)); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManager.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManager.cs index c619e5483c..c5d66f0a49 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManager.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/ProxyScriptManager.cs @@ -64,7 +64,10 @@ namespace Volo.Abp.Http.ProxyScripting using (var scope = _serviceProvider.CreateScope()) { - return scope.ServiceProvider.GetRequiredService(generatorType).As().CreateScript(apiModel); + return scope.ServiceProvider + .GetRequiredService(generatorType) + .As() + .CreateScript(apiModel); } } diff --git a/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/it.json b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/it.json index 61fd573b09..c9055d35ef 100644 --- a/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/it.json +++ b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/it.json @@ -1,15 +1,15 @@ { "culture": "it", "texts": { - "DisplayName:Abp.Ldap.ServerHost": "Host del server", - "Description:Abp.Ldap.ServerHost": "Host del server", + "DisplayName:Abp.Ldap.ServerHost": "Server host", + "Description:Abp.Ldap.ServerHost": "Server host", "DisplayName:Abp.Ldap.ServerPort": "Porta del server", "Description:Abp.Ldap.ServerPort": "Porta del server", "DisplayName:Abp.Ldap.BaseDc": "Componente del dominio di base", "Description:Abp.Ldap.BaseDc": "Componente del dominio di base", "DisplayName:Abp.Ldap.UserName": "Nome utente", "Description:Abp.Ldap.UserName": "Nome utente", - "DisplayName:Abp.Ldap.Password": "Parola d'ordine", - "Description:Abp.Ldap.Password": "Parola d'ordine" + "DisplayName:Abp.Ldap.Password": "Password", + "Description:Abp.Ldap.Password": "Password" } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fi.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fi.json index 844752e093..77ff9247ce 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fi.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fi.json @@ -17,7 +17,7 @@ "Refresh": "virkistää", "Language": "Kieli", "LoadMore": "Lataa lisää", - "ProcessingWithThreeDot": "Käsitellään ...", + "ProcessingWithThreeDot": "Käsitellään...", "LoadingWithThreeDot": "Ladataan...", "Welcome": "Tervetuloa", "Login": "Kirjaudu sisään", diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hi.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hi.json index 7fbdb1375a..6ccee95a76 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hi.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/hi.json @@ -10,14 +10,14 @@ "Ok": "ठीक है", "Close": "बंद करे", "Save": "सहेजें", - "SavingWithThreeDot": "सहेजा जा रहा है ...", + "SavingWithThreeDot": "सहेजा जा रहा है...", "Actions": "कार्रवाई", "Delete": "हटाएं", "Edit": "संपादित करें", "Refresh": "ताज़ा करना", "Language": "भाषा: हिन्दी", "LoadMore": "और लोड करें", - "ProcessingWithThreeDot": "प्रसंस्करण ...", + "ProcessingWithThreeDot": "प्रसंस्करण...", "LoadingWithThreeDot": "लोड हो रहा है...", "Welcome": "स्वागत हे", "Login": "लॉग इन करें", diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/it.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/it.json index 6a66828c6e..d4b37bbbb1 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/it.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/it.json @@ -1,42 +1,42 @@ { "culture": "it", "texts": { - "Languages": "Le lingue", + "Languages": "Linguaggi", "AreYouSure": "Sei sicuro?", "Cancel": "Annulla", - "Clear": "Chiaro", - "Yes": "sì", + "Clear": "Pulisci", + "Yes": "Sì", "No": "No", "Ok": "Ok", - "Close": "Vicino", + "Close": "Chiudi", "Save": "Salva", "SavingWithThreeDot": "Salvataggio...", "Actions": "Azioni", "Delete": "Elimina", - "Edit": "modificare", - "Refresh": "ricaricare", - "Language": "linguaggio", - "LoadMore": "Carica di più", + "Edit": "Modifica", + "Refresh": "Ricarica", + "Language": "Lingua", + "LoadMore": "Carica altro", "ProcessingWithThreeDot": "In lavorazione...", "LoadingWithThreeDot": "Caricamento in corso...", - "Welcome": "benvenuto", - "Login": "Login", + "Welcome": "Benvenuto", + "Login": "Accedi", "Register": "Registrati", - "Logout": "Disconnettersi", + "Logout": "Disconnettiti", "Submit": "Invia", "Back": "Indietro", "PagerSearch": "Ricerca", - "PagerNext": "Il prossimo", + "PagerNext": "Successivo", "PagerPrevious": "Precedente", "PagerFirst": "Primo", - "PagerLast": "Scorso", + "PagerLast": "Ultimo", "PagerInfo": "Visualizzazione da _START_ a _END_ di _TOTAL_ voci", "PagerInfo{0}{1}{2}": "Visualizzazione da {0} a {1} di {2} voci", "PagerInfoEmpty": "Mostra da 0 a 0 di 0 voci", "PagerInfoFiltered": "(filtrato da _MAX_ voci totali)", "NoDataAvailableInDatatable": "Nessun dato disponibile", - "Total": "totale", - "Selected": "selezionato", + "Total": "Totale", + "Selected": "Selezionato", "PagerShowMenuEntries": "Mostra voci _MENU_", "DatatableActionDropdownDefaultText": "Azioni", "ChangePassword": "Cambia la password", @@ -46,7 +46,7 @@ "GoBack": "Torna indietro", "Search": "Ricerca", "ItemWillBeDeletedMessageWithFormat": "{0} verrà eliminato!", - "ItemWillBeDeletedMessage": "Questo articolo sarà eliminato!", - "ManageYourAccount": "Gestire il tuo account" + "ItemWillBeDeletedMessage": "Questo elemento sarà eliminato!", + "ManageYourAccount": "Gestisci il tuo account" } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/it.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/it.json index 162e186cde..bad68c117f 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/it.json +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/it.json @@ -1,13 +1,13 @@ { "culture": "it", "texts": { - "'{0}' and '{1}' do not match.": "\"{0}\" e \"{1}\" non corrispondono.", + "'{0}' and '{1}' do not match.": "'{0}' e '{1}' non corrispondono.", "The {0} field is not a valid credit card number.": "Il campo {0} non è un numero di carta di credito valido.", "{0} is not valid.": "{0} non è valido.", "The {0} field is not a valid e-mail address.": "Il campo {0} non è un indirizzo e-mail valido.", "The {0} field only accepts files with the following extensions: {1}": "Il campo {0} accetta solo file con le seguenti estensioni: {1}", - "The field {0} must be a string or array type with a maximum length of '{1}'.": "Il campo {0} deve essere una stringa o un tipo di matrice con una lunghezza massima di \"{1}\".", - "The field {0} must be a string or array type with a minimum length of '{1}'.": "Il campo {0} deve essere una stringa o un tipo di matrice con una lunghezza minima di \"{1}\".", + "The field {0} must be a string or array type with a maximum length of '{1}'.": "Il campo {0} deve essere una stringa o un tipo di matrice con una lunghezza massima di '{1}'.", + "The field {0} must be a string or array type with a minimum length of '{1}'.": "Il campo {0} deve essere una stringa o un tipo di matrice con una lunghezza minima di '{1}'.", "The {0} field is not a valid phone number.": "Il campo {0} non è un numero di telefono valido.", "The field {0} must be between {1} and {2}.": "Il campo {0} deve essere compreso tra {1} e {2}.", "The field {0} must match the regular expression '{1}'.": "Il campo {0} non corrisponde al formato richiesto.", @@ -20,11 +20,11 @@ "ThisFieldIsNotValid.": "Questo campo non è valido.", "ThisFieldIsNotAValidEmailAddress.": "Questo campo non è un indirizzo e-mail valido.", "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Questo campo accetta solo file con le seguenti estensioni: {0}", - "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Questo campo deve essere un tipo stringa o matrice con una lunghezza massima di \"{0}\".", - "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Questo campo deve essere una stringa o un tipo di matrice con una lunghezza minima di \"{0}\".", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Questo campo deve essere un tipo stringa o matrice con una lunghezza massima di '{0}'.", + "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Questo campo deve essere una stringa o un tipo di matrice con una lunghezza minima di '{0}'.", "ThisFieldIsNotAValidPhoneNumber.": "Questo campo non è un numero di telefono valido.", "ThisFieldMustBeBetween{0}And{1}": "Questo campo deve essere compreso tra {0} e {1}.", - "ThisFieldMustMatchTheRegularExpression{0}": "Questo campo deve corrispondere all'espressione regolare \"{0}\".", + "ThisFieldMustMatchTheRegularExpression{0}": "Questo campo deve corrispondere all'espressione regolare '{0}'.", "ThisFieldIsRequired.": "Questo campo è obbligatorio.", "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Questo campo deve essere una stringa con una lunghezza massima di {0}.", "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Questo campo deve essere una stringa con una lunghezza minima di {1} e una lunghezza massima di {0}.", diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/it.json b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/it.json index 954ab19de0..ee0c21fa75 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/it.json +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/it.json @@ -2,6 +2,6 @@ "culture": "it", "texts": { "BirthDate": "Data di nascita", - "Value1": "Valore uno" + "Value1": "Valore Uno" } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/it.json b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/it.json index 4920b4a0e4..273f09f300 100644 --- a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/it.json +++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/it.json @@ -1,6 +1,6 @@ { "culture": "it", "texts": { - "Volo.Abp.Http.DynamicProxying:10001": "Eccezione aziendale con dati: {0}" + "Volo.Abp.Http.DynamicProxying:10001": "Business exception con dati: {0}" } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/it.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/it.json index 1279ed4fe7..ebdc2d622d 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/it.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/it.json @@ -2,6 +2,6 @@ "culture": "it", "texts": { "ThisFieldIsRequired": "Questo campo è obbligatorio", - "MaxLenghtErrorMessage": "Questo campo può contenere un massimo di caratteri \"{0}\"" + "MaxLenghtErrorMessage": "Questo campo può contenere un massimo di caratteri '{0}'" } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/hi.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/hi.json index 22573158a4..f0163a30ed 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/hi.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/hi.json @@ -1,7 +1,7 @@ { "culture": "hi", "texts": { - "Hello {0}.": "नमस्ते {0} ।", + "Hello {0}.": "नमस्ते {0} ।", "Car": "गाड़ी", "CarPlural": "कारों", "MaxLenghtErrorMessage": "इस क्षेत्र की लंबाई अधिकतम '{0}' वर्ण हो सकती है", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/it.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/it.json index 677afdd19e..c847d0181e 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/it.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/it.json @@ -1,10 +1,10 @@ { "culture": "it", "texts": { - "Hello {0}.": "Salve {0} .", + "Hello {0}.": "Salve {0}.", "Car": "Auto", "CarPlural": "Automobili", - "MaxLenghtErrorMessage": "La lunghezza di questo campo può essere al massimo di caratteri \"{0}\"", + "MaxLenghtErrorMessage": "La lunghezza di questo campo può essere al massimo di caratteri '{0}'", "Universe": "Universo", "FortyTwo": "Quarantadue" } diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/it.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/it.json index 8461d7037d..8b12bfcbd9 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/it.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/it.json @@ -28,7 +28,7 @@ "DisplayName:Email": "E-mail", "DisplayName:Name": "Nome", "DisplayName:Surname": "Cognome", - "DisplayName:Password": "Parola d'ordine", + "DisplayName:Password": "Password", "DisplayName:EmailAddress": "Indirizzo e-mail", "DisplayName:PhoneNumber": "Numero di telefono", "PersonalSettings": "Impostazioni personali", diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/it.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/it.json index c1dc6064de..5ebcb5176f 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/it.json +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/it.json @@ -4,8 +4,8 @@ "Menu:Blogs": "Blog", "Menu:BlogManagement": "Blogging", "Permission:Management": "Gestione", - "Permission:Edit": "modificare", - "Permission:Create": "Creare", + "Permission:Edit": "Modifica", + "Permission:Create": "Crea", "Permission:Delete": "Elimina", "Permission:Blogging": "Blog", "Permission:Blogs": "Blog", @@ -15,7 +15,7 @@ "Permission:ClearCache": "Cancella cache", "Title": "Titolo", "Delete": "Elimina", - "Reply": "rispondere", + "Reply": "Rispondi", "ReplyTo": "Rispondi a {0}", "ContinueReading": "Continua a leggere", "DaysAgo": "{0} giorni fa", @@ -26,7 +26,7 @@ "SecondsAgo": "{0} secondi fa", "HoursAgo": "{0} ore fa", "Now": "adesso", - "Content": "Soddisfare", + "Content": "Contenuto", "SeeAll": "Vedi tutto", "PopularTags": "Tag popolari", "WiewsWithCount": "{0} visualizzazioni", @@ -34,7 +34,7 @@ "LeaveComment": "Lascia un commento", "TagsInThisArticle": "Tag in questo articolo", "Posts": "Messaggi", - "Edit": "modificare", + "Edit": "Modifica", "BLOG": "BLOG", "CommentDeletionWarningMessage": "Il commento verrà eliminato.", "PostDeletionWarningMessage": "Il post verrà eliminato.", @@ -48,8 +48,8 @@ "CreateANewBlog": "Crea un nuovo blog", "WhatIsNew": "Cosa c'è di nuovo?", "Name": "Nome", - "ShortName": "Nome corto", - "CreationTime": "Tempo di creazione", + "ShortName": "Nome abbreviato", + "CreationTime": "Orario di creazione", "Description": "Descrizione", "Blogs": "Blog", "Tags": "Tag", diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210614072230_Initial.Designer.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210622142314_Initial.Designer.cs similarity index 96% rename from modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210614072230_Initial.Designer.cs rename to modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210622142314_Initial.Designer.cs index df5ded83e3..ec4a94873a 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210614072230_Initial.Designer.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210622142314_Initial.Designer.cs @@ -11,7 +11,7 @@ using Volo.CmsKit.EntityFrameworkCore; namespace Volo.CmsKit.Migrations { [DbContext(typeof(UnifiedDbContext))] - [Migration("20210614072230_Initial")] + [Migration("20210622142314_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -71,9 +71,7 @@ namespace Volo.CmsKit.Migrations .HasColumnName("CorrelationId"); b.Property("Exceptions") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("Exceptions"); + .HasColumnType("nvarchar(max)"); b.Property("ExecutionDuration") .HasColumnType("int") @@ -1458,7 +1456,7 @@ namespace Volo.CmsKit.Migrations b.ToTable("CmsMediaDescriptors"); }); - modelBuilder.Entity("Volo.CmsKit.Menus.Menu", b => + modelBuilder.Entity("Volo.CmsKit.Menus.MenuItem", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -1478,61 +1476,6 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("CreatorId"); - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("IsMainMenu") - .HasColumnType("bit"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .HasColumnType("nvarchar(max)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.ToTable("CmsMenus"); - }); - - modelBuilder.Entity("Volo.CmsKit.Menus.MenuItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - b.Property("CssClass") .HasColumnType("nvarchar(max)"); @@ -1544,6 +1487,10 @@ namespace Volo.CmsKit.Migrations b.Property("ElementId") .HasColumnType("nvarchar(max)"); + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + b.Property("Icon") .HasColumnType("nvarchar(max)"); @@ -1558,9 +1505,6 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("LastModifierId"); - b.Property("MenuId") - .HasColumnType("uniqueidentifier"); - b.Property("Order") .HasColumnType("int"); @@ -1573,6 +1517,10 @@ namespace Volo.CmsKit.Migrations b.Property("Target") .HasColumnType("nvarchar(max)"); + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + b.Property("Url") .IsRequired() .HasMaxLength(1024) @@ -1580,8 +1528,6 @@ namespace Volo.CmsKit.Migrations b.HasKey("Id"); - b.HasIndex("MenuId"); - b.ToTable("CmsMenuItems"); }); @@ -2039,15 +1985,6 @@ namespace Volo.CmsKit.Migrations b.Navigation("Author"); }); - modelBuilder.Entity("Volo.CmsKit.Menus.MenuItem", b => - { - b.HasOne("Volo.CmsKit.Menus.Menu", null) - .WithMany("Items") - .HasForeignKey("MenuId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => { b.Navigation("Actions"); @@ -2087,11 +2024,6 @@ namespace Volo.CmsKit.Migrations { b.Navigation("ConnectionStrings"); }); - - modelBuilder.Entity("Volo.CmsKit.Menus.Menu", b => - { - b.Navigation("Items"); - }); #pragma warning restore 612, 618 } } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210614072230_Initial.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210622142314_Initial.cs similarity index 97% rename from modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210614072230_Initial.cs rename to modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210622142314_Initial.cs index 55ba6e859f..eeb028c28f 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210614072230_Initial.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20210622142314_Initial.cs @@ -28,7 +28,7 @@ namespace Volo.CmsKit.Migrations BrowserInfo = table.Column(type: "nvarchar(512)", maxLength: 512, nullable: true), HttpMethod = table.Column(type: "nvarchar(16)", maxLength: 16, nullable: true), Url = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), - Exceptions = table.Column(type: "nvarchar(4000)", maxLength: 4000, nullable: true), + Exceptions = table.Column(type: "nvarchar(max)", nullable: true), Comments = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: true), HttpStatusCode = table.Column(type: "int", nullable: true), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), @@ -369,26 +369,31 @@ namespace Volo.CmsKit.Migrations }); migrationBuilder.CreateTable( - name: "CmsMenus", + name: "CmsMenuItems", columns: table => new { Id = table.Column(type: "uniqueidentifier", nullable: false), - Name = table.Column(type: "nvarchar(max)", nullable: true), - IsMainMenu = table.Column(type: "bit", nullable: false), + ParentId = table.Column(type: "uniqueidentifier", nullable: true), + DisplayName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + IsActive = table.Column(type: "bit", nullable: false), + Url = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: false), + Icon = table.Column(type: "nvarchar(max)", nullable: true), + Order = table.Column(type: "int", nullable: false), + Target = table.Column(type: "nvarchar(max)", nullable: true), + ElementId = table.Column(type: "nvarchar(max)", nullable: true), + CssClass = table.Column(type: "nvarchar(max)", nullable: true), + PageId = table.Column(type: "uniqueidentifier", nullable: true), TenantId = table.Column(type: "uniqueidentifier", nullable: true), ExtraProperties = table.Column(type: "nvarchar(max)", nullable: true), ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: true), CreationTime = table.Column(type: "datetime2", nullable: false), CreatorId = table.Column(type: "uniqueidentifier", nullable: true), LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true), - IsDeleted = table.Column(type: "bit", nullable: false, defaultValue: false), - DeleterId = table.Column(type: "uniqueidentifier", nullable: true), - DeletionTime = table.Column(type: "datetime2", nullable: true) + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true) }, constraints: table => { - table.PrimaryKey("PK_CmsMenus", x => x.Id); + table.PrimaryKey("PK_CmsMenuItems", x => x.Id); }); migrationBuilder.CreateTable( @@ -750,38 +755,6 @@ namespace Volo.CmsKit.Migrations onDelete: ReferentialAction.Cascade); }); - migrationBuilder.CreateTable( - name: "CmsMenuItems", - columns: table => new - { - Id = table.Column(type: "uniqueidentifier", nullable: false), - MenuId = table.Column(type: "uniqueidentifier", nullable: false), - ParentId = table.Column(type: "uniqueidentifier", nullable: true), - DisplayName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), - IsActive = table.Column(type: "bit", nullable: false), - Url = table.Column(type: "nvarchar(1024)", maxLength: 1024, nullable: false), - Icon = table.Column(type: "nvarchar(max)", nullable: true), - Order = table.Column(type: "int", nullable: false), - Target = table.Column(type: "nvarchar(max)", nullable: true), - ElementId = table.Column(type: "nvarchar(max)", nullable: true), - CssClass = table.Column(type: "nvarchar(max)", nullable: true), - PageId = table.Column(type: "uniqueidentifier", nullable: true), - CreationTime = table.Column(type: "datetime2", nullable: false), - CreatorId = table.Column(type: "uniqueidentifier", nullable: true), - LastModificationTime = table.Column(type: "datetime2", nullable: true), - LastModifierId = table.Column(type: "uniqueidentifier", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_CmsMenuItems", x => x.Id); - table.ForeignKey( - name: "FK_CmsMenuItems_CmsMenus_MenuId", - column: x => x.MenuId, - principalTable: "CmsMenus", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - migrationBuilder.CreateTable( name: "CmsBlogPosts", columns: table => new @@ -1026,11 +999,6 @@ namespace Volo.CmsKit.Migrations table: "CmsEntityTags", columns: new[] { "TenantId", "EntityId", "TagId" }); - migrationBuilder.CreateIndex( - name: "IX_CmsMenuItems_MenuId", - table: "CmsMenuItems", - column: "MenuId"); - migrationBuilder.CreateIndex( name: "IX_CmsPages_TenantId_Slug", table: "CmsPages", @@ -1174,9 +1142,6 @@ namespace Volo.CmsKit.Migrations migrationBuilder.DropTable( name: "CmsUsers"); - migrationBuilder.DropTable( - name: "CmsMenus"); - migrationBuilder.DropTable( name: "AbpAuditLogs"); } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs index 7fa1014d5b..79738889d3 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs @@ -69,9 +69,7 @@ namespace Volo.CmsKit.Migrations .HasColumnName("CorrelationId"); b.Property("Exceptions") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("Exceptions"); + .HasColumnType("nvarchar(max)"); b.Property("ExecutionDuration") .HasColumnType("int") @@ -1456,7 +1454,7 @@ namespace Volo.CmsKit.Migrations b.ToTable("CmsMediaDescriptors"); }); - modelBuilder.Entity("Volo.CmsKit.Menus.Menu", b => + modelBuilder.Entity("Volo.CmsKit.Menus.MenuItem", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -1476,61 +1474,6 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("CreatorId"); - b.Property("DeleterId") - .HasColumnType("uniqueidentifier") - .HasColumnName("DeleterId"); - - b.Property("DeletionTime") - .HasColumnType("datetime2") - .HasColumnName("DeletionTime"); - - b.Property("ExtraProperties") - .HasColumnType("nvarchar(max)") - .HasColumnName("ExtraProperties"); - - b.Property("IsDeleted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("IsDeleted"); - - b.Property("IsMainMenu") - .HasColumnType("bit"); - - b.Property("LastModificationTime") - .HasColumnType("datetime2") - .HasColumnName("LastModificationTime"); - - b.Property("LastModifierId") - .HasColumnType("uniqueidentifier") - .HasColumnName("LastModifierId"); - - b.Property("Name") - .HasColumnType("nvarchar(max)"); - - b.Property("TenantId") - .HasColumnType("uniqueidentifier") - .HasColumnName("TenantId"); - - b.HasKey("Id"); - - b.ToTable("CmsMenus"); - }); - - modelBuilder.Entity("Volo.CmsKit.Menus.MenuItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreationTime") - .HasColumnType("datetime2") - .HasColumnName("CreationTime"); - - b.Property("CreatorId") - .HasColumnType("uniqueidentifier") - .HasColumnName("CreatorId"); - b.Property("CssClass") .HasColumnType("nvarchar(max)"); @@ -1542,6 +1485,10 @@ namespace Volo.CmsKit.Migrations b.Property("ElementId") .HasColumnType("nvarchar(max)"); + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + b.Property("Icon") .HasColumnType("nvarchar(max)"); @@ -1556,9 +1503,6 @@ namespace Volo.CmsKit.Migrations .HasColumnType("uniqueidentifier") .HasColumnName("LastModifierId"); - b.Property("MenuId") - .HasColumnType("uniqueidentifier"); - b.Property("Order") .HasColumnType("int"); @@ -1571,6 +1515,10 @@ namespace Volo.CmsKit.Migrations b.Property("Target") .HasColumnType("nvarchar(max)"); + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + b.Property("Url") .IsRequired() .HasMaxLength(1024) @@ -1578,8 +1526,6 @@ namespace Volo.CmsKit.Migrations b.HasKey("Id"); - b.HasIndex("MenuId"); - b.ToTable("CmsMenuItems"); }); @@ -2037,15 +1983,6 @@ namespace Volo.CmsKit.Migrations b.Navigation("Author"); }); - modelBuilder.Entity("Volo.CmsKit.Menus.MenuItem", b => - { - b.HasOne("Volo.CmsKit.Menus.Menu", null) - .WithMany("Items") - .HasForeignKey("MenuId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => { b.Navigation("Actions"); @@ -2085,11 +2022,6 @@ namespace Volo.CmsKit.Migrations { b.Navigation("ConnectionStrings"); }); - - modelBuilder.Entity("Volo.CmsKit.Menus.Menu", b => - { - b.Navigation("Items"); - }); #pragma warning restore 612, 618 } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs deleted file mode 100644 index cd091fbec5..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuAdminAppService.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.CmsKit.Menus; - -namespace Volo.CmsKit.Admin.Menus -{ - public interface IMenuAdminAppService : IApplicationService - { - Task> GetListAsync(PagedAndSortedResultRequestDto input); - - Task GetAsync(Guid id); - - Task CreateAsync(MenuCreateInput input); - - Task UpdateAsync(Guid menuId, MenuUpdateInput input); - - Task DeleteAsync(Guid menuId); - - Task GetMenuItemAsync(Guid menuId, Guid menuItemId); - - Task CreateMenuItemAsync(Guid menuId, MenuItemCreateInput input); - - Task UpdateMenuItemAsync(Guid menuId, Guid menuItemId, MenuItemUpdateInput input); - - Task DeleteMenuItemAsync(Guid menuId, Guid menuItemId); - - Task MoveMenuItemAsync(Guid menuId, Guid menuItemId, MenuItemMoveInput input); - - Task UpdateMainMenuAsync(Guid menuId, UpdateMainMenuInput input); - - - Task> GetPageLookupAsync(PageLookupInputDto input); - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuItemAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuItemAdminAppService.cs new file mode 100644 index 0000000000..e36d4a5caf --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuItemAdminAppService.cs @@ -0,0 +1,25 @@ +using System; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.CmsKit.Menus; + +namespace Volo.CmsKit.Admin.Menus +{ + public interface IMenuItemAdminAppService : IApplicationService + { + Task> GetListAsync(); + + Task GetAsync(Guid id); + + Task CreateAsync(MenuItemCreateInput input); + + Task UpdateAsync(Guid id, MenuItemUpdateInput input); + + Task DeleteAsync(Guid id); + + Task MoveMenuItemAsync(Guid id, MenuItemMoveInput input); + + Task> GetPageLookupAsync(PageLookupInputDto input); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs index 6ee0fdd4eb..c57b689c95 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs @@ -6,8 +6,6 @@ namespace Volo.CmsKit.Admin.Menus [Serializable] public class MenuItemCreateInput { - public Guid MenuId { get; set; } - public Guid? ParentId { get; set; } [Required] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs index c4e29cf143..30ed1041a4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs @@ -43,7 +43,6 @@ namespace Volo.CmsKit.Admin CreateMap(); - CreateMap(); CreateMap(); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs deleted file mode 100644 index 582a8928de..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuAdminAppService.cs +++ /dev/null @@ -1,207 +0,0 @@ -using Microsoft.AspNetCore.Authorization; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Domain.Entities; -using Volo.Abp.GlobalFeatures; -using Volo.CmsKit.GlobalFeatures; -using Volo.CmsKit.Menus; -using Volo.CmsKit.Pages; -using Volo.CmsKit.Permissions; - -namespace Volo.CmsKit.Admin.Menus -{ - [RequiresGlobalFeature(typeof(MenuFeature))] - [Authorize(CmsKitAdminPermissions.Menus.Default)] - public class MenuAdminAppService : CmsKitAdminAppServiceBase, IMenuAdminAppService - { - protected MenuManager MenuManager { get; } - protected IMenuRepository MenuRepository { get; } - protected IPageRepository PageRepository { get; } - - public MenuAdminAppService( - MenuManager menuManager, - IMenuRepository menuRepository, - IPageRepository pageRepository) - { - MenuManager = menuManager; - MenuRepository = menuRepository; - PageRepository = pageRepository; - } - - public async Task> GetListAsync(PagedAndSortedResultRequestDto input) - { - var menus = await MenuRepository.GetPagedListAsync(input.SkipCount, input.MaxResultCount, input.Sorting); - - return new PagedResultDto( - await MenuRepository.GetCountAsync(), - ObjectMapper.Map, List>(menus) - ); - } - - public async Task GetAsync(Guid id) - { - var menu = await MenuRepository.GetAsync(id, includeDetails: true); - return ObjectMapper.Map(menu); - } - - public async Task GetSimpleAsync(Guid id) - { - var menu = await MenuRepository.GetAsync(id, includeDetails: false); - return ObjectMapper.Map(menu); - } - - [Authorize(CmsKitAdminPermissions.Menus.Create)] - public async Task CreateAsync(MenuCreateInput input) - { - var menu = await MenuManager.CreateAsync(CurrentTenant.Id, input.Name); - - await MenuRepository.InsertAsync(menu); - - return ObjectMapper.Map(menu); - } - - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public async Task UpdateAsync(Guid menuId, MenuUpdateInput input) - { - var menu = await MenuRepository.GetAsync(menuId); - - menu.SetName(input.Name); - - await MenuRepository.UpdateAsync(menu); - - return ObjectMapper.Map(menu); - } - - [Authorize(CmsKitAdminPermissions.Menus.Delete)] - public virtual Task DeleteAsync(Guid menuId) - { - return MenuRepository.DeleteAsync(menuId); - } - - public async Task GetMenuItemAsync(Guid menuId, Guid menuItemId) - { - var menu = await MenuRepository.GetAsync(menuId); - - var menuItem = menu.Items.FirstOrDefault(x => x.Id == menuItemId) - ?? throw new EntityNotFoundException(typeof(MenuItem), menuItemId); - - return ObjectMapper.Map(menuItem); - } - - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public virtual async Task CreateMenuItemAsync(Guid menuId, MenuItemCreateInput input) - { - var menu = await MenuRepository.GetAsync(menuId, includeDetails: true); - - var menuItem = - new MenuItem( - GuidGenerator.Create(), - menuId, - input.DisplayName, - input.Url.IsNullOrEmpty() ? "#" : input.Url, - input.IsActive, - input.ParentId, - input.Icon, - input.Order, - input.Target, - input.ElementId, - input.CssClass); - - if (input.PageId.HasValue) - { - var page = await PageRepository.GetAsync(input.PageId.Value); - MenuManager.SetPageUrl(menuItem, page); - } - - menu.Items.Add(menuItem); - - MenuManager.OrganizeTreeOrderForMenuItem(menu, menuItem); - - await MenuRepository.UpdateAsync(menu); - - return ObjectMapper.Map(menuItem); - } - - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public virtual async Task UpdateMenuItemAsync(Guid menuId, Guid menuItemId, - MenuItemUpdateInput input) - { - var menu = await MenuRepository.GetAsync(menuId, includeDetails: true); - - var menuItem = menu.Items.FirstOrDefault(x => x.Id == menuItemId) - ?? throw new EntityNotFoundException(typeof(MenuItem), menuItemId); - - if (input.PageId.HasValue) - { - MenuManager.SetPageUrl(menuItem, await PageRepository.GetAsync(input.PageId.Value)); - } - else - { - menuItem.SetUrl(input.Url); - } - - menuItem.SetDisplayName(input.DisplayName); - menuItem.IsActive = input.IsActive; - menuItem.Icon = input.Icon; - menuItem.Target = input.Target; - menuItem.ElementId = input.ElementId; - menuItem.CssClass = input.CssClass; - - await MenuRepository.UpdateAsync(menu); - - return ObjectMapper.Map(menuItem); - } - - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public virtual async Task DeleteMenuItemAsync(Guid menuId, Guid menuItemId) - { - var menu = await MenuRepository.GetAsync(menuId, includeDetails: true); - - var menuItem = menu.Items.FirstOrDefault(x => x.Id == menuItemId) - ?? throw new EntityNotFoundException(typeof(MenuItem), menuItemId); - - menu.Items.Remove(menuItem); - - await MenuRepository.UpdateAsync(menu); - } - - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public virtual Task MoveMenuItemAsync(Guid menuId, Guid menuItemId, MenuItemMoveInput input) - { - return MenuManager.MoveAsync(menuId, menuItemId, input.NewParentId, input.Position); - } - - public virtual async Task UpdateMainMenuAsync(Guid menuId, UpdateMainMenuInput input) - { - if (input.IsMainMenu) - { - await MenuManager.SetMainMenuAsync(menuId); - } - else - { - await MenuManager.UnSetMainMenuAsync(menuId); - } - } - - public virtual async Task> GetPageLookupAsync(PageLookupInputDto input) - { - var count = await PageRepository.GetCountAsync(input.Filter); - - var pages = await PageRepository.GetListAsync( - input.Filter, - input.MaxResultCount, - input.SkipCount, - input.Sorting - ); - - return new PagedResultDto( - count, - ObjectMapper.Map, List>(pages) - ); - } - } -} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs new file mode 100644 index 0000000000..32458ecb90 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs @@ -0,0 +1,125 @@ +using Microsoft.AspNetCore.Authorization; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Menus; +using Volo.CmsKit.Pages; +using Volo.CmsKit.Permissions; + +namespace Volo.CmsKit.Admin.Menus +{ + [RequiresGlobalFeature(typeof(MenuFeature))] + [Authorize(CmsKitAdminPermissions.Menus.Default)] + public class MenuItemAdminAppService : CmsKitAdminAppServiceBase, IMenuItemAdminAppService + { + protected MenuItemManager MenuManager { get; } + protected IMenuItemRepository MenuItemRepository { get; } + protected IPageRepository PageRepository { get; } + + public MenuItemAdminAppService( + MenuItemManager menuManager, + IMenuItemRepository menuRepository, + IPageRepository pageRepository) + { + MenuManager = menuManager; + MenuItemRepository = menuRepository; + PageRepository = pageRepository; + } + + public virtual async Task> GetListAsync() + { + var menuItems = await MenuItemRepository.GetListAsync(); + + return new ListResultDto( + ObjectMapper.Map, List>(menuItems) + ); + } + + public virtual async Task GetAsync(Guid id) + { + var menu = await MenuItemRepository.GetAsync(id); + return ObjectMapper.Map(menu); + } + + [Authorize(CmsKitAdminPermissions.Menus.Create)] + public virtual async Task CreateAsync(MenuItemCreateInput input) + { + var menuItem = new MenuItem( + GuidGenerator.Create(), + input.DisplayName, + input.Url.IsNullOrEmpty() ? "#" : input.Url, + input.IsActive, + input.ParentId, + input.Icon, + input.Order, + input.Target, + input.ElementId, + input.CssClass + ); + + await MenuItemRepository.InsertAsync(menuItem); + + return ObjectMapper.Map(menuItem); + } + + [Authorize(CmsKitAdminPermissions.Menus.Update)] + public virtual async Task UpdateAsync(Guid id, MenuItemUpdateInput input) + { + var menuItem = await MenuItemRepository.GetAsync(id); + + if (input.PageId.HasValue) + { + MenuManager.SetPageUrl(menuItem, await PageRepository.GetAsync(input.PageId.Value)); + } + else + { + menuItem.SetUrl(input.Url); + } + + menuItem.SetDisplayName(input.DisplayName); + menuItem.IsActive = input.IsActive; + menuItem.Icon = input.Icon; + menuItem.Target = input.Target; + menuItem.ElementId = input.ElementId; + menuItem.CssClass = input.CssClass; + + await MenuItemRepository.UpdateAsync(menuItem); + + return ObjectMapper.Map(menuItem); + } + + [Authorize(CmsKitAdminPermissions.Menus.Delete)] + public virtual Task DeleteAsync(Guid id) + { + return MenuItemRepository.DeleteAsync(id); + } + + [Authorize(CmsKitAdminPermissions.Menus.Update)] + public virtual Task MoveMenuItemAsync(Guid id, MenuItemMoveInput input) + { + return MenuManager.MoveAsync(id, input.NewParentId, input.Position); + } + + public virtual async Task> GetPageLookupAsync(PageLookupInputDto input) + { + var count = await PageRepository.GetCountAsync(input.Filter); + + var pages = await PageRepository.GetListAsync( + input.Filter, + input.MaxResultCount, + input.SkipCount, + input.Sorting + ); + + return new PagedResultDto( + count, + ObjectMapper.Map, List>(pages) + ); + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs deleted file mode 100644 index 4b73521f86..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs +++ /dev/null @@ -1,123 +0,0 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.GlobalFeatures; -using Volo.Abp.UI.Navigation; -using Volo.CmsKit.GlobalFeatures; -using Volo.CmsKit.Menus; -using Volo.CmsKit.Permissions; - -namespace Volo.CmsKit.Admin.Menus -{ - [RequiresGlobalFeature(typeof(MenuFeature))] - [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] - [Area("cms-kit")] - [Authorize(CmsKitAdminPermissions.Menus.Default)] - [Route("api/cms-kit-admin/menus")] - public class MenuAdminController : CmsKitAdminController, IMenuAdminAppService - { - protected IMenuAdminAppService MenuAdminAppService { get; } - - public MenuAdminController(IMenuAdminAppService menuAdminAppService) - { - MenuAdminAppService = menuAdminAppService; - } - - [HttpPost] - [Authorize(CmsKitAdminPermissions.Menus.Create)] - public Task CreateAsync(MenuCreateInput input) - { - return MenuAdminAppService.CreateAsync(input); - } - - [Route("{menuId}/menu-items/{menuItemId}")] - [Authorize(CmsKitAdminPermissions.Menus.Update)] - [HttpGet] - public Task GetMenuItemAsync(Guid menuId, Guid menuItemId) - { - return MenuAdminAppService.GetMenuItemAsync(menuId, menuItemId); - } - - [Route("{menuId}/menu-items")] - [HttpPost] - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public Task CreateMenuItemAsync(Guid menuId, MenuItemCreateInput input) - { - return MenuAdminAppService.CreateMenuItemAsync(menuId, input); - } - - [Route("{menuId}")] - [HttpDelete] - [Authorize(CmsKitAdminPermissions.Menus.Delete)] - public Task DeleteAsync(Guid menuId) - { - return MenuAdminAppService.DeleteAsync(menuId); - } - - [Route("{menuId}/menu-items/{menuItemId}")] - [HttpDelete] - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public Task DeleteMenuItemAsync(Guid menuId, Guid menuItemId) - { - return MenuAdminAppService.DeleteMenuItemAsync(menuId, menuItemId); - } - - [Route("{menuId}")] - [HttpGet] - public Task GetAsync(Guid menuId) - { - return MenuAdminAppService.GetAsync(menuId); - } - - [HttpGet] - public Task> GetListAsync(PagedAndSortedResultRequestDto input) - { - return MenuAdminAppService.GetListAsync(input); - } - - [Route("{menuId}/menu-items/{menuItemId}/move")] - [HttpPut] - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public Task MoveMenuItemAsync(Guid menuId, Guid menuItemId, MenuItemMoveInput input) - { - return MenuAdminAppService.MoveMenuItemAsync(menuId, menuItemId, input); - } - - [Route("{menuId}/main-menu")] - [HttpPut] - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public Task UpdateMainMenuAsync(Guid menuId, UpdateMainMenuInput input) - { - return MenuAdminAppService.UpdateMainMenuAsync(menuId, input); - } - - [Route("{menuId}")] - [HttpPut] - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public Task UpdateAsync(Guid menuId, MenuUpdateInput input) - { - return MenuAdminAppService.UpdateAsync(menuId, input); - } - - [Route("{menuId}/menu-items/{menuItemId}")] - [HttpPut] - [Authorize(CmsKitAdminPermissions.Menus.Update)] - public Task UpdateMenuItemAsync(Guid menuId, Guid menuItemId, MenuItemUpdateInput input) - { - return MenuAdminAppService.UpdateMenuItemAsync(menuId, menuItemId, input); - } - - [HttpGet] - [Route("lookup/pages")] - public virtual Task> GetPageLookupAsync([FromQuery]PageLookupInputDto input) - { - return MenuAdminAppService.GetPageLookupAsync(input); - } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuItemAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuItemAdminController.cs new file mode 100644 index 0000000000..9225bb63e4 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuItemAdminController.cs @@ -0,0 +1,79 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Menus; +using Volo.CmsKit.Permissions; + +namespace Volo.CmsKit.Admin.Menus +{ + [RequiresGlobalFeature(typeof(MenuFeature))] + [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] + [Area("cms-kit")] + [Authorize(CmsKitAdminPermissions.Menus.Default)] + [Route("api/cms-kit-admin/menu-items")] + public class MenuItemAdminController : CmsKitAdminController, IMenuItemAdminAppService + { + protected IMenuItemAdminAppService MenuItemAdminAppService { get; } + + public MenuItemAdminController(IMenuItemAdminAppService menuAdminAppService) + { + MenuItemAdminAppService = menuAdminAppService; + } + + [HttpGet] + public virtual Task> GetListAsync() + { + return MenuItemAdminAppService.GetListAsync(); + } + + [HttpGet] + [Route("{id}")] + public virtual Task GetAsync(Guid id) + { + return MenuItemAdminAppService.GetAsync(id); + } + + [HttpPost] + [Authorize(CmsKitAdminPermissions.Menus.Create)] + public virtual Task CreateAsync(MenuItemCreateInput input) + { + return MenuItemAdminAppService.CreateAsync(input); + } + + [HttpPut] + [Route("{id}")] + [Authorize(CmsKitAdminPermissions.Menus.Update)] + public virtual Task UpdateAsync(Guid id, MenuItemUpdateInput input) + { + return MenuItemAdminAppService.UpdateAsync(id, input); + } + + [HttpDelete] + [Route("{id}")] + [Authorize(CmsKitAdminPermissions.Menus.Delete)] + public virtual Task DeleteAsync(Guid id) + { + return MenuItemAdminAppService.DeleteAsync(id); + } + + [HttpPut] + [Route("{id}/move")] + [Authorize(CmsKitAdminPermissions.Menus.Update)] + public virtual Task MoveMenuItemAsync(Guid id, MenuItemMoveInput input) + { + return MenuItemAdminAppService.MoveMenuItemAsync(id, input); + } + + [HttpGet] + [Route("lookup/pages")] + public virtual Task> GetPageLookupAsync(PageLookupInputDto input) + { + return MenuItemAdminAppService.GetPageLookupAsync(input); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs index 920e35f414..40e852f42d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs @@ -70,8 +70,8 @@ namespace Volo.CmsKit.Admin.Web options.Conventions.AuthorizeFolder("/CmsKit/Comments/", CmsKitAdminPermissions.Comments.Default); options.Conventions.AuthorizeFolder("/CmsKit/Comments/Details", CmsKitAdminPermissions.Comments.Default); options.Conventions.AuthorizeFolder("/CmsKit/Menus", CmsKitAdminPermissions.Menus.Default); - options.Conventions.AuthorizePage("/CmsKit/Menus/CreateModal", CmsKitAdminPermissions.Menus.Create); - options.Conventions.AuthorizePage("/CmsKit/Menus/UpdateModal", CmsKitAdminPermissions.Menus.Update); + options.Conventions.AuthorizePage("/CmsKit/Menus/MenuItems/CreateModal", CmsKitAdminPermissions.Menus.Create); + options.Conventions.AuthorizePage("/CmsKit/Menus/MenuItems/UpdateModal", CmsKitAdminPermissions.Menus.Update); options.Conventions.AuthorizeFolder("/CmsKit/Menus/MenuItems", CmsKitAdminPermissions.Menus.Update); }); @@ -87,8 +87,7 @@ namespace Volo.CmsKit.Admin.Web options.Conventions.AddPageRoute("/CmsKit/BlogPosts/Update", "/Cms/BlogPosts/Update/{Id}"); options.Conventions.AddPageRoute("/CmsKit/Comments/Index", "/Cms/Comments"); options.Conventions.AddPageRoute("/CmsKit/Comments/Details", "/Cms/Comments/{Id}"); - options.Conventions.AddPageRoute("/CmsKit/Menus/Index", "/Cms/Menus"); - options.Conventions.AddPageRoute("/CmsKit/Menus/MenuItems/Index", "/Cms/Menus/{Id}/menu-items"); + options.Conventions.AddPageRoute("/CmsKit/Menus/MenuItems/Index", "/Cms/Menus/Items"); }); Configure(options => @@ -141,18 +140,6 @@ namespace Volo.CmsKit.Admin.Web ); }); - options.Configure( - toolbar => - { - toolbar.AddButton( - LocalizableString.Create("NewMenu"), - icon: "plus", - name: "CreateMenu", - id: "CreateMenu", - requiredPolicyName: CmsKitAdminPermissions.Menus.Create - ); - }); - options.Configure( toolbar => { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/CmsKitAdminMenuContributor.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/CmsKitAdminMenuContributor.cs index 866123b8cd..43d4b823d0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/CmsKitAdminMenuContributor.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/CmsKitAdminMenuContributor.cs @@ -74,8 +74,8 @@ namespace Volo.CmsKit.Admin.Web.Menus cmsMenus.Add(new ApplicationMenuItem( CmsKitAdminMenus.Menus.MenusMenu, l["Menus"], - "/Cms/Menus", - "fa fa-bars") + "/Cms/Menus/Items", + "fa fa-stream") .RequireGlobalFeatures(typeof(MenuFeature)) .RequirePermissions(CmsKitAdminPermissions.Menus.Default)); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/CreateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/CreateModal.cshtml deleted file mode 100644 index 3b4d361b31..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/CreateModal.cshtml +++ /dev/null @@ -1,23 +0,0 @@ -@page - -@using Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus -@using Volo.CmsKit.Admin.Web.Pages -@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal - -@inherits CmsKitAdminPageBase - -@model CreateModalModel - -@{ - Layout = null; -} - - - - - - - - - - \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/CreateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/CreateModal.cshtml.cs deleted file mode 100644 index b061da390f..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/CreateModal.cshtml.cs +++ /dev/null @@ -1,44 +0,0 @@ -using AutoMapper; -using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.Abp.Validation; -using Volo.CmsKit.Admin.Menus; -using Volo.CmsKit.Menus; - -namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus -{ - public class CreateModalModel : CmsKitAdminPageModel - { - protected IMenuAdminAppService MenuAdminAppService { get; } - - [BindProperty] - public CreateMenuViewModel ViewModel { get; set; } - - public CreateModalModel(IMenuAdminAppService menuAdminAppService) - { - MenuAdminAppService = menuAdminAppService; - } - - public async Task OnPostAsync() - { - var input = ObjectMapper.Map(ViewModel); - - await MenuAdminAppService.CreateAsync(input); - - return NoContent(); - } - - [AutoMap(typeof(MenuCreateInput), ReverseMap = true)] - public class CreateMenuViewModel - { - [Required] - [DynamicMaxLength(typeof(MenuConsts), nameof(MenuConsts.MaxNameLength))] - public string Name { get; set; } - } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/Index.cshtml deleted file mode 100644 index b7fb652f2c..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/Index.cshtml +++ /dev/null @@ -1,34 +0,0 @@ -@page - -@using Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus -@using Volo.CmsKit.Admin.Web.Pages -@using Volo.CmsKit.Admin.Web.Menus -@using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Pages.Shared.Components.AbpPageToolbar - -@inherits CmsKitAdminPageBase - -@model IndexModel - -@{ - PageLayout.Content.Title = L["Menus"].Value; - PageLayout.Content.BreadCrumb.Add(L["Menu:CMS"].Value); - PageLayout.Content.MenuItemName = CmsKitAdminMenus.Menus.MenusMenu; -} - -@section scripts { - - - -} - -@section content_toolbar { - @await Component.InvokeAsync(typeof(AbpPageToolbarViewComponent), new { pageName = typeof(IndexModel).FullName }) -} - -
- - - - - -
\ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/Index.cshtml.cs deleted file mode 100644 index e03f3f6f91..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/Index.cshtml.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus -{ - public class IndexModel - { - - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml index 4d24c4b7fb..62d3504933 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml @@ -34,7 +34,6 @@
- diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs index 15d80ecf65..063c35638c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs @@ -13,20 +13,19 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems { public class CreateModalModel : CmsKitAdminPageModel { - protected IMenuAdminAppService MenuAdminAppService { get; } + protected IMenuItemAdminAppService MenuAdminAppService { get; } [BindProperty] public MenuItemCreateViewModel ViewModel { get; set; } - public CreateModalModel(IMenuAdminAppService menuAdminAppService) + public CreateModalModel(IMenuItemAdminAppService menuAdminAppService) { MenuAdminAppService = menuAdminAppService; ViewModel = new MenuItemCreateViewModel(); } - public virtual Task OnGetAsync(Guid menuId, Guid? parentId) + public virtual Task OnGetAsync(Guid? parentId) { - ViewModel.MenuId = menuId; ViewModel.ParentId = parentId; return Task.CompletedTask; @@ -36,7 +35,7 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems { var input = ObjectMapper.Map(ViewModel); - var dto = await MenuAdminAppService.CreateMenuItemAsync(ViewModel.MenuId, input); + var dto = await MenuAdminAppService.CreateAsync(input); return new OkObjectResult(dto); } @@ -44,9 +43,6 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems [AutoMap(typeof(MenuItemCreateInput), ReverseMap = true)] public class MenuItemCreateViewModel { - [HiddenInput] - public Guid MenuId { get; set; } - [HiddenInput] public Guid? ParentId { get; set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml index 8203c2a383..e21b2693da 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml @@ -11,9 +11,8 @@ @model IndexModel @{ - PageLayout.Content.Title = @Model.Menu.Name + " - " + L["MenuItems"].Value; + PageLayout.Content.Title = L["MenuItems"].Value; PageLayout.Content.BreadCrumb.Add(L["Menu:CMS"].Value); - PageLayout.Content.BreadCrumb.Add(L["Menus"].Value, "/Cms/Menus"); PageLayout.Content.MenuItemName = CmsKitAdminMenus.Menus.MenusMenu; } @@ -37,11 +36,11 @@ @await Component.InvokeAsync(typeof(AbpPageToolbarViewComponent), new {pageName = typeof(IndexModel).FullName}) } -
+
- @Model.Menu.Name + @L["MenuItems"].Value diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml.cs index 6f45ab7822..380d88a945 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/Index.cshtml.cs @@ -11,21 +11,5 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems { public class IndexModel : CmsKitAdminPageModel { - protected IMenuAdminAppService MenuAdminAppService { get; } - - [BindProperty(SupportsGet = true)] - public Guid Id { get; set; } - - public MenuWithDetailsDto Menu { get; protected set; } - - public IndexModel(IMenuAdminAppService menuAdminAppService) - { - MenuAdminAppService = menuAdminAppService; - } - - public async Task OnGetAsync() - { - Menu = await MenuAdminAppService.GetAsync(Id); - } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml index 8709c0a481..e556e72f1f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml @@ -16,7 +16,6 @@ - diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs index 20d116967e..a696c6bef1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs @@ -11,27 +11,23 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems { public class UpdateModalModel : CmsKitAdminPageModel { - protected IMenuAdminAppService MenuAdminAppService { get; } + protected IMenuItemAdminAppService MenuAdminAppService { get; } [BindProperty] public MenuItemUpdateViewModel ViewModel { get; set; } - [HiddenInput] - [BindProperty(SupportsGet = true)] - public Guid MenuId { get; set; } - [HiddenInput] [BindProperty(SupportsGet = true)] public Guid Id { get; set; } - public UpdateModalModel(IMenuAdminAppService menuAdminAppService) + public UpdateModalModel(IMenuItemAdminAppService menuAdminAppService) { MenuAdminAppService = menuAdminAppService; } public async Task OnGetAsync() { - var menuItemDto = await MenuAdminAppService.GetMenuItemAsync(MenuId, Id); + var menuItemDto = await MenuAdminAppService.GetAsync(Id); ViewModel = ObjectMapper.Map(menuItemDto); } @@ -40,7 +36,7 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems { var input = ObjectMapper.Map(ViewModel); - var result = await MenuAdminAppService.UpdateMenuItemAsync(MenuId, Id, input); + var result = await MenuAdminAppService.UpdateAsync(Id, input); return new OkObjectResult(result); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js index a0db03cf52..41e37a0118 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js @@ -28,7 +28,7 @@ $(function () { }) function initSelectPageId() { - $pageId.data('autocompleteApiUrl', '/api/cms-kit-admin/menus/lookup/pages'); + $pageId.data('autocompleteApiUrl', '/api/cms-kit-admin/menu-items/lookup/pages'); $pageId.data('autocompleteDisplayProperty', 'title'); $pageId.data('autocompleteValueProperty', 'id'); $pageId.data('autocompleteItemsProperty', 'items'); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js index fdfc717167..4a85ac7c8a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/index.js @@ -2,9 +2,7 @@ $(function () { var l = abp.localization.getResource("CmsKit"); - var menuId = $('#CmsKitMenuItemsWrapper').data('menu-id'); - - var menuService = volo.cmsKit.admin.menus.menuAdmin; + var menuService = volo.cmsKit.admin.menus.menuItemAdmin; var createModal = new abp.ModalManager({ viewUrl: abp.appPath + 'CmsKit/Menus/MenuItems/CreateModal', modalClass: 'createMenuItem' }); var updateModal = new abp.ModalManager({ viewUrl: abp.appPath + 'CmsKit/Menus/MenuItems/UpdateModal', modalClass: 'updateMenuItem'}); @@ -96,8 +94,7 @@ $(function () { var instance = $.jstree.reference(data.reference); updateModal.open({ - id: node.id, - menuId: menuId + id: node.id }) } }, @@ -124,7 +121,7 @@ $(function () { function (isConfirmed) { if (isConfirmed) { menuService - .deleteMenuItem(menuId, node.id) + .delete(node.id) .done(function () { instance.delete_node(node); menuTree.refreshItemCount(); @@ -147,7 +144,6 @@ $(function () { var instance = $.jstree.reference(menuTree.$tree); createModal.open({ - menuId: menuId, parentId: parentId, }, function (newMenuItem) { instance.create_node( @@ -182,7 +178,7 @@ $(function () { }, getTreeDataFromServer: function (callback) { - menuService.get(menuId).done(function (result) { + menuService.getList().done(function (result) { var treeData = _.map(result.items, function (item) { return { id: item.id, @@ -233,7 +229,7 @@ $(function () { function (isConfirmed) { if (isConfirmed) { menuService - .moveMenuItem(menuId, data.node.id, { + .moveMenuItem(data.node.id, { newParentId: data.parent === '#' ? null : data.parent, position: data.position }) @@ -285,7 +281,7 @@ $(function () { $('button[name=CreateMenuItem]').click(function (e) { e.preventDefault(); - createModal.open({menuId: menuId}); + createModal.open(); }); createModal.onResult(function () { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js index 6cbe242123..e219763fc0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js @@ -29,7 +29,7 @@ $(function () { }); function initSelectPageId() { - $pageId.data('autocompleteApiUrl', '/api/cms-kit-admin/menus/lookup/pages'); + $pageId.data('autocompleteApiUrl', '/api/cms-kit-admin/menu-items/lookup/pages'); $pageId.data('autocompleteDisplayProperty', 'title'); $pageId.data('autocompleteValueProperty', 'id'); $pageId.data('autocompleteItemsProperty', 'items'); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/UpdateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/UpdateModal.cshtml deleted file mode 100644 index 855f12f21d..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/UpdateModal.cshtml +++ /dev/null @@ -1,23 +0,0 @@ -@page -@using Volo.CmsKit.Admin.Web.Pages -@using Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus -@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal - -@inherits CmsKitAdminPageBase - -@model UpdateModalModel - -@{ - Layout = null; -} - - - - - - - - - - - \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/UpdateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/UpdateModal.cshtml.cs deleted file mode 100644 index 8310e44e1d..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/UpdateModal.cshtml.cs +++ /dev/null @@ -1,53 +0,0 @@ -using AutoMapper; -using Microsoft.AspNetCore.Mvc; -using System; -using System.ComponentModel.DataAnnotations; -using System.Threading.Tasks; -using Volo.Abp.Validation; -using Volo.CmsKit.Admin.Menus; -using Volo.CmsKit.Menus; - -namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus -{ - public class UpdateModalModel : CmsKitAdminPageModel - { - protected IMenuAdminAppService MenuAdminAppService { get; } - - [HiddenInput] - [BindProperty(SupportsGet = true)] - public Guid Id { get; set; } - - [BindProperty] - public UpdateMenuViewModel ViewModel { get; set; } - - public UpdateModalModel(IMenuAdminAppService menuAdminAppService) - { - MenuAdminAppService = menuAdminAppService; - } - - public async Task OnGetAsync() - { - var menu = await MenuAdminAppService.GetAsync(Id); - - ViewModel = ObjectMapper.Map(menu); - } - - public async Task OnPostAsync() - { - var input = ObjectMapper.Map(ViewModel); - - await MenuAdminAppService.UpdateAsync(Id, input); - - return NoContent(); - } - - [AutoMap(typeof(MenuWithDetailsDto))] - [AutoMap(typeof(MenuUpdateInput), ReverseMap = true)] - public class UpdateMenuViewModel - { - [Required] - [DynamicMaxLength(typeof(MenuConsts), nameof(MenuConsts.MaxNameLength))] - public string Name { get; set; } - } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/createModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/createModal.js deleted file mode 100644 index 5f282702bb..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/createModal.js +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/index.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/index.js deleted file mode 100644 index 7b4e6d7556..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/index.js +++ /dev/null @@ -1,118 +0,0 @@ -$(function () { - var l = abp.localization.getResource("CmsKit"); - - var createModal = new abp.ModalManager(abp.appPath + "CmsKit/Menus/CreateModal"); - var updateModal = new abp.ModalManager(abp.appPath + "CmsKit/Menus/UpdateModal"); - - var menusService = volo.cmsKit.admin.menus.menuAdmin; - - var dataTable = $("#MenusTable").DataTable(abp.libs.datatables.normalizeConfiguration({ - processing: true, - serverSide: true, - paging: true, - searching: false, - scrollCollapse: true, - scrollX: true, - ordering: true, - order: [[1, "desc"]], - ajax: abp.libs.datatables.createAjax(menusService.getList), - columnDefs: [ - { - title: l("Details"), - targets: 0, - rowAction: { - items: [ - { - text: l('MenuItems'), - visible: abp.auth.isGranted('CmsKit.Menus.Update'), - action: function (data) { - location.href = "/Cms/Menus/" + data.record.id + "/menu-items" - } - }, - { - text: l('MakeMainMenu'), - visible: function (data) { - return abp.auth.isGranted('CmsKit.Menus.Update') && !data.isMainMenu - }, - action: function (data) { - menusService - .updateMainMenu(data.record.id, {isMainMenu: true}) - .then(function () { - dataTable.ajax.reload(); - }); - } - }, - { - text: l('UnMakeMainMenu'), - visible: function (data) { - return abp.auth.isGranted('CmsKit.Menus.Update') && data.isMainMenu - }, - action: function (data) { - menusService - .updateMainMenu(data.record.id, {isMainMenu: false}) - .then(function () { - dataTable.ajax.reload(); - }); - } - }, - { - text: l('Edit'), - visible: abp.auth.isGranted('CmsKit.Menus.Update'), - action: function (data) { - updateModal.open({id: data.record.id}); - } - }, - { - text: l('Delete'), - visible: abp.auth.isGranted('CmsKit.Menus.Delete'), - confirmMessage: function (data) { - return l("MenuDeletionConfirmationMessage", data.record.name) - }, - action: function (data) { - menusService - .delete(data.record.id) - .then(function () { - dataTable.ajax.reload(); - }); - } - } - ] - } - }, - { - title: l("Name"), - orderable: true, - data: "name", - render: function (data, val, record) { - - if (record.isMainMenu) { - return ( - data - + - '' - + - l("MainMenu") - + - '' - ); - } else { - return data; - } - } - } - ] - })); - - $('#AbpContentToolbar button[name=CreateMenu]').on('click', function (e) { - e.preventDefault(); - createModal.open(); - }); - - createModal.onResult(function () { - dataTable.ajax.reload(); - }); - - updateModal.onResult(function () { - dataTable.ajax.reload(); - }); -}); \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/updateModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/updateModal.js deleted file mode 100644 index 5f282702bb..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/updateModal.js +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs index 633b9af1a4..374229ab48 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuItemDto.cs @@ -7,7 +7,6 @@ namespace Volo.CmsKit.Menus [Serializable] public class MenuItemDto : AuditedEntityDto { - public Guid MenuId { get; set; } public Guid? ParentId { get; set; } public string DisplayName { get; set; } public bool IsActive { get; set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs deleted file mode 100644 index 5a28bb22e6..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Menus/MenuWithDetailsDto.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; - -namespace Volo.CmsKit.Menus -{ - [Serializable] - public class MenuWithDetailsDto : FullAuditedEntityDto - { - public string Name { get; set; } - - - public bool IsMainMenu { get; set; } - - public List Items { get; set; } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuChangedHandler.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuChangedHandler.cs index 1bef58fd9d..a0c55ca641 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuChangedHandler.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Menus/MenuChangedHandler.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Caching; using Volo.Abp.DependencyInjection; @@ -7,23 +8,29 @@ using Volo.Abp.EventBus; namespace Volo.CmsKit.Menus { public class MenuChangedHandler : - ILocalEventHandler>, - ILocalEventHandler>, + ILocalEventHandler>, + ILocalEventHandler>, + ILocalEventHandler>, ITransientDependency { - protected IDistributedCache DistributedCache { get; } + protected IDistributedCache> DistributedCache { get; } - public MenuChangedHandler(IDistributedCache distributedCache) + public MenuChangedHandler(IDistributedCache> distributedCache) { DistributedCache = distributedCache; } - public Task HandleEventAsync(EntityUpdatedEventData eventData) + public Task HandleEventAsync(EntityUpdatedEventData eventData) { return DistributedCache.RemoveAsync(MenuApplicationConsts.MainMenuCacheKey); } - public Task HandleEventAsync(EntityDeletedEventData eventData) + public Task HandleEventAsync(EntityDeletedEventData eventData) + { + return DistributedCache.RemoveAsync(MenuApplicationConsts.MainMenuCacheKey); + } + + public Task HandleEventAsync(EntityCreatedEventData eventData) { return DistributedCache.RemoveAsync(MenuApplicationConsts.MainMenuCacheKey); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fi.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fi.json index 18d0dd18a4..0ea0ccdbec 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fi.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fi.json @@ -7,7 +7,7 @@ "BlogPostDeletionConfirmationMessage": "Blogiviesti {0} poistetaan. Oletko varma?", "BlogPosts": "Blogiviestit", "Blogs": "Blogit", - "ChoosePreference": "Valitse asetus ...", + "ChoosePreference": "Valitse asetus...", "Cms": "Cms", "CmsKit.Comments": "Kommentit", "CmsKit.Ratings": "Arviot", @@ -52,14 +52,14 @@ "Menu:CMS": "CMS", "Message": "Viesti", "MessageDeletionConfirmationMessage": "Tämä kommentti poistetaan kokonaan.", - "NewPage": "Uusi sivu", "NewBlog": "Uusi blogi", "NewBlogPost": "Uusi blogiviesti", + "NewPage": "Uusi sivu", "NewTag": "Uusi tunniste", "OK": "OK", "PageDeletionConfirmationMessage": "Haluatko varmasti poistaa tämän sivun?", "Pages": "Sivut", - "PageSlugInformation": "Etanaa käytetään URL-osoitteessa. URL-osoitteesi on '/ pages / {{slug}}.", + "PageSlugInformation": "Etanaa käytetään URL-osoitteessa. URL-osoitteesi on '/pages/{{slug}}'.", "Permission:BlogManagement": "Blogin hallinta", "Permission:BlogManagement.Create": "Luoda", "Permission:BlogManagement.Delete": "Poistaa", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json index a95cd21389..98e277cb7b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json @@ -7,7 +7,7 @@ "BlogPostDeletionConfirmationMessage": "L'article de blog \"{0}\" sera supprimé. Êtes-vous sûr?", "BlogPosts": "Articles de blog", "Blogs": "Blogs", - "ChoosePreference": "Choisissez la préférence ...", + "ChoosePreference": "Choisissez la préférence...", "Cms": "Cms", "CmsKit.Comments": "commentaires", "CmsKit.Ratings": "Évaluations", @@ -52,14 +52,14 @@ "Menu:CMS": "CMS", "Message": "Message", "MessageDeletionConfirmationMessage": "Ce commentaire sera complètement supprimé.", - "NewPage": "Nouvelle page", "NewBlog": "Nouveau Blog", "NewBlogPost": "Nouveau billet de blog", + "NewPage": "Nouvelle page", "NewTag": "Nouveau tag", "OK": "d'accord", "PageDeletionConfirmationMessage": "Êtes-vous sûr de vouloir supprimer cette page?", "Pages": "Pages", - "PageSlugInformation": "Slug est utilisé sur l'url. Votre URL sera \"/ pages / {{slug}}\".", + "PageSlugInformation": "Slug est utilisé sur l'url. Votre URL sera '/pages/{{slug}}'.", "Permission:BlogManagement": "Gestion de blog", "Permission:BlogManagement.Create": "Créer", "Permission:BlogManagement.Delete": "Effacer", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hi.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hi.json index 86390d433b..b065a7d240 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hi.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hi.json @@ -7,7 +7,7 @@ "BlogPostDeletionConfirmationMessage": "ब्लॉग पोस्ट '{0}' हटा दी जाएगी। क्या आपको यकीन है?", "BlogPosts": "वेबदैनिकी डाक", "Blogs": "ब्लॉग", - "ChoosePreference": "पसंद चुनें ...", + "ChoosePreference": "पसंद चुनें...", "Cms": "मुख्यमंत्रियों", "CmsKit.Comments": "टिप्पणियाँ", "CmsKit.Ratings": "रेटिंग्स", @@ -45,6 +45,7 @@ "Features": "विशेषताएं", "GenericDeletionConfirmationMessage": "क्या आप '{0}' को हटाना सुनिश्चित कर रहे हैं?", "LastModification": "आखरी बदलाव", + "LastModificationTime": "अंतिम संशोधन समय", "LoginToAddComment": "टिप्पणी जोड़ने के लिए लॉगिन करें", "LoginToRate": "दर करने के लिए लॉगिन करें", "LoginToReact": "प्रतिक्रिया करने के लिए लॉगिन करें", @@ -52,14 +53,14 @@ "Menu:CMS": "मुख्यमंत्रियों", "Message": "संदेश", "MessageDeletionConfirmationMessage": "यह टिप्पणी पूरी तरह से हटा दी जाएगी।", - "NewPage": "नया पृष्ठ", "NewBlog": "नया ब्लॉग", "NewBlogPost": "नई ब्लॉग पोस्ट", + "NewPage": "नया पृष्ठ", "NewTag": "नया टैग", "OK": "ठीक है", "PageDeletionConfirmationMessage": "क्या आप इस पृष्ठ को हटाना सुनिश्चित कर रहे हैं?", "Pages": "पृष्ठों", - "PageSlugInformation": "स्लग का उपयोग url पर किया जाता है। आपका url '/ Pages / {{slug}}' होगा।", + "PageSlugInformation": "स्लग का उपयोग url पर किया जाता है। आपका url '/pages/{{slug}}' होगा।", "Permission:BlogManagement": "ब्लॉग प्रबंधन", "Permission:BlogManagement.Create": "सृजन करना", "Permission:BlogManagement.Delete": "हटाएं", @@ -129,7 +130,6 @@ "YourEmailAddress": "आपका ईमेल पता", "YourFullName": "आपका पूरा नाम", "YourMessage": "आपका संदेश", - "YourReply": "आपके उत्तर", - "LastModificationTime": "अंतिम संशोधन समय" + "YourReply": "आपके उत्तर" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json index 0c5963cc0f..ed6bdcb832 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json @@ -1,16 +1,16 @@ { "culture": "it", "texts": { - "BlogDeletionConfirmationMessage": "Il blog \"{0}\" verrà eliminato. Sei sicuro?", - "BlogFeatureNotAvailable": "Questa funzione non è ora disponibile. Abilita con \"GlobalFeatureManager\" per usarlo.", + "BlogDeletionConfirmationMessage": "Il blog '{0}' verrà eliminato. Sei sicuro?", + "BlogFeatureNotAvailable": "Questa funzione non è ora disponibile. Abilita con 'GlobalFeatureManager' per usarlo.", "BlogId": "Blog", - "BlogPostDeletionConfirmationMessage": "Il post del blog \"{0}\" verrà eliminato. Sei sicuro?", + "BlogPostDeletionConfirmationMessage": "Il post del blog '{0}' verrà eliminato. Sei sicuro?", "BlogPosts": "I post del blog", "Blogs": "Blog", - "ChoosePreference": "Scegli preferenza ...", + "ChoosePreference": "Scegli preferenza...", "Cms": "CMS", "CmsKit.Comments": "Commenti", - "CmsKit.Ratings": "Giudizi", + "CmsKit.Ratings": "Valutazioni", "CmsKit.Reactions": "Reazioni", "CmsKit.Tags": "Tag", "CmsKit:0002": "Il contenuto esiste già!", @@ -18,7 +18,7 @@ "CmsKit:Blog:0001": "Lo slug specificato ({Slug}) esiste già!", "CmsKit:BlogPost:0001": "Lo slug dato esiste già!", "CmsKit:Comments:0001": "L'entità {EntityType} non è commentabile.", - "CmsKit:Media:0001": "\"{Name}\" non è un nome di supporto valido.", + "CmsKit:Media:0001": "'{Name}' non è un nome di supporto valido.", "CmsKit:Media:0002": "L'entità non può avere media.", "CmsKit:Page:0001": "L'URL fornito ({Slug}) esiste già. Prova con un URL diverso.", "CmsKit:Rating:0001": "L'entità {EntityType} non può essere valutata.", @@ -27,24 +27,25 @@ "CommentAuthorizationExceptionMessage": "Tali commenti non sono consentiti per la visualizzazione pubblica.", "CommentDeletionConfirmationMessage": "Questo commento e tutte le risposte verranno cancellate!", "Comments": "Commenti", - "Content": "Soddisfare", + "Content": "Contenuto", "ContentDeletionConfirmationMessage": "Sei sicuro di eliminare questo contenuto?", "Contents": "Contenuti", "CoverImage": "Immagine di copertina", "CreateBlogPostPage": "Nuovo post sul blog", - "CreationTime": "Tempo di creazione", + "CreationTime": "Orario di creazione", "Delete": "Elimina", "Detail": "Dettaglio", "Details": "Dettagli", "DoYouPreferAdditionalEmails": "Preferisci email aggiuntive?", - "Edit": "modificare", + "Edit": "modifica", "EndDate": "Data di fine", - "EntityId": "Entity Id", - "EntityType": "Tipo di entità", + "EntityId": "Id Entità", + "EntityType": "Tipo di Entità", "ExportCSV": "Esporta CSV", - "Features": "Caratteristiche", - "GenericDeletionConfirmationMessage": "Sei sicuro di eliminare \"{0}\"?", + "Features": "Funzionalità", + "GenericDeletionConfirmationMessage": "Sei sicuro di eliminare '{0}'?", "LastModification": "Ultima modifica", + "LastModificationTime": "Ora ultima modifica", "LoginToAddComment": "Accedi per aggiungere un commento", "LoginToRate": "Accedi per votare", "LoginToReact": "Accedi per reagire", @@ -52,23 +53,23 @@ "Menu:CMS": "CMS", "Message": "Messaggio", "MessageDeletionConfirmationMessage": "Questo commento verrà completamente cancellato.", - "NewPage": "Nuova pagina", "NewBlog": "Nuovo blog", "NewBlogPost": "Nuovo post sul blog", + "NewPage": "Nuova pagina", "NewTag": "Nuovo tag", - "OK": "ok", + "OK": "OK", "PageDeletionConfirmationMessage": "Sei sicuro di cancellare questa pagina?", - "Pages": "Pages", - "PageSlugInformation": "Lo slug viene utilizzato sull'URL. Il tuo URL sarà \"/ pages / {{slug}}\".", + "Pages": "Pagine", + "PageSlugInformation": "Lo slug viene utilizzato sull'URL. Il tuo URL sarà '/pages/{{slug}}'.", "Permission:BlogManagement": "Gestione del blog", - "Permission:BlogManagement.Create": "Creare", + "Permission:BlogManagement.Create": "Crea", "Permission:BlogManagement.Delete": "Elimina", - "Permission:BlogManagement.Features": "Caratteristiche", - "Permission:BlogManagement.Update": "Aggiornare", + "Permission:BlogManagement.Features": "Funzionalità", + "Permission:BlogManagement.Update": "Aggiorna", "Permission:BlogPostManagement": "Gestione dei post sul blog", - "Permission:BlogPostManagement.Create": "Creare", + "Permission:BlogPostManagement.Create": "Crea", "Permission:BlogPostManagement.Delete": "Elimina", - "Permission:BlogPostManagement.Update": "Aggiornare", + "Permission:BlogPostManagement.Update": "Aggiorna", "Permission:CmsKit": "CmsKit", "Permission:Comments": "Gestione dei commenti", "Permission:Comments.Delete": "Elimina", @@ -77,23 +78,23 @@ "Permission:Contents.Delete": "Elimina contenuto", "Permission:Contents.Update": "Aggiorna contenuto", "Permission:MediaDescriptorManagement": "Gestione dei media", - "Permission:MediaDescriptorManagement:Create": "Creare", + "Permission:MediaDescriptorManagement:Create": "Crea", "Permission:MediaDescriptorManagement:Delete": "Elimina", "Permission:PageManagement": "Gestione della pagina", - "Permission:PageManagement:Create": "Creare", + "Permission:PageManagement:Create": "Crea", "Permission:PageManagement:Delete": "Elimina", - "Permission:PageManagement:Update": "Aggiornare", + "Permission:PageManagement:Update": "Aggiorna", "Permission:TagManagement": "Gestione dei tag", - "Permission:TagManagement.Create": "Creare", + "Permission:TagManagement.Create": "Crea", "Permission:TagManagement.Delete": "Elimina", - "Permission:TagManagement.Update": "Aggiornare", + "Permission:TagManagement.Update": "Aggiorna", "PickYourReaction": "Scegli la tua reazione", "Rating": "Valutazione", "RatingUndoMessage": "La tua valutazione verrà annullata.", "Reactions": "Reazioni", - "Read": "Leggere", + "Read": "Leggi", "RepliesToThisComment": "Risposte a questo commento", - "Reply": "rispondere", + "Reply": "Rispondere", "ReplyTo": "Rispondi a", "SamplePageMessage": "Una pagina di esempio per il modulo Pro", "SaveChanges": "Salvare le modifiche", @@ -102,24 +103,24 @@ "Send": "Spedire", "SendMessage": "Invia messaggio", "ShortDescription": "Breve descrizione", - "Slug": "Lumaca", - "Source": "fonte", - "SourceUrl": "URL di origine", + "Slug": "Slug", + "Source": "Origine", + "SourceUrl": "URL Origine", "Star": "Stella", "StartDate": "Data d'inizio", "Style": "Stile", "Subject": "Soggetto", "SubjectPlaceholder": "Si prega di digitare un oggetto", "Submit": "Invia", - "Subscribe": "sottoscrivi", + "Subscribe": "Sottoscrivi", "SuccessfullySaved": "Salvato con successo!", - "TagDeletionConfirmationMessage": "Sei sicuro di eliminare il tag \"{0}\"?", + "TagDeletionConfirmationMessage": "Sei sicuro di eliminare il tag '{0}'?", "Tags": "Tag", "Text": "Testo", "ThankYou": "Grazie", "Title": "Titolo", - "Undo": "Disfare", - "Update": "Aggiornare", + "Undo": "Ripristina", + "Update": "Aggiorna", "UpdatePreferenceSuccessMessage": "Le tue preferenze sono state salvate.", "UpdateYourEmailPreferences": "Aggiorna le tue preferenze email", "UploadFailedMessage": "Caricamento fallito.", @@ -129,7 +130,6 @@ "YourEmailAddress": "Il tuo indirizzo di posta elettronica", "YourFullName": "Il tuo nome completo", "YourMessage": "Il tuo messaggio", - "YourReply": "La tua risposta", - "LastModificationTime": "Ora ultima modifica" + "YourReply": "La tua risposta" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuItemRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuItemRepository.cs new file mode 100644 index 0000000000..9c46bab982 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuItemRepository.cs @@ -0,0 +1,9 @@ +using System; +using Volo.Abp.Domain.Repositories; + +namespace Volo.CmsKit.Menus +{ + public interface IMenuItemRepository : IBasicRepository + { + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuRepository.cs deleted file mode 100644 index ec8efa5d80..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/IMenuRepository.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.Domain.Repositories; - -namespace Volo.CmsKit.Menus -{ - public interface IMenuRepository : IBasicRepository - { - Task FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default); - - Task> GetCurrentAndNextMainMenusAsync( - Guid nextMainMenuId, - bool includeDetails = true, - CancellationToken cancellationToken = default); - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/Menu.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/Menu.cs deleted file mode 100644 index ec91bc04f6..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/Menu.cs +++ /dev/null @@ -1,33 +0,0 @@ -using JetBrains.Annotations; -using System; -using System.Collections; -using System.Collections.Generic; -using Volo.Abp; -using Volo.Abp.Domain.Entities.Auditing; -using Volo.Abp.MultiTenancy; - -namespace Volo.CmsKit.Menus -{ - public class Menu : FullAuditedAggregateRoot, IMultiTenant - { - public string Name { get; protected set; } - - public bool IsMainMenu { get; internal set; } - - public Guid? TenantId { get; protected set; } - - public ICollection Items { get; protected set; } - - internal Menu(Guid id, Guid? tenantId, [NotNull] string name) : base(id) - { - TenantId = tenantId; - SetName(name); - Items = new HashSet(); - } - - public void SetName([NotNull] string name) - { - Name = Check.NotNullOrEmpty(name, nameof(name), MenuConsts.MaxNameLength); - } - } -} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs index f8bb18e923..0ff1ad7bfa 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs @@ -7,16 +7,12 @@ using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Authorization.Permissions; using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; namespace Volo.CmsKit.Menus { - public class MenuItem : AuditedEntity + public class MenuItem : AuditedAggregateRoot, IMultiTenant { - /// - /// Parent Id. - /// - public Guid MenuId { get; set; } - /// /// Presents another Id. /// If it's , then it's a root menu item. @@ -43,9 +39,9 @@ namespace Volo.CmsKit.Menus public Guid? PageId { get; protected set; } + public Guid? TenantId { get; } public MenuItem(Guid id, - Guid menuId, [NotNull] string displayName, [NotNull] string url, bool isActive = true, @@ -57,7 +53,6 @@ namespace Volo.CmsKit.Menus [CanBeNull] string cssClass = null) :base(id) { - MenuId = menuId; SetDisplayName(displayName); IsActive = isActive; ParentId = parentId; diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs new file mode 100644 index 0000000000..542f6f6259 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs @@ -0,0 +1,63 @@ +using JetBrains.Annotations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Domain.Entities; +using Volo.Abp.Uow; +using Volo.CmsKit.Pages; + +namespace Volo.CmsKit.Menus +{ + public class MenuItemManager : CmsKitDomainServiceBase + { + protected IMenuItemRepository MenuItemRepository { get; } + + public MenuItemManager(IMenuItemRepository menuRepository) + { + MenuItemRepository = menuRepository; + } + + public virtual void SetPageUrl(MenuItem menuItem, Page page) + { + menuItem.SetPageId(page.Id); + menuItem.SetUrl(PageConsts.UrlPrefix + page.Slug); + } + + [UnitOfWork] + public virtual async Task MoveAsync(Guid menuItemId, Guid? newParentMenuItemId, int position = 0) + { + var menuItems = await MenuItemRepository.GetListAsync(); + + var movedMenuItem = menuItems.FirstOrDefault(x => x.Id == menuItemId) + ?? throw new EntityNotFoundException(typeof(MenuItem), menuItemId); + + if (newParentMenuItemId.HasValue && !menuItems.Any(a => a.Id == newParentMenuItemId.Value)) + { + throw new EntityNotFoundException(typeof(MenuItem), newParentMenuItemId); + } + + movedMenuItem.ParentId = newParentMenuItemId; + movedMenuItem.Order = position; + + OrganizeTreeOrderForMenuItem(menuItems, movedMenuItem); + + await MenuItemRepository.UpdateManyAsync(menuItems); + } + + public virtual void OrganizeTreeOrderForMenuItem(List items, MenuItem menuItem) + { + var sameTree = items.Where(x => x.ParentId == menuItem.ParentId).OrderBy(x => x.Order).ToList(); + + sameTree.Remove(menuItem); // Remove if exists to prevent misordering with same order number + + sameTree.Insert(menuItem.Order, menuItem); + + for (int i = 0; i < sameTree.Count; i++) + { + sameTree[i].Order = i; + } + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuManager.cs deleted file mode 100644 index 7016afda49..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuManager.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using JetBrains.Annotations; -using Volo.Abp; -using Volo.Abp.Domain.Entities; -using Volo.Abp.Domain.Services; -using Volo.Abp.Uow; -using Volo.CmsKit.Pages; - -namespace Volo.CmsKit.Menus -{ - public class MenuManager : CmsKitDomainServiceBase - { - protected IMenuRepository MenuRepository { get; } - - public MenuManager(IMenuRepository menuRepository) - { - MenuRepository = menuRepository; - } - - /// - /// Creates a new instance of without inserting into database. - /// - /// Tenant Id of Menu. - /// Name of Menu. - /// Created instance. - public virtual async Task CreateAsync(Guid? tenantId, [NotNull] string name) - { - var menu = new Menu( - GuidGenerator.Create(), - tenantId, - Check.NotNullOrEmpty(name, nameof(name), MenuConsts.MaxNameLength)); - - var existingMenuCount = await MenuRepository.GetCountAsync(); - - if (existingMenuCount == 0) - { - menu.IsMainMenu = true; - } - - return menu; - } - - public virtual void SetPageUrl(MenuItem menuItem, Page page) - { - menuItem.SetPageId(page.Id); - menuItem.SetUrl(PageConsts.UrlPrefix + page.Slug); - } - - [UnitOfWork] - public virtual async Task MoveAsync(Guid menuId, Guid menuItemId, Guid? newParentId, int position = 0) - { - var menu = await MenuRepository.GetAsync(menuId, includeDetails: true); - - var menuItem = menu.Items.FirstOrDefault(x => x.Id == menuItemId) - ?? throw new EntityNotFoundException(typeof(MenuItem), menuItemId); - - if (newParentId.HasValue && !menu.Items.Any(a => a.Id == newParentId.Value)) - { - throw new EntityNotFoundException(typeof(MenuItem), newParentId); - } - - menuItem.ParentId = newParentId; - menuItem.Order = position; - - OrganizeTreeOrderForMenuItem(menu, menuItem); - - await MenuRepository.UpdateAsync(menu); - } - - public virtual void OrganizeTreeOrderForMenuItem(Menu menu, MenuItem menuItem) - { - var sameTree = menu.Items.Where(x => x.ParentId == menuItem.ParentId).OrderBy(x => x.Order).ToList(); - - sameTree.Remove(menuItem); // Remove if exists to prevent misordering with same order number - - sameTree.Insert(menuItem.Order, menuItem); - - for (int i = 0; i < sameTree.Count; i++) - { - sameTree[i].Order = i; - } - } - - public virtual async Task SetMainMenuAsync(Guid menuId) - { - var menus = await MenuRepository.GetCurrentAndNextMainMenusAsync(menuId ,includeDetails: false); - - foreach (var menu in menus) - { - menu.IsMainMenu = menuId == menu.Id; - } - - await MenuRepository.UpdateManyAsync(menus); - } - - public virtual async Task UnSetMainMenuAsync(Guid menuId) - { - var menu = await MenuRepository.GetAsync(menuId, includeDetails: false); - - menu.IsMainMenu = false; - - await MenuRepository.UpdateAsync(menu); - } - } -} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/PageChangedHandler.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/PageChangedHandler.cs index 4c162ff01a..ca1b376afc 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/PageChangedHandler.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/PageChangedHandler.cs @@ -1,4 +1,3 @@ -using System; using System.Linq; using System.Threading.Tasks; using Volo.Abp.DependencyInjection; @@ -8,38 +7,36 @@ using Volo.CmsKit.Pages; namespace Volo.CmsKit.Menus { - public class PageChangedHandler: ILocalEventHandler>, + public class PageChangedHandler : + ILocalEventHandler>, ITransientDependency { - protected IMenuRepository MenuRepository { get; } - protected MenuManager MenuManager { get; } + protected IMenuItemRepository MenuRepository { get; } + protected MenuItemManager MenuManager { get; } public PageChangedHandler( - IMenuRepository menuRepository, - MenuManager menuManager) + IMenuItemRepository menuRepository, + MenuItemManager menuManager) { MenuRepository = menuRepository; MenuManager = menuManager; } - + public async Task HandleEventAsync(EntityUpdatedEventData eventData) { // TODO: Write a repository query. - var allMenus = await MenuRepository.GetListAsync(includeDetails: true); - - var affectedMenus = allMenus - .Where(menu => menu.Items.Any(x => x.PageId == eventData.Entity.Id)) - .ToArray(); + var allMenuItems = await MenuRepository.GetListAsync(); - var affectedMenuItems = - affectedMenus.SelectMany(sm => sm.Items).Where(mItem => mItem.PageId == eventData.Entity.Id); + var affectedMenuItems = allMenuItems + .Where(x => x.PageId == eventData.Entity.Id) + .ToArray(); foreach (var menuItem in affectedMenuItems) { MenuManager.SetPageUrl(menuItem, eventData.Entity); } - await MenuRepository.UpdateManyAsync(affectedMenus); + await MenuRepository.UpdateManyAsync(affectedMenuItems); } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs index 5d16417c47..752b47cdaa 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs @@ -27,7 +27,6 @@ namespace Volo.CmsKit.EntityFrameworkCore public DbSet BlogPosts { get; set; } public DbSet BlogFeatures { get; set; } public DbSet MediaDescriptors { get; set; } - public DbSet Menus { get; set; } public DbSet MenuItems { get; set; } public CmsKitDbContext(DbContextOptions options) diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index fc9a0e083a..f7964c1711 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -258,15 +258,6 @@ namespace Volo.CmsKit.EntityFrameworkCore if (GlobalFeatureManager.Instance.IsEnabled()) { - builder.Entity(b => - { - b.ToTable(options.TablePrefix + "Menus", options.Schema); - - b.ConfigureByConvention(); - - b.HasMany(x => x.Items).WithOne().HasForeignKey(fk => fk.MenuId); - }); - builder.Entity(b => { b.ToTable(options.TablePrefix + "MenuItems", options.Schema); @@ -280,7 +271,6 @@ namespace Volo.CmsKit.EntityFrameworkCore } else { - builder.Ignore(); builder.Ignore(); } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs index 0484676a94..09118a1d69 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs @@ -4,6 +4,7 @@ using Volo.Abp.EntityFrameworkCore; using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; using Volo.CmsKit.MediaDescriptors; +using Volo.CmsKit.Menus; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; @@ -25,5 +26,6 @@ namespace Volo.CmsKit.EntityFrameworkCore DbSet Blogs { get; } DbSet BlogPosts { get; } DbSet MediaDescriptors { get; } + DbSet MenuItems { get; } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuExtensions.cs deleted file mode 100644 index bed9516c8f..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuExtensions.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Linq; -using Microsoft.EntityFrameworkCore; - -namespace Volo.CmsKit.Menus -{ - public static class EfCoreMenuExtensions - { - public static IQueryable IncludeDetails(this IQueryable source) - { - return source.Include(i => i.Items); - } - } -} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuItemRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuItemRepository.cs new file mode 100644 index 0000000000..6b5a314c1e --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuItemRepository.cs @@ -0,0 +1,14 @@ +using System; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; + +namespace Volo.CmsKit.Menus +{ + public class EfCoreMenuItemRepository : EfCoreRepository, IMenuItemRepository + { + public EfCoreMenuItemRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuRepository.cs deleted file mode 100644 index 5902c40a8d..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Menus/EfCoreMenuRepository.cs +++ /dev/null @@ -1,40 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.Domain.Repositories.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore; -using Volo.CmsKit.EntityFrameworkCore; - -namespace Volo.CmsKit.Menus -{ - public class EfCoreMenuRepository : EfCoreRepository, IMenuRepository - { - public EfCoreMenuRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider) - { - } - - public override async Task> WithDetailsAsync() - { - return (await base.WithDetailsAsync()).IncludeDetails(); - } - - public virtual async Task FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default) - { - return await (includeDetails ? await WithDetailsAsync() : await GetQueryableAsync()) - .FirstOrDefaultAsync(x => x.IsMainMenu, GetCancellationToken(cancellationToken)); - } - - public virtual async Task> GetCurrentAndNextMainMenusAsync( - Guid nextMainMenuId, - bool includeDetails = true, - CancellationToken cancellationToken = default) - { - return await (includeDetails ? await WithDetailsAsync() : await GetQueryableAsync()) - .Where(x => x.IsMainMenu || x.Id == nextMainMenuId) - .ToListAsync(GetCancellationToken(cancellationToken)); - } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs index 11d089f4e2..d1fca18b18 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs @@ -39,7 +39,7 @@ namespace Volo.CmsKit.MongoDB public IMongoCollection MediaDescriptors => Collection(); - public IMongoCollection Menus => Collection(); + public IMongoCollection MenuItems => Collection(); protected override void CreateModel(IMongoModelBuilder modelBuilder) { diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs index e96ed841a8..9ff9ff8797 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs @@ -4,6 +4,7 @@ using Volo.Abp.MongoDB; using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; using Volo.CmsKit.MediaDescriptors; +using Volo.CmsKit.Menus; using Volo.CmsKit.Pages; using Volo.CmsKit.Ratings; using Volo.CmsKit.Reactions; @@ -80,6 +81,11 @@ namespace Volo.CmsKit.MongoDB { x.CollectionName = CmsKitDbProperties.DbTablePrefix + "MediaDescriptors"; }); + + builder.Entity(x => + { + x.CollectionName = CmsKitDbProperties.DbTablePrefix + "MenuItems"; + }); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs index f18e92e2ba..e3e9c32275 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs @@ -5,9 +5,11 @@ using Volo.Abp.Users.MongoDB; using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; using Volo.CmsKit.MediaDescriptors; +using Volo.CmsKit.Menus; using Volo.CmsKit.MongoDB.Blogs; using Volo.CmsKit.MongoDB.Comments; using Volo.CmsKit.MongoDB.MediaDescriptors; +using Volo.CmsKit.MongoDB.Menus; using Volo.CmsKit.MongoDB.Pages; using Volo.CmsKit.MongoDB.Ratings; using Volo.CmsKit.MongoDB.Reactions; @@ -42,6 +44,7 @@ namespace Volo.CmsKit.MongoDB options.AddRepository(); options.AddRepository(); options.AddRepository(); + options.AddRepository(); }); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs index 564ae15536..9e71b4a72e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs @@ -39,6 +39,6 @@ namespace Volo.CmsKit.MongoDB IMongoCollection MediaDescriptors { get; } - IMongoCollection Menus { get; } + IMongoCollection MenuItems { get; } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuItemRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuItemRepository.cs new file mode 100644 index 0000000000..d68923572f --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuItemRepository.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using MongoDB.Driver; +using MongoDB.Driver.Linq; +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.MongoDB; +using Volo.CmsKit.Menus; + +namespace Volo.CmsKit.MongoDB.Menus +{ + public class MongoMenuItemRepository : MongoDbRepository, IMenuItemRepository + { + public MongoMenuItemRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuRepository.cs deleted file mode 100644 index dd9f26a694..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Menus/MongoMenuRepository.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using MongoDB.Driver; -using MongoDB.Driver.Linq; -using Volo.Abp.Domain.Repositories.MongoDB; -using Volo.Abp.MongoDB; -using Volo.CmsKit.Menus; - -namespace Volo.CmsKit.MongoDB.Menus -{ - public class MongoMenuRepository : MongoDbRepository, IMenuRepository - { - public MongoMenuRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) - { - } - - public virtual async Task FindMainMenuAsync(bool includeDetails = true, CancellationToken cancellationToken = default) - { - return await (await GetMongoQueryableAsync(GetCancellationToken(cancellationToken))) - .FirstOrDefaultAsync(x => x.IsMainMenu, GetCancellationToken(cancellationToken)); - } - - public virtual async Task> GetCurrentAndNextMainMenusAsync(Guid nextMainMenuId, bool includeDetails = true, - CancellationToken cancellationToken = default) - { - return await (await GetMongoQueryableAsync(GetCancellationToken(cancellationToken))) - .Where(x => x.IsMainMenu || x.Id == nextMainMenuId) - .ToListAsync(GetCancellationToken(cancellationToken)); - } - } -} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Menus/IMenuItemPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Menus/IMenuItemPublicAppService.cs new file mode 100644 index 0000000000..0acd43de27 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Menus/IMenuItemPublicAppService.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; +using Volo.CmsKit.Menus; + +namespace Volo.CmsKit.Public.Menus +{ + public interface IMenuItemPublicAppService : IApplicationService + { + Task> GetListAsync(); + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Menus/IMenuPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Menus/IMenuPublicAppService.cs deleted file mode 100644 index ee544f5505..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Menus/IMenuPublicAppService.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.Application.Services; -using Volo.CmsKit.Menus; - -namespace Volo.CmsKit.Public.Menus -{ - public interface IMenuPublicAppService : IApplicationService - { - Task GetMainMenuAsync(); - } -} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuItemPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuItemPublicAppService.cs new file mode 100644 index 0000000000..1d2e4a0fc3 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuItemPublicAppService.cs @@ -0,0 +1,43 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Caching; +using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Menus; + +namespace Volo.CmsKit.Public.Menus +{ + [RequiresGlobalFeature(typeof(MenuFeature))] + public class MenuItemPublicAppService : CmsKitPublicAppServiceBase, IMenuItemPublicAppService + { + protected IMenuItemRepository MenuItemRepository { get; } + protected IDistributedCache> DistributedCache { get; } + + public MenuItemPublicAppService( + IMenuItemRepository menuRepository, + IDistributedCache> distributedCache) + { + MenuItemRepository = menuRepository; + DistributedCache = distributedCache; + } + + public async Task> GetListAsync() + { + var cachedMenu = await DistributedCache.GetOrAddAsync( + MenuApplicationConsts.MainMenuCacheKey, + async () => + { + var menuItems = await MenuItemRepository.GetListAsync(); + + if (menuItems == null) + { + return new(); + } + + return ObjectMapper.Map, List>(menuItems); + }); + + return cachedMenu; + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuPublicAppService.cs deleted file mode 100644 index 891aec1e76..0000000000 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuPublicAppService.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.Caching; -using Volo.Abp.GlobalFeatures; -using Volo.CmsKit.GlobalFeatures; -using Volo.CmsKit.Menus; - -namespace Volo.CmsKit.Public.Menus -{ - [RequiresGlobalFeature(typeof(MenuFeature))] - public class MenuPublicAppService : CmsKitPublicAppServiceBase, IMenuPublicAppService - { - protected IMenuRepository MenuRepository { get; } - - protected IDistributedCache DistributedCache { get; } - - public MenuPublicAppService( - IMenuRepository menuRepository, - IDistributedCache distributedCache) - { - MenuRepository = menuRepository; - DistributedCache = distributedCache; - } - - public async Task GetMainMenuAsync() - { - var cachedMenu = await DistributedCache.GetOrAddAsync( - MenuApplicationConsts.MainMenuCacheKey, - async () => - { - var menu = await MenuRepository.FindMainMenuAsync(includeDetails: true); - - if (menu == null) - { - return new MenuWithDetailsDto(); - } - - return ObjectMapper.Map(menu); - }); - - return cachedMenu; - } - } -} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs index 72a9dae9b2..72ab7bebdc 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs @@ -33,8 +33,6 @@ namespace Volo.CmsKit.Public CreateMap(MemberList.None); CreateMap(); - - CreateMap(); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuItemPublicController.cs similarity index 51% rename from modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuPublicController.cs rename to modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuItemPublicController.cs index 14d4c621ed..c64b8e3ffa 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuItemPublicController.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp; @@ -10,21 +11,20 @@ namespace Volo.CmsKit.Public.Menus [RequiresGlobalFeature(typeof(BlogsFeature))] [RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)] [Area("cms-kit")] - [Route("api/cms-kit-public/menus")] - public class MenuPublicController : CmsKitPublicControllerBase, IMenuPublicAppService + [Route("api/cms-kit-public/menu-items")] + public class MenuItemPublicController : CmsKitPublicControllerBase, IMenuItemPublicAppService { - protected IMenuPublicAppService MenuPublicAppService { get; } + protected IMenuItemPublicAppService MenuPublicAppService { get; } - public MenuPublicController(IMenuPublicAppService menuPublicAppService) + public MenuItemPublicController(IMenuItemPublicAppService menuPublicAppService) { MenuPublicAppService = menuPublicAppService; } - [Route("main-menu")] [HttpGet] - public Task GetMainMenuAsync() + public Task> GetListAsync() { - return MenuPublicAppService.GetMainMenuAsync(); + return MenuPublicAppService.GetListAsync(); } } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs index 64f7a581c0..c31d52740d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs @@ -24,15 +24,15 @@ namespace Volo.CmsKit.Public.Web.Menus { if (GlobalFeatureManager.Instance.IsEnabled()) { - var menuAppService = context.ServiceProvider.GetRequiredService(); + var menuAppService = context.ServiceProvider.GetRequiredService(); - var mainMenu = await menuAppService.GetMainMenuAsync(); + var menuItems = await menuAppService.GetListAsync(); - if (mainMenu != null) + if (!menuItems.IsNullOrEmpty()) { - foreach (var menuItemDto in mainMenu.Items.Where(x => x.ParentId == null && x.IsActive)) + foreach (var menuItemDto in menuItems.Where(x => x.ParentId == null && x.IsActive)) { - AddChildItems(menuItemDto, mainMenu.Items, context.Menu); + AddChildItems(menuItemDto, menuItems, context.Menu); } } } diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs similarity index 53% rename from modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuAdminAppService_Tests.cs rename to modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs index e82a791644..5826d6114a 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuAdminAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs @@ -11,75 +11,79 @@ using Xunit; namespace Volo.CmsKit.Menus { - public class MenuAdminAppService_Tests : CmsKitApplicationTestBase + public class MenuItemAdminAppService_Tests : CmsKitApplicationTestBase { - protected IMenuAdminAppService MenuAdminAppService { get; } + protected IMenuItemAdminAppService MenuAdminAppService { get; } protected CmsKitTestData TestData { get; } - protected IMenuRepository MenuRepository { get; } + protected IMenuItemRepository MenuRepository { get; } - public MenuAdminAppService_Tests() + public MenuItemAdminAppService_Tests() { - MenuAdminAppService = GetRequiredService(); + MenuAdminAppService = GetRequiredService(); TestData = GetRequiredService(); - MenuRepository = GetRequiredService(); + MenuRepository = GetRequiredService(); } [Fact] public async Task GetAsync_ShouldWorkProperly_WithCorrectId() { - var menu = await MenuAdminAppService.GetAsync(TestData.Menu_1_Id); + var menu = await MenuAdminAppService.GetAsync(TestData.MenuItem_1_Id); menu.ShouldNotBeNull(); - menu.Name.ShouldBe(TestData.Menu_1_Name); } - [Fact] - public async Task GetAsync_ShouldGetItemsProperly_WithCorrectId() + public async Task GetListAsync_ShouldWorkProperly() { - var menu = await MenuAdminAppService.GetAsync(TestData.Menu_1_Id); + var result = await MenuAdminAppService.GetListAsync(); - menu.ShouldNotBeNull(); - menu.Items.ShouldNotBeEmpty(); - menu.Items.Count.ShouldBe(2); + result.ShouldNotBeNull(); + result.Items.ShouldNotBeEmpty(); + result.Items.Count.ShouldBe(3); } [Fact] public async Task CreateAsync_ShouldWorkProperly_WithOnlyName() { var name = "My Awesome Menu"; - var menu = await MenuAdminAppService.CreateAsync(new MenuCreateInput + var menu = await MenuAdminAppService.CreateAsync(new MenuItemCreateInput { - Name = name + DisplayName = name }); menu.ShouldNotBeNull(); menu.Id.ShouldNotBe(Guid.Empty); - menu.Name.ShouldBe(name); + menu.DisplayName.ShouldBe(name); } [Fact] public async Task UpdateAsync_ShouldWorkProperly_WithName() { var newName = "My New Name"; - - await MenuAdminAppService.UpdateAsync(TestData.Menu_1_Id, new MenuUpdateInput + var newUrl = "my-new-url"; + await WithUnitOfWorkAsync(async () => { - Name = newName + await MenuAdminAppService.UpdateAsync(TestData.MenuItem_1_Id, new MenuItemUpdateInput + { + DisplayName = newName, + Url = newUrl + }); }); + - var menu = await MenuRepository.FindAsync(TestData.Menu_1_Id); + var menu = await MenuRepository.FindAsync(TestData.MenuItem_1_Id); menu.ShouldNotBeNull(); - menu.Name.ShouldBe(newName); + menu.DisplayName.ShouldBe(newName); + menu.Url.ShouldBe(newUrl); } [Fact] public async Task DeleteAsync_ShouldWorkProperly_WithExistingId() { - await MenuAdminAppService.DeleteAsync(TestData.Menu_1_Id); + await MenuAdminAppService.DeleteAsync(TestData.MenuItem_1_Id); - var menu = await MenuRepository.FindAsync(TestData.Menu_1_Id); + var menu = await MenuRepository.FindAsync(TestData.MenuItem_1_Id); menu.ShouldBeNull(); } diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs index 88ae0c8458..c40dab0118 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs @@ -1,8 +1,7 @@ +using Shouldly; using System; using System.Linq; using System.Threading.Tasks; -using Nito.AsyncEx; -using Shouldly; using Volo.CmsKit.Pages; using Xunit; @@ -10,16 +9,16 @@ namespace Volo.CmsKit.Menus { public class MenuManager_Test : CmsKitDomainTestBase { - private readonly MenuManager menuManager; + private readonly MenuItemManager menuManager; private readonly CmsKitTestData testData; - private readonly IMenuRepository menuRepository; + private readonly IMenuItemRepository menuItemRepository; private readonly IPageRepository pageRepository; public MenuManager_Test() { - menuManager = GetRequiredService(); + menuManager = GetRequiredService(); testData = GetRequiredService(); - menuRepository = GetRequiredService(); + menuItemRepository = GetRequiredService(); pageRepository = GetRequiredService(); } @@ -27,8 +26,8 @@ namespace Volo.CmsKit.Menus public async Task SetPageUrl_ShouldSetUrlSameWithPage_WithExistingPage() { var page = await pageRepository.GetAsync(testData.Page_1_Id); - var menu = await menuRepository.GetAsync(testData.Menu_1_Id); - var menuItem = menu.Items.First(); + + var menuItem = await menuItemRepository.GetAsync(testData.MenuItem_1_Id); menuManager.SetPageUrl(menuItem, page); @@ -39,24 +38,22 @@ namespace Volo.CmsKit.Menus [Fact] public async Task MoveAsync_ShouldMoveCorrectly_UnderAnotherMenu() { - await menuManager.MoveAsync(testData.Menu_1_Id, testData.MenuItem_2_Id, testData.MenuItem_1_Id); + await menuManager.MoveAsync(testData.MenuItem_3_Id, testData.MenuItem_1_Id); - var menu = await menuRepository.GetAsync(testData.Menu_1_Id); + var menu = await menuItemRepository.GetAsync(testData.MenuItem_3_Id); - menu.Items.ShouldContain( - x => x.ParentId == testData.MenuItem_1_Id - && x.Id == testData.MenuItem_2_Id); + menu.ParentId.ShouldBe(testData.MenuItem_1_Id); } [Fact] - public async Task MoveAsync_ShouldChangePositionCorrectly_UnderSameParent() + public async Task MoveAsync_ShouldChangePositionCorrectly_UnderRoot() { - await menuManager.MoveAsync(testData.Menu_1_Id, testData.MenuItem_2_Id, null, 0); + await menuManager.MoveAsync(testData.MenuItem_2_Id, null, 0); - var menu = await menuRepository.GetAsync(testData.Menu_1_Id); + var menuItems = await menuItemRepository.GetListAsync(); - var menuItem1 = menu.Items.First(x => x.Id == testData.MenuItem_1_Id); - var menuItem2 = menu.Items.First(x => x.Id == testData.MenuItem_2_Id); + var menuItem1 = menuItems.First(x => x.Id == testData.MenuItem_1_Id); + var menuItem2 = menuItems.First(x => x.Id == testData.MenuItem_2_Id); menuItem1.Order.ShouldBeGreaterThan(menuItem2.Order); } @@ -65,45 +62,21 @@ namespace Volo.CmsKit.Menus public async Task OrganizeTreeOrderForMenuItem_ShouldWorkProperly_WithNewMenuItem() { var menu3Id = Guid.NewGuid(); - var menu = await menuRepository.GetAsync(testData.Menu_1_Id); - var menuItem1 = menu.Items.First(x => x.Id == testData.MenuItem_1_Id); - var menuItem2 = menu.Items.First(x => x.Id == testData.MenuItem_2_Id); - var menuItem3 = new MenuItem(menu3Id, menu.Id, "Menu 3", "#"); - menu.Items.Add(menuItem3); + var menuItems = await menuItemRepository.GetListAsync(); + + var menuItem1 = menuItems.First(x => x.Id == testData.MenuItem_1_Id); + var menuItem2 = menuItems.First(x => x.Id == testData.MenuItem_2_Id); + var menuItem3 = new MenuItem(menu3Id, "Menu 3", "#"); + + menuItems.Add(menuItem3); menuItem3.Order = 0; - menuManager.OrganizeTreeOrderForMenuItem(menu, menuItem3); + menuManager.OrganizeTreeOrderForMenuItem(menuItems, menuItem3); menuItem3.Order.ShouldBeLessThan(menuItem1.Order); menuItem3.Order.ShouldBeLessThan(menuItem2.Order); } - - [Fact] - public async Task SetMainMenuAsync_ShouldSetOnlyOneMainMenu() - { - await menuManager.SetMainMenuAsync(testData.Menu_2_Id); - - var menuList = await menuRepository.GetListAsync(); - - var isMainMenuTrueCount = menuList.Count(menu => menu.IsMainMenu); - - isMainMenuTrueCount.ShouldBe(1); - menuList.ShouldContain(menu => menu.IsMainMenu && menu.Id == testData.Menu_2_Id); - } - - [Fact] - public async Task UnSetMainMenuAsync_ShouldUnsetProperly() - { - await menuManager.UnSetMainMenuAsync(testData.Menu_1_Id); - - var menuList = await menuRepository.GetListAsync(); - - var isMainMenuTrueCount = menuList.Count(menu => menu.IsMainMenu); - - isMainMenuTrueCount.ShouldBe(0); - menuList.ShouldNotContain(menu => menu.IsMainMenu && menu.Id == testData.Menu_1_Id); - } } } \ No newline at end of file diff --git a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Menus/MenuRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Menus/MenuRepository_Test.cs index f4ba77618c..9f0cf3db69 100644 --- a/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Menus/MenuRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.EntityFrameworkCore.Tests/EntityFrameworkCore/Menus/MenuRepository_Test.cs @@ -2,7 +2,7 @@ using Volo.CmsKit.Menus; namespace Volo.CmsKit.EntityFrameworkCore.Menus { - public class MenuRepository_Test : MenuRepository_Test + public class MenuRepository_Test : MenuItemRepository_Test { } diff --git a/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Menus/MenuRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Menus/MenuRepository_Test.cs index 8daf56f569..61f46dc8fc 100644 --- a/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Menus/MenuRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.MongoDB.Tests/MongoDB/Menus/MenuRepository_Test.cs @@ -4,7 +4,7 @@ using Volo.CmsKit.Menus; namespace Volo.CmsKit.MongoDB.Menus { [Collection(MongoTestCollection.Name)] - public class MenuRepository_Test : MenuRepository_Test + public class MenuRepository_Test : MenuItemRepository_Test { } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index e18d573f0d..9383265019 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -1,5 +1,4 @@ using Microsoft.Extensions.Options; -using System; using System.Collections.Generic; using System.IO; using System.Text; @@ -48,7 +47,7 @@ namespace Volo.CmsKit private readonly IOptions _mediaOptions; private readonly IOptions _commentsOptions; private readonly IOptions _ratingOptions; - private readonly IMenuRepository _menuRepository; + private readonly IMenuItemRepository _menuItemRepository; public CmsKitDataSeedContributor( IGuidGenerator guidGenerator, @@ -75,7 +74,7 @@ namespace Volo.CmsKit IOptions cmsMediaOptions, IOptions commentsOptions, IOptions ratingOptions, - IMenuRepository menuRepository) + IMenuItemRepository menuItemRepository) { _guidGenerator = guidGenerator; _cmsUserRepository = cmsUserRepository; @@ -101,7 +100,7 @@ namespace Volo.CmsKit _mediaOptions = cmsMediaOptions; _commentsOptions = commentsOptions; _ratingOptions = ratingOptions; - _menuRepository = menuRepository; + _menuItemRepository = menuItemRepository; } public async Task SeedAsync(DataSeedContext context) @@ -415,38 +414,22 @@ namespace Volo.CmsKit private async Task SeedMenusAsync() { - var menu = new Menu(_cmsKitTestData.Menu_1_Id, null, _cmsKitTestData.Menu_1_Name); - menu.IsMainMenu = true; - - menu.Items.Add( + await _menuItemRepository.InsertManyAsync(new[] + { new MenuItem( _cmsKitTestData.MenuItem_1_Id, - menu.Id, _cmsKitTestData.MenuItem_1_Name, - _cmsKitTestData.MenuItem_1_Url)); - - menu.Items.Add( + _cmsKitTestData.MenuItem_1_Url), new MenuItem( _cmsKitTestData.MenuItem_2_Id, - menu.Id, _cmsKitTestData.MenuItem_2_Name, - _cmsKitTestData.MenuItem_2_Url)); - - await _menuRepository.InsertAsync(menu); - - var menu2 = new Menu( - _cmsKitTestData.Menu_2_Id, - null, - _cmsKitTestData.Menu_2_Name); - - menu2.Items.Add( + _cmsKitTestData.MenuItem_2_Url), new MenuItem( - _cmsKitTestData.MenuItem_3_Id, - menu2.Id, + _cmsKitTestData.MenuItem_3_Id, _cmsKitTestData.MenuItem_3_Name, - _cmsKitTestData.MenuItem_3_Url)); - - await _menuRepository.InsertAsync(menu2); + _cmsKitTestData.MenuItem_3_Url) + + }); } } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs index dfe88d8d0f..62f81b2646 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs @@ -110,10 +110,6 @@ namespace Volo.CmsKit public string Media_1_ContentType { get; } = "text/plain"; - public Guid Menu_1_Id { get; } = Guid.NewGuid(); - - public string Menu_1_Name { get; } = "MainMenu"; - public Guid MenuItem_1_Id { get; } = Guid.NewGuid(); public string MenuItem_1_Name { get; } = "About Us"; @@ -126,11 +122,6 @@ namespace Volo.CmsKit public string MenuItem_2_Url { get; } = "/team"; - - public Guid Menu_2_Id { get; } = Guid.NewGuid(); - - public string Menu_2_Name { get; } = "DraftMenu"; - public Guid MenuItem_3_Id { get; } = Guid.NewGuid(); public string MenuItem_3_Name { get; } = "Products"; diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuItemRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuItemRepository_Test.cs new file mode 100644 index 0000000000..7043a2bf6d --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuItemRepository_Test.cs @@ -0,0 +1,21 @@ +using System; +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Modularity; + +namespace Volo.CmsKit.Menus +{ + public abstract class MenuItemRepository_Test : CmsKitTestBase + where TStartupModule : IAbpModule + { + + private readonly CmsKitTestData testData; + private readonly IMenuItemRepository menuItemRepository; + + public MenuItemRepository_Test() + { + testData = GetRequiredService(); + menuItemRepository = GetRequiredService(); + } + } +} \ No newline at end of file diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuRepository_Test.cs deleted file mode 100644 index d4f428b940..0000000000 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Menus/MenuRepository_Test.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System.Threading.Tasks; -using Shouldly; -using Volo.Abp.Modularity; -using Xunit; - -namespace Volo.CmsKit.Menus -{ - public abstract class MenuRepository_Test : CmsKitTestBase - where TStartupModule : IAbpModule - { - - private readonly CmsKitTestData testData; - private readonly IMenuRepository menuRepository; - - public MenuRepository_Test() - { - testData = GetRequiredService(); - menuRepository = GetRequiredService(); - } - - [Fact] - public async Task GetMainMenuAsync_ShouldWorkProperly() - { - var mainMenu = await menuRepository.FindMainMenuAsync(); - - mainMenu.ShouldNotBeNull(); - mainMenu.Id.ShouldBe(testData.Menu_1_Id); - } - - [Fact] - public async Task GetMainMenuAsync_ShouldWorkProperly_WithIncludeDetails() - { - var mainMenu = await menuRepository.FindMainMenuAsync(includeDetails: true); - - mainMenu.ShouldNotBeNull(); - mainMenu.Id.ShouldBe(testData.Menu_1_Id); - mainMenu.Items.ShouldNotBeEmpty(); - mainMenu.Items.Count.ShouldBe(2); - } - - [Fact] - public async Task GetCurrentAndNextMainMenusAsync_ShouldWorkProperly() - { - var menus = await menuRepository.GetCurrentAndNextMainMenusAsync( - testData.Menu_2_Id); - - menus.ShouldNotBeEmpty(); - menus.Count.ShouldBe(2); - } - } -} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/it.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/it.json index f8c2e41bfc..c60f6e2f73 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/it.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/it.json @@ -3,25 +3,25 @@ "texts": { "Permission:DocumentManagement": "Gestione documenti", "Permission:Projects": "Progetti", - "Permission:Edit": "modificare", + "Permission:Edit": "Modifica", "Permission:Delete": "Elimina", - "Permission:Create": "Creare", + "Permission:Create": "Crea", "Permission:Documents": "Documenti", "Menu:Documents": "Documenti", "Menu:DocumentManagement": "Documenti", "Menu:ProjectManagement": "Progetti", "CreateANewProject": "Crea nuovo progetto", - "Edit": "modificare", - "Create": "Creare", + "Edit": "Modifica", + "Create": "Crea", "Pull": "Tirare", "Projects": "Progetti", "Name": "Nome", - "ShortName": "Nome corto", + "ShortName": "Nome abbreviato", "DocumentStoreType": "DocumentStoreType", "Format": "Formato", "ShortNameInfoText": "Verrà utilizzato per URL univoco.", "DisplayName:Name": "Nome", - "DisplayName:ShortName": "Nome corto", + "DisplayName:ShortName": "Nome abbreviato", "DisplayName:Format": "Formato", "DisplayName:DefaultDocumentName": "Nome documento predefinito", "DisplayName:NavigationDocumentName": "Nome del documento di navigazione", @@ -30,10 +30,10 @@ "DisplayName:LatestVersionBranchName": "Nome del ramo della versione più recente", "DisplayName:GitHubRootUrl": "URL radice di GitHub", "DisplayName:GitHubAccessToken": "Token di accesso GitHub", - "DisplayName:GitHubUserAgent": "Agente utente GitHub", - "DisplayName:GithubVersionProviderSource": "Origine del provider della versione di GitHub", - "DisplayName:VersionBranchPrefix": "Prefisso del ramo della versione", - "DisplayName:All": "Tira tutto", + "DisplayName:GitHubUserAgent": "GitHub user agent", + "DisplayName:GithubVersionProviderSource": "GitHub version provider source", + "DisplayName:VersionBranchPrefix": "Prefisso branch versione", + "DisplayName:All": "Pull tutto", "DisplayName:LanguageCode": "Codice della lingua", "DisplayName:Version": "Versione", "Documents": "Documenti", @@ -48,7 +48,7 @@ "Search": "Ricerca", "StartDate": "Data d'inizio", "EndDate": "Data di fine", - "CreationTime": "Tempo di creazione", + "CreationTime": "Orario di creazione", "LastUpdateTime": "Ultimo aggiornamento", "LastSignificantUpdateTime": "Ultimo aggiornamento significativo", "Version": "Versione", diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/it.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/it.json index b66a7376a1..333eedb201 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/it.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/it.json @@ -6,7 +6,7 @@ "Contributors": "Contributori", "ShareOn": "Condividere su", "Version": "Versione", - "Edit": "modificare", + "Edit": "Modifica", "LastEditTime": "Ultima modifica", "Delete": "Elimina", "ClearCache": "Cancella cache", @@ -19,10 +19,10 @@ "SuccessfullyReIndexAllProject": "Reindicizza con successo tutti i progetti", "InThisDocument": "In questo documento", "GoToTop": "Vai in alto", - "Projects": "Progetto (i)", + "Projects": "Progetto(i)", "NoProjectWarning": "Non ci sono ancora progetti!", - "DocumentNotFound": "Oops, il documento richiesto non è stato trovato!", - "ProjectNotFound": "Oops, il progetto richiesto non è stato trovato!", + "DocumentNotFound": "Ops, il documento richiesto non è stato trovato!", + "ProjectNotFound": "Ops, il progetto richiesto non è stato trovato!", "NavigationDocumentNotFound": "Questa versione non ha un documento di navigazione!", "DocumentNotFoundInSelectedLanguage": "Il documento nella lingua desiderata non è stato trovato. Viene visualizzato il documento nella lingua predefinita.", "FilterTopics": "Filtra gli argomenti", @@ -33,9 +33,9 @@ "Upd": "Agg", "NewExplanation": "Creato nelle ultime due settimane.", "UpdatedExplanation": "Aggiornato nelle ultime due settimane.", - "Volo.Docs.Domain:010002": "ShortName {ShortName} esiste già.", + "Volo.Docs.Domain:010002": "Abbreviazione {ShortName} esiste già.", "Preview": "anteprima", "Search": "Ricerca", - "SearchResults": "risultati di ricerca" + "SearchResults": "Risultati della ricerca" } } \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/it.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/it.json index 0d975f6ed5..f59d326d2b 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/it.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/it.json @@ -1,7 +1,7 @@ { "culture": "it", "texts": { - "Features": "Caratteristiche", + "Features": "Funzionalità", "NoFeatureFoundMessage": "Non ci sono funzioni disponibili.", "Permission:FeatureManagement": "Gestione delle funzionalità", "Permission:FeatureManagement.ManageHostFeatures": "Gestisci le funzionalità dell'host", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fi.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fi.json index 839233cbb1..2022b67115 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fi.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fi.json @@ -48,10 +48,10 @@ "Volo.Abp.Identity:InvalidUserName": "Käyttäjätunnus {0} on virheellinen, voi sisältää vain kirjaimia tai numeroita.", "Volo.Abp.Identity:LoginAlreadyAssociated": "Käyttäjä, jolla on tämä sisäänkirjautuminen, on jo olemassa.", "Volo.Abp.Identity:PasswordMismatch": "Väärä salasana.", - "Volo.Abp.Identity:PasswordRequiresDigit": "Salasanoissa on oltava vähintään yksi numero ('0' - '9').", - "Volo.Abp.Identity:PasswordRequiresLower": "Salasanoissa on oltava vähintään yksi pieni kirjain ('a' - 'z').", + "Volo.Abp.Identity:PasswordRequiresDigit": "Salasanoissa on oltava vähintään yksi numero ('0'-'9').", + "Volo.Abp.Identity:PasswordRequiresLower": "Salasanoissa on oltava vähintään yksi pieni kirjain ('a'-'z').", "Volo.Abp.Identity:PasswordRequiresNonAlphanumeric": "Salasanoissa on oltava vähintään yksi ei-aakkosnumeerinen merkki.", - "Volo.Abp.Identity:PasswordRequiresUpper": "Salasanoissa on oltava vähintään yksi isot kirjaimet (A - Z).", + "Volo.Abp.Identity:PasswordRequiresUpper": "Salasanoissa on oltava vähintään yksi isot kirjaimet ('A'-'Z').", "Volo.Abp.Identity:PasswordTooShort": "Salasanojen on oltava vähintään {0} merkkiä.", "Volo.Abp.Identity:RoleNotFound": "Roolia {0} ei ole olemassa.", "Volo.Abp.Identity:UserAlreadyHasPassword": "Käyttäjällä on jo asetettu salasana.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hi.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hi.json index a0b4e70c15..305d5a514b 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hi.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hi.json @@ -48,8 +48,8 @@ "Volo.Abp.Identity:InvalidUserName": "उपयोगकर्ता नाम '{0}' अमान्य है, इसमें केवल अक्षर या अंक हो सकते हैं।", "Volo.Abp.Identity:LoginAlreadyAssociated": "इस लॉगिन वाला उपयोगकर्ता पहले से मौजूद है।", "Volo.Abp.Identity:PasswordMismatch": "गलत पासवर्ड।", - "Volo.Abp.Identity:PasswordRequiresDigit": "पासवर्ड में कम से कम एक अंक ('0' - '9') होना चाहिए।", - "Volo.Abp.Identity:PasswordRequiresLower": "पासवर्ड में कम से कम एक लोअरकेस ('a' - 'z') होना चाहिए।", + "Volo.Abp.Identity:PasswordRequiresDigit": "पासवर्ड में कम से कम एक अंक ('0'-'9') होना चाहिए।", + "Volo.Abp.Identity:PasswordRequiresLower": "पासवर्ड में कम से कम एक लोअरकेस ('a'-'z') होना चाहिए।", "Volo.Abp.Identity:PasswordRequiresNonAlphanumeric": "पासवर्ड में कम से कम एक गैर अल्फ़ान्यूमेरिक वर्ण होना चाहिए।", "Volo.Abp.Identity:PasswordRequiresUpper": "पासवर्ड में कम से कम एक अपरकेस ('ए' - 'जेड') होना चाहिए।", "Volo.Abp.Identity:PasswordTooShort": "पासवर्ड कम से कम {0} वर्ण का होना चाहिए।", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/it.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/it.json index 48bd4e8771..1199298be0 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/it.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/it.json @@ -12,23 +12,23 @@ "DisplayName:IsStatic": "Statico", "DisplayName:IsPublic": "Pubblico", "Roles": "Ruoli", - "Password": "Parola d'ordine", + "Password": "Password", "PersonalInfo": "Il mio profilo", "PersonalSettings": "Impostazioni personali", - "UserDeletionConfirmationMessage": "L'utente \"{0}\" verrà eliminato. Lo confermi?", - "RoleDeletionConfirmationMessage": "Il ruolo \"{0}\" verrà eliminato. Lo confermi?", + "UserDeletionConfirmationMessage": "L'utente '{0}' verrà eliminato. Lo confermi?", + "RoleDeletionConfirmationMessage": "Il ruolo '{0}' verrà eliminato. Lo confermi?", "DisplayName:RoleName": "Nome del ruolo", "DisplayName:UserName": "Nome utente", "DisplayName:Name": "Nome", "DisplayName:Surname": "Cognome", - "DisplayName:Password": "Parola d'ordine", + "DisplayName:Password": "Password", "DisplayName:Email": "Indirizzo e-mail", "DisplayName:PhoneNumber": "Numero di telefono", "DisplayName:TwoFactorEnabled": "Verifica a due fattori", "DisplayName:LockoutEnabled": "Blocca account dopo tentativi di accesso falliti", "NewRole": "Nuovo ruolo", "RoleName": "Nome del ruolo", - "CreationTime": "Tempo di creazione", + "CreationTime": "Orario di creazione", "Permissions": "Autorizzazioni", "DisplayName:CurrentPassword": "Password attuale", "DisplayName:NewPassword": "Nuova password", @@ -37,43 +37,43 @@ "PersonalSettingsSavedMessage": "Le tue impostazioni personali sono state salvate con successo.", "Volo.Abp.Identity:DefaultError": "Si è verificato un errore sconosciuto.", "Volo.Abp.Identity:ConcurrencyFailure": "Errore di concorrenza ottimistica, l'oggetto è stato modificato.", - "Volo.Abp.Identity:DuplicateEmail": "L'email \"{0}\" è già stata accettata.", - "Volo.Abp.Identity:DuplicateRoleName": "Il nome del ruolo \"{0}\" è già stato utilizzato.", - "Volo.Abp.Identity:DuplicateUserName": "Il nome utente \"{0}\" è già in uso.", - "Volo.Abp.Identity:InvalidEmail": "L'email \"{0}\" non è valida.", + "Volo.Abp.Identity:DuplicateEmail": "L'email '{0}' è già stata accettata.", + "Volo.Abp.Identity:DuplicateRoleName": "Il nome del ruolo '{0}' è già stato utilizzato.", + "Volo.Abp.Identity:DuplicateUserName": "Il nome utente '{0}' è già in uso.", + "Volo.Abp.Identity:InvalidEmail": "L'email '{0}' non è valida.", "Volo.Abp.Identity:InvalidPasswordHasherCompatibilityMode": "Il PasswordHasherCompatibilityMode fornito non è valido.", "Volo.Abp.Identity:InvalidPasswordHasherIterationCount": "Il conteggio delle iterazioni deve essere un numero intero positivo.", - "Volo.Abp.Identity:InvalidRoleName": "Il nome del ruolo \"{0}\" non è valido.", - "Volo.Abp.Identity:InvalidToken": "Gettone non valido.", - "Volo.Abp.Identity:InvalidUserName": "Il nome utente \"{0}\" non è valido, può contenere solo lettere o cifre.", + "Volo.Abp.Identity:InvalidRoleName": "Il nome del ruolo '{0}' non è valido.", + "Volo.Abp.Identity:InvalidToken": "Token non valido.", + "Volo.Abp.Identity:InvalidUserName": "Il nome utente '{0}' non è valido, può contenere solo lettere o cifre.", "Volo.Abp.Identity:LoginAlreadyAssociated": "Esiste già un utente con questo accesso.", "Volo.Abp.Identity:PasswordMismatch": "Password errata.", - "Volo.Abp.Identity:PasswordRequiresDigit": "Le password devono contenere almeno una cifra (\"0\" - \"9\").", - "Volo.Abp.Identity:PasswordRequiresLower": "Le password devono contenere almeno una minuscola (\"a\" - \"z\").", + "Volo.Abp.Identity:PasswordRequiresDigit": "Le password devono contenere almeno una cifra ('0'-'9').", + "Volo.Abp.Identity:PasswordRequiresLower": "Le password devono contenere almeno una minuscola ('a'-'z').", "Volo.Abp.Identity:PasswordRequiresNonAlphanumeric": "Le password devono contenere almeno un carattere non alfanumerico.", - "Volo.Abp.Identity:PasswordRequiresUpper": "Le password devono contenere almeno una maiuscola (\"A\" - \"Z\").", + "Volo.Abp.Identity:PasswordRequiresUpper": "Le password devono contenere almeno una maiuscola ('A'-'Z').", "Volo.Abp.Identity:PasswordTooShort": "Le password devono contenere almeno {0} caratteri.", "Volo.Abp.Identity:RoleNotFound": "Il ruolo {0} non esiste.", "Volo.Abp.Identity:UserAlreadyHasPassword": "L'utente ha già una password impostata.", - "Volo.Abp.Identity:UserAlreadyInRole": "Utente già nel ruolo \"{0}\".", + "Volo.Abp.Identity:UserAlreadyInRole": "Utente già nel ruolo '{0}'.", "Volo.Abp.Identity:UserLockedOut": "L'utente è bloccato.", "Volo.Abp.Identity:UserLockoutNotEnabled": "Il blocco non è abilitato per questo utente.", "Volo.Abp.Identity:UserNameNotFound": "L'utente {0} non esiste.", - "Volo.Abp.Identity:UserNotInRole": "L'utente non è nel ruolo \"{0}\".", + "Volo.Abp.Identity:UserNotInRole": "L'utente non è nel ruolo '{0}'.", "Volo.Abp.Identity:PasswordConfirmationFailed": "La password non corrisponde alla password di conferma.", "Volo.Abp.Identity:010001": "Non puoi cancellare il tuo account!", "Volo.Abp.Identity:010002": "Impossibile impostare più di {MaxUserMembershipCount} unità organizzativa per un utente!", - "Volo.Abp.Identity:010003": "Non è possibile modificare la password di un utente connesso esternamente!", + "Volo.Abp.Identity:010003": "Non è possibile Modifica la password di un utente connesso esternamente!", "Volo.Abp.Identity:010004": "Esiste già un'unità organizzativa con nome {0}. Non è possibile creare due unità con lo stesso nome nello stesso livello.", "Volo.Abp.Identity:010005": "I ruoli statici non possono essere rinominati.", "Volo.Abp.Identity:010006": "I ruoli statici non possono essere eliminati.", - "Volo.Abp.Identity:010007": "Non puoi modificare l'impostazione dei due fattori.", - "Volo.Abp.Identity:010008": "Non è consentito modificare l'impostazione a due fattori.", + "Volo.Abp.Identity:010007": "Non puoi Modifica l'impostazione dei due fattori.", + "Volo.Abp.Identity:010008": "Non è consentito Modifica l'impostazione a due fattori.", "Identity.OrganizationUnit.MaxUserMembershipCount": "Numero massimo consentito di membri dell'unità organizzativa per un utente", "Permission:IdentityManagement": "Gestione dell'identità", "Permission:RoleManagement": "Gestione dei ruoli", - "Permission:Create": "Creare", - "Permission:Edit": "modificare", + "Permission:Create": "Crea", + "Permission:Edit": "Modifica", "Permission:Delete": "Elimina", "Permission:ChangePermissions": "Modifica le autorizzazioni", "Permission:UserManagement": "Gestione utenti", @@ -90,8 +90,8 @@ "DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail": "Richiedi email confermata", "DisplayName:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Consenti agli utenti di confermare il proprio numero di telefono", "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Richiedi un numero di telefono confermato", - "DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled": "Consenti agli utenti di modificare i propri nomi utente", - "DisplayName:Abp.Identity.User.IsEmailUpdateEnabled": "Consenti agli utenti di modificare i propri indirizzi email", + "DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled": "Consenti agli utenti di Modifica i propri nomi utente", + "DisplayName:Abp.Identity.User.IsEmailUpdateEnabled": "Consenti agli utenti di Modifica i propri indirizzi email", "Description:Abp.Identity.Password.RequiredLength": "La lunghezza minima che deve essere una password.", "Description:Abp.Identity.Password.RequiredUniqueChars": "Il numero minimo di caratteri univoci che una password deve contenere.", "Description:Abp.Identity.Password.RequireNonAlphanumeric": "Se le password devono contenere un carattere non alfanumerico.", diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/it.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/it.json index ca44d39a38..127f7a12c3 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/it.json +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/it.json @@ -2,12 +2,12 @@ "culture": "it", "texts": { "Volo.IdentityServer:DuplicateIdentityResourceName": "Il nome della risorsa identità esiste già: {Name}", - "Volo.IdentityServer:DuplicateApiResourceName": "Il nome della risorsa API esiste già: {Name}", - "Volo.IdentityServer:DuplicateApiScopeName": "Il nome dell'ambito API esiste già: {Name}", + "Volo.IdentityServer:DuplicateApiResourceName": "L'Api Resource esiste già: {Name}", + "Volo.IdentityServer:DuplicateApiScopeName": "L'API Scope esiste già: {Name}", "Volo.IdentityServer:DuplicateClientId": "ClientId già esistente: {ClientId}", "UserLockedOut": "L'account utente è stato bloccato a causa di tentativi di accesso non validi. Attendi qualche istante e riprova.", "InvalidUserNameOrPassword": "Username o password non validi!", - "LoginIsNotAllowed": "Non sei autorizzato ad accedere! Devi confermare la tua email / numero di telefono.", + "LoginIsNotAllowed": "Non sei autorizzato ad accedere! Devi confermare la tua email/numero di telefono.", "InvalidUsername": "Username o password non validi!", "TheTargetUserIsNotLinkedToYou": "L'utente di destinazione non è collegato a te!" } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/it.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/it.json index 5fde62505d..3e1a443c92 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/it.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/it.json @@ -1,19 +1,19 @@ { "culture": "it", "texts": { - "Settings": "impostazioni", + "Settings": "Impostazioni", "SuccessfullySaved": "Salvato con successo", "Permission:SettingManagement": "Gestione delle impostazioni", "Permission:Emailing": "Invio di e-mail", "Menu:Emailing": "Invio di e-mail", - "SmtpHost": "Ospite", + "SmtpHost": "Host", "SmtpPort": "Porta", "SmtpUserName": "Nome utente", "SmtpPassword": "Parola d'ordine", "SmtpDomain": "Dominio", "SmtpEnableSsl": "Abilita SSL", "SmtpUseDefaultCredentials": "Usa credenziali predefinite", - "DefaultFromAddress": "Indirizzo predefinito dall'indirizzo", - "DefaultFromDisplayName": "Predefinito dal nome visualizzato" + "DefaultFromAddress": "Indirizzo mittente predefinito", + "DefaultFromDisplayName": "Nome mittente visualizzato predefinito" } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/it.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/it.json index e635da5d1f..d55876e5eb 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/it.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/it.json @@ -1,19 +1,19 @@ { "culture": "it", "texts": { - "Menu:TenantManagement": "Gestione inquilini", - "Tenants": "Inquilini", - "NewTenant": "Nuovo inquilino", - "TenantName": "Nome inquilino", - "DisplayName:TenantName": "Nome inquilino", - "TenantDeletionConfirmationMessage": "Il tenant \"{0}\" verrà eliminato. Lo confermi?", + "Menu:TenantManagement": "Gestione tenants", + "Tenants": "Tenants", + "NewTenant": "Nuovo Tenant", + "TenantName": "Nome tenant", + "DisplayName:TenantName": "Nome tenant", + "TenantDeletionConfirmationMessage": "Il tenant '{0}' verrà eliminato. Lo confermi?", "ConnectionStrings": "Stringhe di connessione", "DisplayName:DefaultConnectionString": "Stringa di connessione predefinita", "DisplayName:UseSharedDatabase": "Usa il database condiviso", "ManageHostFeatures": "Gestisci le funzionalità dell'host", "Permission:TenantManagement": "Gestione inquilini", - "Permission:Create": "Creare", - "Permission:Edit": "modificare", + "Permission:Create": "Crea", + "Permission:Edit": "Modifica", "Permission:Delete": "Elimina", "Permission:ManageConnectionStrings": "Gestisci le stringhe di connessione", "Permission:ManageFeatures": "Gestisci le funzionalità", diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html index c3fdbdff07..a197405837 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-form/extensible-form-prop.component.html @@ -2,6 +2,7 @@