From 75bea27b1688d64d314b68a2817727c856f763f8 Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino Date: Sat, 23 Sep 2023 19:22:16 +0200 Subject: [PATCH 01/17] Fixed errors - Added Contributing and ReleaseNotes --- docs/contributing/contributing.it.md | 57 ++++++++++++++++++ docs/getting-started/folder-structure.it.md | 18 +++--- docs/getting-started/hello-world.it.md | 30 +++++----- docs/getting-started/spm.it.md | 14 ++--- docs/getting-started/xcode.it.md | 6 +- docs/index.it.md | 12 ++-- docs/install/linux.it.md | 22 +++---- docs/install/macos.it.md | 20 +++---- docs/release-notes.it.md | 65 +++++++++++++++++++++ docs/upgrading.it.md | 60 +++++++++---------- mkdocs.yml | 5 +- 11 files changed, 216 insertions(+), 93 deletions(-) create mode 100644 docs/contributing/contributing.it.md create mode 100644 docs/release-notes.it.md diff --git a/docs/contributing/contributing.it.md b/docs/contributing/contributing.it.md new file mode 100644 index 000000000..9f7e61e8b --- /dev/null +++ b/docs/contributing/contributing.it.md @@ -0,0 +1,57 @@ +# Contribuire a Vapor + +Vapor è un progetto gestito dalla community e le contribuzioni dai membri della community formano una parte significante dello sviluppo di Vapor. Questa guida ti aiuterà a capire il processo di contribuzione e aiutarti a fare i tuoi primi commit in Vapor! + +Qualsiasi contributo darai sarà utile! Anche le piccole cose come aggiustare errori di battitura fanno la differenza per le persone che usano Vapor. + +## Codice di Condotta + +Vapor ha adottato il Codice di Condotta di Swift che puoi trovare su [https://www.swift.org/code-of-conduct/](https://www.swift.org/code-of-conduct/). Tutti i contributori devono seguire il codice di condotta. + +## Su cosa lavorare + +Capire su cosa lavorare può essere un grande ostacolo quando sei agli inizi nell'open source! Di solito le cose migliori su cui lavorare sono problemi che incontri o funzionalità che vuoi. Tuttavia, Vapor ha delle cose utili per aiutarti a contribuire. + +### Problemi di sicurezza + +Se scopri un problema di sicurezza e vuoi riferirlo o aiutare a risolverlo perfavore **non** creare una issue o una pull request. Abbiamo un processo separato per i problemi di sicurezza per assicurare che non esponiamo vulnerabilità finché una soluzione non è disponibile. Manda una email a security@vapor.codes o [guarda qui](https://github.com/vapor/.github/blob/main/SECURITY.md) per più dettagli. + +### Piccoli problemi + +Se trovi un piccolo problema, bug o errore di battitura, sentiti libero di procedere e creare una pull request per risolverlo. Se risolve una issue aperta su una qualsiasi delle repo puoi linkarla nella pull request nella barra laterale in modo che la issue viene automaticamente chiusa quando la pull request viene unita. + +![GitHub Link Issue](../images/github-link-issue.png) + +### Nuove funzionalità + +Se vuoi proporre cambiamenti più grandi, come nuove funzionalità o bug fix che cambiano quantità significative di codice, allora perfavore apri una issue prima o fai un post nel canale `#development` di Discord. Questo ci permette di discutere il cambiamento con te in quanto potrebbe esserci del contesto che dobbiamo applicare o possiamo darti delle indicazioni. Non vogliamo farti perdere tempo se una funzionalità non rientra nei nostri piani! + +### Bacheca di Vapor + +Se vuoi solo contribuire ma non hai idea su cosa lavorare, fantastico! Vapor ha un paio di bacheche che possono aiutarti. Vapor ha circa 40 repository che sono attivamente sviluppate e cercare fra tutte queste per trovare qualcosa su cui lavorare non è fattibile, quindi delle bacheche per aggregarle. + +La prima bachecha è la [bacheca delle buone prime issue](https://github.com/orgs/vapor/projects/10). Ogni issue nell'organizzazione GitHub di Vapor che è taggata come `good first issue` sarà aggiunta alla bacheca. Queste sono issue che pensiamo possano essere buone per persone relativamente nuove a Vapor per lavorarci su, in quanto non richiedono molta esperienza sul codice. + +La seconda bacheca è la [bacheca dell'aiuto cercasi](https://github.com/orgs/vapor/projects/11). Questa contiene issue taggate `help wanted`. Queste sono issue che potrebbero essere aggiustate, ma la squadra principale al momento ha altre priorità. Queste issue di solito richiedono un po' più di conoscenza se non sono anche taggate `good first issue`, ma potrebbero essere un progetto divertente su cui lavorare! + +### Traduzioni + +L'area finale in cui le contribuzioni sono estremamente importanti è la documentazione. La documentazione ha traduzioni per diverse lingue, ma non tutte le pagine sono tradotte e ci sono molte altre lingue che ci piacerebbe supportare! Se sei interessato a contribuire con nuove lingue o aggiornamenti guarda il [README della documentazione](https://github.com/vapor/docs#translating) o fatti sentire nel canale `#documentation` su Discord. + +## Processo di Contribuzione + +Se non hai mai lavorato ad un progetto open source, i passi per contribuire effettivamente potrebbero sembrare confusionari, ma sono molto semplici. + +Primo, forka Vapor o qualsiasi repo sulla quale vuoi lavorare. Puoi farlo nell'interfaccia GitHub e GitHub ha [un'ottima documentazione](https://docs.github.com/en/get-started/quickstart/fork-a-repo) su come farlo. + +A questo punto puoi fare cambiamenti nella tua fork con il solito processo di commit e push. Quando sei pronto a presentare i tuoi cambiamenti, puoi creare una PR sulla repo di Vapor. Di nuovo, GitHub ha [un'ottima documentazione](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork) su come farlo. + +## Presentare una Pull Request + +Quando presenti una pull request delle cose che dovresti controllare: + +* Che tutti i test passino +* Che ci siano nuovi test aggiunti per ogni nuovo comportamento o bug fixato +* Che le nuove API pubbliche siano documentate. Usiamo DocC per la documentazione delle nostre API. + +Vapor usa automazioni per ridurre il carico di lavoro richiesto per molti compiti. Per le pull requests, usiamo il [Bot Vapor](https://github.com/VaporBot) per generare release quando una pull request è unita. Il corpo e il titolo della pull request sono usati per generare le note sulla versione, quindi assicurati che abbiano senso e mettici quello che ti aspetti di vedere in una nota sulla versione. Ci sono più dettagli sulle [linee guida alla contribuzione di Vapor](https://github.com/vapor/vapor/blob/main/.github/contributing.md#release-title). diff --git a/docs/getting-started/folder-structure.it.md b/docs/getting-started/folder-structure.it.md index 87ffc9cc1..5f71b58e8 100644 --- a/docs/getting-started/folder-structure.it.md +++ b/docs/getting-started/folder-structure.it.md @@ -1,6 +1,6 @@ -# Struttura della Cartella +# Struttura delle Cartelle -Dopo aver creato, compilato ed eseguito la vostra prima applicazione, è il momento di dare un'occhiata a come Vapor struttura la cartella del progetto. La struttura si basa su [SwiftPM](spm.md), quindi se avete già familiarità con SwiftPM vi sentirete a casa. +Dopo aver creato, compilato ed eseguito la tua prima applicazione, è il momento di dare un'occhiata a come Vapor struttura le cartelle del progetto. La struttura si basa su [SwiftPM](spm.md), quindi se hai già familiarità con SwiftPM ti sentirai a casa. ``` . @@ -19,13 +19,13 @@ Dopo aver creato, compilato ed eseguito la vostra prima applicazione, è il mome └── Package.swift ``` -Le seguenti sezioni spiegano in maggior dettaglio la struttura della cartella. +Le seguenti sezioni spiegano in maggior dettaglio la struttura delle cartelle. ## Public -Questa cartella contiene tutti i file pubblici che saranno messi a disposizione dall'applicazione se `FileMiddleware` è abilitato. In genere si tratta di immagini, fogli di stile e script del browser. Ad esempio, una richiesta a `localhost:8080/favicon.ico` controlla se `Public/favicon.ico` esiste e lo restituisce. +Questa cartella contiene tutti i file pubblici che saranno messi a disposizione dall'applicazione se `FileMiddleware` è abilitato. In genere si tratta di immagini, style sheet e script del browser. Ad esempio, una richiesta a `localhost:8080/favicon.ico` controlla se `Public/favicon.ico` esiste e lo restituisce. -Perché Vapor possa servire i file pubblici, bisognerà abilitare `FileMiddleware` nel file `configure.swift`. +Affinché Vapor possa servire i file pubblici, bisognerà abilitare `FileMiddleware` nel file `configure.swift`. ```swift // Fornisce i file dalla cartella `Public/` @@ -38,7 +38,7 @@ app.middleware.use(fileMiddleware) ## Sources Questa cartella contiene tutti i file sorgente Swift che verranno utilizzati dal progetto. -La cartella di primo livello, `App`, riflette il modulo del vostro pacchetto, come dichiarato nel manifesto [SwiftPM](spm.md). +La cartella di primo livello, `App`, riflette il modulo del tuo pacchetto, come dichiarato nel manifesto [SwiftPM](spm.md). ### App @@ -66,15 +66,15 @@ Questo file contiene la funzione `main(_:)`. Questo metodo viene chiamato dal si #### routes.swift -Questo file contiene la funzione `routes(_:)`. Questo metodo viene chiamato da `configure(_:)` per registrare gli endpoints dell'applicazione. +Questo file contiene la funzione `routes(_:)`. Questo metodo viene chiamato da `configure(_:)` per registrare gli endpoint dell'applicazione. ## Tests -Per ogni mdulo non eseguibile nella cartella `Sources` si può avere una cartella corrispondente in `Tests`. Essa conterrà i test per quel modulo scritti sulla base del modulo di testing `XCTest`. I test possono essere eseguiti utilizzando `swift test` da riga di comando o premendo ⌘+U in Xcode. +Per ogni modulo non eseguibile nella cartella `Sources` si può avere una cartella corrispondente in `Tests`. Essa conterrà i test per quel modulo scritti sulla base del modulo di testing `XCTest`. I test possono essere eseguiti utilizzando `swift test` da riga di comando o premendo ⌘+U in Xcode. ### AppTests -Questa cartella contiene gli unit tests per il codice del modulo `App`. +Questa cartella contiene gli unit test per il codice del modulo `App`. ## Package.swift diff --git a/docs/getting-started/hello-world.it.md b/docs/getting-started/hello-world.it.md index e4aaeda74..31ec36c12 100644 --- a/docs/getting-started/hello-world.it.md +++ b/docs/getting-started/hello-world.it.md @@ -1,15 +1,15 @@ # Ciao, mondo -Questa guida vi mostrerà, passo dopo passo, come creare, compilare ed eseguire il vostro primo progetto con Vapor. +Questa guida ti mostrerà, passo dopo passo, come creare, compilare ed eseguire il tuo primo progetto con Vapor. -Se non avete ancora installato Swift o la Toolbox Vapor, seguite la guida di installazione prima di continuare. +Se non hai ancora installato Swift o la Toolbox Vapor, segui la guida di installazione prima di continuare. - [Installazione → macOS](../install/macos.md) - [Installazione → Linux](../install/linux.md) ## Nuovo Progetto -Il primo passo è creare un nuovo progetto Vapor sul vostro computer. Aprite il terminale e utilizzate il comando `new` della Toolbox. Questo creerà una nuova cartella nella directory corrente contenente il progetto. +Il primo passo è creare un nuovo progetto Vapor sul tuo computer. Apri il terminale e utilizza il comando `new` della Toolbox. Questo creerà una nuova cartella nella directory corrente contenente il progetto. ```sh vapor new hello -n @@ -20,10 +20,10 @@ vapor new hello -n !!! tip Vapor e il template ora utilizzano `async`/`await` di default. - Se non potete aggiornare a macOS 12 e/o avete bisogno di continuare ad utilizzare gli `EventLoopFuture`s, - utilizzate l'opzione `--branch macos10-15`. + Se non puoi aggiornare a macOS 12 e/o hai bisogno di continuare ad utilizzare gli `EventLoopFuture`, + utilizza l'opzione `--branch macos10-15`. -Una volta terminato il comando, entrate nella cartella appena creata: +Una volta terminato il comando, entra nella cartella appena creata: ```sh cd hello @@ -33,17 +33,17 @@ cd hello ### Xcode -Per prima cosa, aprite il progetto in Xcode: +Per prima cosa, apri il progetto in Xcode: ```sh open Package.swift ``` -Xcode inizierà automaticamente a scaricare le dipendenze di Swift Package Manager. La prima volta che aprite un progetto ci vorrà un po' di tempo. Quando la risoluzione delle dipendenze sarà completata, Xcode popolerà gli schemi disponibili. +Xcode inizierà automaticamente a scaricare le dipendenze di Swift Package Manager. La prima volta che apri un progetto ci vorrà un po' di tempo. Quando la risoluzione delle dipendenze sarà completata, Xcode popolerà gli schemi disponibili. -Nella parte superiore della finestra, alla destra dei pulsanti Play e Stop, cliccate sul nome del progetto per selezionare lo schema del progetto e selezionate un target di esecuzione appropriato, spesso "My Mac". Cliccate sul pulsante play per compilare ed eseguire il progetto. +Nella parte superiore della finestra, alla destra dei pulsanti Play e Stop, clicca sul nome del progetto per selezionare lo schema del progetto e seleziona un target di esecuzione appropriato, spesso "My Mac". Clicca sul pulsante play per compilare ed eseguire il progetto. -Dovreste ora veder apparire la Console nella parte inferiore della finestra di Xcode. +Dovresti ora veder apparire la Console nella parte inferiore della finestra di Xcode. ```sh [ INFO ] Server starting on http:// @@ -51,15 +51,15 @@ Dovreste ora veder apparire la Console nella parte inferiore della finestra di X ### Linux -Su Linux e altri sistemi operativi (e anche su macOS se non volete utilizzare Xcode) potete modificare il progetto nel vostro editor preferito, come Vim o VSCode. Per maggiori dettagli su come configurare altri IDE, consultate le [Guide di Swift sul Server](https://github.com/swift-server/guides/blob/main/docs/setup-and-ide-alternatives.md) +Su Linux e altri sistemi operativi (e anche su macOS se non volete utilizzare Xcode) puoi modificare il progetto nel tuo editor preferito, come Vim o VSCode. Per maggiori dettagli su come configurare altri IDE, consulta le [Guide di Swift sul Server](https://github.com/swift-server/guides/blob/main/docs/setup-and-ide-alternatives.md) -Per compilare ed eseguire il progetto, nel Terminale eseguite: +Per compilare ed eseguire il progetto, nel Terminale esegui: ```sh swift run ``` -Questo comando compilerà ed eseguirà il progetto. La prima volta che lo eseguite ci vorrà un po' di tempo per scaricare e indicizzare le dipendenze. Una volta avviato, dovrebbe apparire il seguente codice nel terminale: +Questo comando compilerà ed eseguirà il progetto. La prima volta che lo esegui ci vorrà un po' di tempo per scaricare e indicizzare le dipendenze. Una volta avviato, dovrebbe apparire il seguente codice nel terminale: ```sh [ INFO ] Server starting on http://127.0.0.1:8080 @@ -67,7 +67,7 @@ Questo comando compilerà ed eseguirà il progetto. La prima volta che lo esegui ## Visitare Localhost -Ora che il progetto è in esecuzione, aprite il vostro browser e visitate localhost:8080/hello oppure http://127.0.0.1:8080. +Ora che il progetto è in esecuzione, apri il tuo browser e visita localhost:8080/hello oppure http://127.0.0.1:8080. Dovrebbe apparire la seguente pagina: @@ -75,4 +75,4 @@ Dovrebbe apparire la seguente pagina: Hello, world! ``` -Congratulazioni per aver creato, compilato ed eseguito il vostro primo progetto Vapor! 🎉 +Congratulazioni per aver creato, compilato ed eseguito il tuo primo progetto Vapor! 🎉 diff --git a/docs/getting-started/spm.it.md b/docs/getting-started/spm.it.md index 9a79afc89..82e8ddfd4 100644 --- a/docs/getting-started/spm.it.md +++ b/docs/getting-started/spm.it.md @@ -1,12 +1,12 @@ # Swift Package Manager -Il [Swift Package Manager](https://swift.org/package-manager/) (SPM) è utilizzato per la compilazione del codice sorgente e delle dipendenze del vostro progetto. Poiché Vapor si basa molto su SPM, è una buona idea capire i suoi funzionamenti di base. +Il [Swift Package Manager](https://swift.org/package-manager/) (SPM) è utilizzato per la compilazione del codice sorgente e delle dipendenze del tuo progetto. Poiché Vapor si basa molto su SPM, è una buona idea capire i suoi funzionamenti di base. SPM è simile a Cocoapods, Ruby gems e NPM. Si può utilizzare SPM dalla riga di comando con comandi come `swift build` e `swift test` o con IDE compatibili. Tuttavia, a differenza di alcuni altri package manager, non esiste un indice centrale dei pacchetti SPM. Esso sfrutta invece gli URL delle repository Git e le dipendenze delle versioni utilizzando i [tag Git](https://git-scm.com/book/en/v2/Git-Basics-Tagging). ## Manifesto del Pacchetto -Il primo posto in cui SPM cerca nel vostro progetto è il manifesto del pacchetto. Questo dovrebbe sempre essere situato nella directory principale del vostro progetto e chiamarsi `Package.swift`. +Il primo posto che SPM cerca nel tuo progetto è il manifesto del pacchetto. Questo dovrebbe sempre essere situato nella directory principale del tuo progetto e chiamarsi `Package.swift`. Diamo un'occhiata a questo esempio di manifesto del pacchetto. @@ -60,18 +60,18 @@ Nell'esempio precedente, si può notare che il pacchetto dipende da [vapor/vapor ### Target -I target sono i moduli che compongono il vostro pacchetto. I target possono essere eseguibili, librerie o test. Solitamente un progetto Vapor ha due target, tuttavia se ne possono aggiungere in modo da organizzare il codice. +I target sono i moduli che compongono il tuo pacchetto. I target possono essere eseguibili, librerie o test. Solitamente un progetto Vapor ha due target, tuttavia se ne possono aggiungere in modo da organizzare il codice. Ogni target dichiara i moduli da cui dipende. Per poter importare ed usare i vari moduli nel codice bisogna dichiarare qui i loro nomi. Un target può dipendere da altri target nello stesso pacchetto o da qualsiasi modulo presente nei pacchetti aggiunto all'array delle [dipendenze principali](#dependencies). -## Struttura della Cartella +## Struttura delle Cartelle -Questa è la tipica struttura di una cartella di un pacchetto SPM: +Questa è la tipica struttura delle cartelle di un pacchetto SPM: ``` . ├── Sources │ └── App -│ └── (Source code) +│ └── (Codice sorgente) ├── Tests │ └── AppTests └── Package.swift @@ -88,7 +88,7 @@ Per aggiornare le dipendenze basta eseguire `swift package update` e SPM aggiorn # Xcode -Usando Xcode qualsiasi cambiamento a dipendenze, target, prodotti ecc. sarà automatico non appena si salva il file `Package.swift`. +Usando Xcode qualsiasi cambiamento a dipendenze, target, prodotti, ecc. sarà automatico non appena si salva il file `Package.swift`. Per aggiornare le dipendenze, basta andare su File → Swift Packages → Update to Latest Package Versions. diff --git a/docs/getting-started/xcode.it.md b/docs/getting-started/xcode.it.md index 6b1905b29..0b3dc8dbe 100644 --- a/docs/getting-started/xcode.it.md +++ b/docs/getting-started/xcode.it.md @@ -1,12 +1,12 @@ # Xcode -Questa pagina contiene alcuni consigli e trucchi per l'utilizzo di Xcode. Non è necessaria se si preferisce usare un ambiente di sviluppo diverso. +Questa pagina contiene alcuni consigli e trucchi per l'utilizzo di Xcode. Puoi saltarla se preferisci usare un ambiente di sviluppo diverso. ## Directory di lavoro personalizzata Di default Xcode eseguirà il progetto dalla cartella _DerivedData_. Questa cartella non è la stessa della cartella principale del progetto (dove si trova il file _Package.swift_). Questo significa che Vapor non sarà in grado di trovare file e cartelle come _.env_ o _Public_. -Si può notare che questo sta accadendo se si vede il seguente avviso quando si esegue il progetto. +Si capisce se questo sta accadendo se si vede il seguente avviso quando si esegue il progetto. ```fish [ WARNING ] No custom working directory set for this scheme, using /path/to/DerivedData/project-abcdef/Build/ @@ -40,5 +40,5 @@ Si dovrebbe vedere un output simile al seguente. ``` framework: 4.x.x toolbox: 18.x.x -/path/to/project +/percorso/al/progetto ``` diff --git a/docs/index.it.md b/docs/index.it.md index 275fffae8..26b1e670b 100644 --- a/docs/index.it.md +++ b/docs/index.it.md @@ -1,14 +1,14 @@ -Benvenuti alla documentazione di Vapor! Vapor è un framework web per Swift. Esso permette di creare backend, applicazioni web, API e server HTTP in Swift. Vapor è scritto in Swift, un linguaggio moderno, potente e sicuro che fornisce diversi benefici rispetto a linguaggi lato server tradizionali. +Benvenuto nella documentazione di Vapor! Vapor è un framework web per Swift. Permette di creare backend, applicazioni web, API e server HTTP in Swift. Vapor è scritto in Swift, un linguaggio moderno, potente e sicuro che fornisce diversi benefici rispetto a linguaggi lato server tradizionali. ## Inizio -Se è la prima volta che utilizzate Vapor, dirigetevi a [Installazione → macOS](install/macos.md) per installare Swift e Vapor. +Se è la prima volta che utilizzi Vapor, vai su [Installazione → macOS](install/macos.md) per installare Swift e Vapor. -Una volta installato Vapor, date un'occhiata a [Inizio → Ciao, mondo](getting-started/hello-world.md) per creare la vostra prima applicazione Vapor! +Una volta installato Vapor, date un'occhiata a [Inizio → Ciao, mondo](getting-started/hello-world.md) per creare la tua prima applicazione Vapor! ## Altre Fonti -Elenchiamo alcuni altri ottimi posti dove trovare informazioni su Vapor. +Ecco alcuni altri ottimi posti dove trovare informazioni su Vapor. | nome | descrizione | link | |----------------|--------------------------------------------------|-------------------------------------------------------------------| @@ -19,6 +19,6 @@ Elenchiamo alcuni altri ottimi posti dove trovare informazioni su Vapor. | Codice Sorgente | Scopri come funziona Vapor sotto il cofano. | [visita →](https://github.com/vapor/vapor) | | Issues di GitHub | Segnala bug o richiedi funzionalità su GitHub. | [visita →](https://github.com/vapor/vapor/issues) | -## Documentazione Vecchia +## Documentazione Obsoleta -La documentazione per le versioni deprecate di Vapor che non sono più manutenute sono su [https://legacy.docs.vapor.codes/](https://legacy.docs.vapor.codes/). +La documentazione per le versioni deprecate di Vapor che non sono più manutenute è su [https://legacy.docs.vapor.codes/](https://legacy.docs.vapor.codes/). diff --git a/docs/install/linux.it.md b/docs/install/linux.it.md index 9c31b70fb..d283eb6c1 100644 --- a/docs/install/linux.it.md +++ b/docs/install/linux.it.md @@ -1,13 +1,13 @@ # Installazione su Linux -Per usare Vapor, avrete bisogno di Swift 5.2 o superiore. Potete installarlo usando le toolchains disponibili su [Swift.org](https://swift.org/download/) +Per usare Vapor, avrai bisogno di Swift 5.2 o superiore. Puoi installarlo usando le toolchain disponibili su [Swift.org](https://swift.org/download/) ## Distribuzioni e Versioni supportate Vapor supporta le stesse versioni delle distribuzioni Linux che supportano Swift 5.2 o versioni più recenti. !!! note - Le versioni supportate elencate di seguito potrebbero essere obsolete in qualsiasi momento. Potete controllare quali sistemi operativi sono ufficialmente supportati sulla pagina [Swift Releases](https://swift.org/download/#releases). + Le versioni supportate elencate di seguito potrebbero diventare obsolete in qualsiasi momento. Puoi controllare quali sistemi operativi sono ufficialmente supportati sulla pagina [Swift Releases](https://swift.org/download/#releases). |Distribuzione|Versione|Versione di Swift| |-|-|-| @@ -17,11 +17,11 @@ Vapor supporta le stesse versioni delle distribuzioni Linux che supportano Swift |CentOS|8|>= 5.2.4| |Amazon Linux|2|>= 5.2.4| -Le distribuzioni Linux non ufficialmente supportate possono comunque eseguire Swift compilando il codice sorgente, ma Vapor non può garantirne la stabilità. Potete saperne di più sulla compilazione di Swift dal [repo di Swift](https://github.com/apple/swift#getting-started). +Le distribuzioni Linux non ufficialmente supportate possono comunque eseguire Swift compilando il codice sorgente, ma Vapor non può garantirne la stabilità. Puoi saperne di più sulla compilazione di Swift dal [repo di Swift](https://github.com/apple/swift#getting-started). ## Installare Swift -Visitate la guida [Using Downloads](https://swift.org/download/#using-downloads) di Swift.org per le istruzioni su come installare Swift su Linux. +Visita la guida [Using Downloads](https://swift.org/download/#using-downloads) di Swift.org per le istruzioni su come installare Swift su Linux. ### Fedora @@ -31,17 +31,17 @@ Gli utenti Fedora possono semplicemente usare il seguente comando per installare sudo dnf install swift-lang ``` -Se state usando Fedora 30, dovrete aggiungere EPEL 8 per ottenere Swift 5.2 o versioni più recenti. +Se stai usando Fedora 30, dovrai aggiungere EPEL 8 per ottenere Swift 5.2 o versioni più recenti. ## Docker -Potete anche usare le immagini Docker ufficiali di Swift che includono il compilatore preinstallato. Potete saperne di più sul [Docker Hub di Swift](https://hub.docker.com/_/swift). +Puoi anche usare le immagini Docker ufficiali di Swift che includono il compilatore preinstallato. Puoi saperne di più sul [Docker Hub di Swift](https://hub.docker.com/_/swift). ## Installare la Toolbox -Ora che avete installato Swift, potete installare la [Toolbox di Vapor](https://github.com/vapor/toolbox). Questo strumento CLI non è necessario per usare Vapor, ma include degli strumenti utili. +Ora che hai installato Swift, puoi installare la [Toolbox di Vapor](https://github.com/vapor/toolbox). Questo strumento CLI non è necessario per usare Vapor, ma include degli strumenti utili. -Su Linux, dovrete compilare la toolbox dal codice sorgente. Guardate le release della toolbox su GitHub per trovare l'ultima versione. +Su Linux, dovrai compilare la toolbox dal codice sorgente. Guarda le release della toolbox su GitHub per trovare l'ultima versione. ```sh git clone https://github.com/vapor/toolbox.git @@ -50,14 +50,14 @@ git checkout make install ``` -Controllate che l'installazione sia andata a buon fine stampando l'aiuto. +Controlla che l'installazione sia andata a buon fine stampando l'aiuto. ```sh vapor --help ``` -Dovreste vedere una lista di comandi disponibili. +Dovresti vedere una lista di comandi disponibili. ## Come continuare -Dopo aver installato Vapor, potete iniziare a creare il vostro primo progetto usando [Inizio → Ciao, mondo](../getting-started/hello-world.it.md). +Dopo aver installato Vapor, puoi iniziare a creare il tuo primo progetto usando [Inizio → Ciao, mondo](../getting-started/hello-world.it.md). diff --git a/docs/install/macos.it.md b/docs/install/macos.it.md index 57d38fc09..c03a93457 100644 --- a/docs/install/macos.it.md +++ b/docs/install/macos.it.md @@ -1,22 +1,22 @@ # Installazione su macOS -Per usare Vapor su macOS, avrete bisogno di Swift 5.6 o superiore. Swift e tutte le sue dipendenze vengono installati automaticamente quando si installa Xcode. +Per usare Vapor su macOS, avrai bisogno di Swift 5.6 o superiore. Swift e tutte le sue dipendenze vengono installati automaticamente quando si installa Xcode. ## Installare Xcode -Potete installare Xcode dal [Mac App Store](https://apps.apple.com/us/app/xcode/id497799835?mt=12). +Puoi installare Xcode dal [Mac App Store](https://apps.apple.com/us/app/xcode/id497799835?mt=12). ![Xcode nel Mac App Store](../images/xcode-mac-app-store.png) -Dopo aver scaricato Xcode, dovete aprirlo per completare l'installazione. Questo potrebbe richiedere un po' di tempo. +Dopo aver scaricato Xcode, dovrai aprirlo per completare l'installazione. Questo potrebbe richiedere un po' di tempo. -Controllate che l'installazione sia andata a buon fine aprendo il Terminale e stampando la versione di Swift. +Controlla che l'installazione sia andata a buon fine aprendo il Terminale e stampando la versione di Swift. ```sh swift --version ``` -Dovreste vedere stampate le informazioni della versione di Swift: +Dovresti vedere stampate le informazioni della versione di Swift: ```sh swift-driver version: 1.75.2 Apple Swift version 5.8 (swiftlang-5.8.0.124.2 clang-1403.0.22.11.100) @@ -27,22 +27,22 @@ Vapor 4 richiede Swift 5.6 o superiore. ## Installare la Toolbox -Ora che avete installato Swift, potete installare la [Vapor Toolbox](https://github.com/vapor/toolbox). Questo strumento da linea di comando non è necessario per usare Vapor, ma include strumenti utili come il creatore di nuovi progetti. +Ora che hai installato Swift, puoi installare la [Vapor Toolbox](https://github.com/vapor/toolbox). Questo strumento da linea di comando non è necessario per usare Vapor, ma include strumenti utili come il creatore di nuovi progetti. -La toolbox è distribuita tramite Homebrew. Se non avete ancora Homebrew, visitate brew.sh per le istruzioni di installazione. +La toolbox è distribuita tramite Homebrew. Se non hai ancora Homebrew, visita brew.sh per le istruzioni di installazione. ```sh brew install vapor ``` -Controllate che l'installazione sia andata a buon fine stampando l'aiuto. +Controlla che l'installazione sia andata a buon fine stampando l'aiuto. ```sh vapor --help ``` -Dovreste vedere una lista di comandi disponibili. +Dovresti vedere una lista di comandi disponibili. ## Come continuare -Dopo aver installato Vapor, potete iniziare a creare il vostro primo progetto usando [Inizio → Ciao, mondo](../getting-started/hello-world.it.md). +Dopo aver installato Vapor, puoi iniziare a creare il tuo primo progetto usando [Inizio → Ciao, mondo](../getting-started/hello-world.it.md). diff --git a/docs/release-notes.it.md b/docs/release-notes.it.md new file mode 100644 index 000000000..9d057570a --- /dev/null +++ b/docs/release-notes.it.md @@ -0,0 +1,65 @@ +# Note sulla Versione di Vapor + +Siccome è difficile, se non impossibile, tenere la documentazione aggiornata costantemente, qui troverai le note sulla versione (release notes) di vari pacchetti differenti legati all'ecosistema Vapor. + +## vapor + +## fluent + +## fluent-kit + +## leaf + +## leaf-kit + +## fluent-postgres-driver + +## fluent-mysql-driver + +## fluent-sqlite-driver + +## fluent-mongo-driver + +## postgres-nio + +## mysql-nio + +## sqlite-nio + +## postgres-kit + +## mysql-kit + +## sqlite-kit + +## sql-kit + +## apns + +## queues + +## queues-redis-driver + +## redis + +## jwt + +## jwt-kit + +## websocket-kit + +## routing-kit + +## console-kit + +## async-kit + +## multipart-kit + +## toolbox + +## core + +## swift-codecov-action + +## api-docs diff --git a/docs/upgrading.it.md b/docs/upgrading.it.md index 5747f5db7..98cf3eca6 100644 --- a/docs/upgrading.it.md +++ b/docs/upgrading.it.md @@ -1,16 +1,16 @@ # Aggiornamento a 4.0 -Questa guida vi mostrerà come aggiornare un progetto Vapor 3.x a Vapor 4.x. La guida cercherà di coprire tutti i cambiamenti riguardanti i pacchetti Vapor e anche alcuni dei più comuni pacchetti di terze parti. Se notate qualcosa di mancante, non esitate a chiedere aiuto nella [chat del team Vapor](https://discord.gg/vapor). Anche issues e pull requests su GitHub sono ben accette. +Questa guida ti mostrerà come aggiornare un progetto Vapor 3.x a Vapor 4.x. La guida cercherà di coprire tutti i cambiamenti riguardanti i pacchetti Vapor e anche alcuni dei più comuni pacchetti di terze parti. Se noti che manca qualcosa, non esitare a chiedere aiuto nella [chat del team Vapor](https://discord.gg/vapor). Anche issues e pull requests su GitHub sono ben accette. ## Dipendenze -Per usare Vapor 4, avrete bisogno di almeno Xcode 11.4 e macOS 10.15. +Per usare Vapor 4, avrai bisogno di almeno Xcode 11.4 e macOS 10.15. La sezione Installazione della documentazione contiene le istruzioni per installare le dipendenze. ## Package.swift -Il primo passo per aggiornare a Vapor 4 è aggiornare il file delle dipendenze del pacchetto. Qui è riportato un esempio di un `Package.swift` aggiornato. Potete anche visitare il [template Package.swift aggiornato](https://github.com/vapor/template/blob/main/Package.swift). +Il primo passo per aggiornare a Vapor 4 è aggiornare il file delle dipendenze del pacchetto. Qui è riportato un esempio di un `Package.swift` aggiornato. Puoi anche visitare il [template Package.swift aggiornato](https://github.com/vapor/template/blob/main/Package.swift). ```diff -// swift-tools-version:4.0 @@ -97,14 +97,14 @@ Vapor potrebbe eventualmente aggiungere il supporto per piattaforme aggiuntive i Vapor 4 utilizza il supporto nativo di SPM di Xcode 11. Ciò significa che non ci sarà più bisogno di generare il file `.xcodeproj`. Per aprire un progetto Vapor 4 in Xcode, basterà aprire il file `Package.swift` tramite `vapor xcode` o `open Package.swift`, Xcode poi procederà a scaricare le dipendenze. -Una volta aggiornato il Package.swift, potreste dover chiudere Xcode e rimuovere i seguenti file dalla directory del progetto: +Una volta aggiornato il Package.swift, potresti dover chiudere Xcode e rimuovere i seguenti file dalla directory del progetto: - `Package.resolved` - `.build` - `.swiftpm` - `*.xcodeproj` -Una volta che le nuove dipendenze sono state scaricate, noterete errori di compilazione, probabilmente più di qualcuno. Non vi preoccupate! Vi mostreremo come risolverli. +Una volta che le nuove dipendenze sono state scaricate, noterai errori di compilazione, probabilmente un bel po'. Non ti preoccupare! Ti mostreremo come risolverli. ## Run @@ -126,7 +126,7 @@ Il file `main.swift` andrà a sostituire il file `app.swift`, quindi potete rimu ## App -Diamo un'occhiata a come aggiornare la strutura di base di App. +Diamo un'occhiata a come aggiornare la struttura di base di App. ### configure.swift @@ -158,9 +158,9 @@ public func configure(_ app: Application) throws { } ``` -Cambiamenti di sintassi per cose come routing, middleware, fluent ecc. sono menzionati nelle sezioni seguenti. +Cambiamenti di sintassi per cose come routing, middleware, fluent, ecc. sono menzionati nelle sezioni seguenti. -### routes.swift +### boot.swift Il contenuto di `boot` può essere inserito nel metodo `configure` dal momento che ora accetta un'istanza di `Application`. @@ -212,13 +212,13 @@ Invece che registrare un `MiddlewareConfig` ai servizi, i middleware possono ess + req.client.get("https://vapor.codes") ``` -Come Application, anche Request espone servizi come proprietà e metodi. È fortemente consigliato l'uso di servizi specifici alla Request da dentro le chiusure dei route handler. +Come Application, anche Request espone servizi come proprietà e metodi. È fortemente consigliato l'uso di servizi specifici alla Request da dentro le closure dei route handler. Questo nuovo pattern va a sostituire il vecchio pattern di `Container` e `Service` e `Config` che era usato in Vapor 3. -### Providers +### Provider -I providers sono stati rimossi in Vapor 4. I providers erano usati per registrare servizi e configurazioni ai servizi. Ora i pacchetti possono estendere direttamente `Application` e `Request` per registrare servizi e configurazioni. +I provider sono stati rimossi in Vapor 4. I provider erano usati per registrare servizi e configurazioni ai servizi. Ora i pacchetti possono estendere direttamente `Application` e `Request` per registrare servizi e configurazioni. Diamo un'occhiata a come è configurato Leaf in Vapor 4. @@ -241,7 +241,7 @@ Per usare Leaf, basta usare `app.leaf`. ### Ambiente -Si può accedere all'ambiente attuale (produzione, sviluppo ecc) tramite la proprietà `app.environment`. +Si può accedere all'ambiente attuale (produzione, sviluppo, ecc.) tramite la proprietà `app.environment`. ### Servizi Personalizzati @@ -294,7 +294,7 @@ app.storage[MyNumber.self] = 5 print(app.storage[MyNumber.self]) // 5 ``` -L'accsso a `Application.storage` può essere avvolto in una proprietà computata per rendere il codice più leggibile: +L'accesso a `Application.storage` può essere avvolto in una proprietà computata per rendere il codice più leggibile: ```swift extension Application { @@ -316,7 +316,7 @@ Vapor 4 utilizza le API asincrone di SwiftNIO direttamente senza fare l'overload Il cambiamento più ovvio è che il typealias `Future` di `EventLoopFuture` è stato rimosso. Si può risolvere questo problema semplicemente usando "trova e sostituisci". -In più NIO non supporta il label `to:` che veniva usato da Vapor 3, che comunque dato il nuovo sistema di inferenza dei tipi di Swift 5.2, non è più necessario. +In più NIO non supporta il label `to:` che veniva usato da Vapor 3, che comunque dato il nuovo sistema di inferenza dei tipi di Swift 5.2 non è più necessario. ```diff - futureA.map(to: String.self) { ... } @@ -338,7 +338,7 @@ Il `flatMap` globale di Vapor 3 per combinare diversi futuri non è più disponi ```diff - flatMap(futureA, futureB) { a, b in + futureA.and(futureB).flatMap { (a, b) in - // Do something with a and b. + // Fai qualcosa con a e b. } ``` @@ -346,7 +346,7 @@ Il `flatMap` globale di Vapor 3 per combinare diversi futuri non è più disponi Molti metodi e proprietà che utilizzavano `Data` ora usano `ByteBuffer`, un tipo di storage di byte più potente e performante. Potete leggere di più su `ByteBuffer` nella [documentazione di SwiftNIO](https://swiftpackageindex.com/apple/swift-nio/main/documentation/niocore/bytebuffer). -Per convertire un `ByteBuffer` a `Data` si può usare: +Per convertire un `ByteBuffer` in `Data` si può usare: ```swift Data(buffer.readableBytesView) @@ -415,7 +415,7 @@ futureA.flatMapThrowing { a in ## Routing -Ora le routes sono registrate direttamente su Application. +Ora le route sono registrate direttamente su Application. ```swift app.get("hello") { req in @@ -423,9 +423,9 @@ app.get("hello") { req in } ``` -Ciò significa che non c'è più bisogno di registrare un router ai servizi. Basta passare l'istanza di `Application` al metodo `routes` e si può cominciare ad aggiungere endpoints. Tutti i metodi disponibili sul `RoutesBuilder` sono disponibili su `Application`. +Ciò significa che non c'è più bisogno di registrare un router ai servizi. Basta passare l'istanza di `Application` al metodo `routes` e si può cominciare ad aggiungere endpoint. Tutti i metodi disponibili sul `RoutesBuilder` sono disponibili su `Application`. -### Content Sincrono +### Contenuto Sincrono La decodifica delle richieste è ora sincrona. @@ -458,7 +458,7 @@ In Vapor 4 gli URL sono divisi da virgole e non devono contenere `/`. ### Parametri di una route -Il protocollo `Parameter` è stato rimosso per promuovere l'uso di parametri chiamati esplicitamente. In questo modo si evitano problemi di parametri duplicati e il fetching non ordinato dei parametri nei middleware e nei gestori delle routes. +Il protocollo `Parameter` è stato rimosso per promuovere l'uso di parametri chiamati esplicitamente. In questo modo si evitano problemi di parametri duplicati e il fetching non ordinato dei parametri nei middleware e nei gestori delle route. ```diff - router.get("planets", String.parameter) { req in @@ -505,7 +505,7 @@ Ora l'API di Fluent è indipendente dal database su cui viene utilizzata. Basta + import Fluent ``` -### Models +### Modelli I modelli utilizzano il protocollo `Model` e devono essere delle classi: @@ -604,7 +604,7 @@ Le tabelle pivot sono modelli normali che conformano a `Model` con due propriet ### Query -Si può accedere al contesto del database utilizzando `req.db` nei route handlers. +Si può accedere al contesto del database utilizzando `req.db` nei route handler. ```diff - Planet.query(on: req) @@ -620,7 +620,7 @@ Ora i key path ai campi hanno il prefisso `$` per specificare che si tratta del + filter(\.$foo == ...) ``` -### Migrations +### Migrazioni Le migrazioni devono essere scritte manualmente e non si basano più sul concetto di reflection: @@ -645,19 +645,19 @@ I metodi `prepare` e `revert` non sono più statici. + func prepare(on database: Database) -> EventLoopFuture ``` -La creazione di uno schema builder è fatta tramite un metodo su `Database`. +La creazione di un costruttore di schema è fatta tramite un metodo su `Database`. ```diff - <#Database#>Database.create(Galaxy.self, on: conn) { builder in -- // Use builder. +- // Usa builder. - } + var builder = database.schema("Galaxy") -+ // Use builder. ++ // Usa builder. ``` -I metodi `create`, `update` e `delete` sono metodi dello schema builder e assomigliano al funzionamento di un query builder. +I metodi `create`, `update` e `delete` sono metodi del costruttore di schema e assomigliano al funzionamento di un costruttore di query. -La definizione dei campi è tipata tramite stringhe e segue il seguente pattern: +La definizione dei campi è tipata tramite stringhe e usa il seguente pattern: ```swift field(, , ) @@ -668,7 +668,7 @@ field(, , ) + builder.field("name", .string, .required) ``` -La costruzione degli schemi può essere concatenata come un query builder: +La costruzione degli schemi può essere concatenata come un costruttore di query: ```swift database.schema("Galaxy") @@ -765,7 +765,7 @@ app.users.use { req in } ``` -Si può ora accedere alla repository nei route handlers con `req.users.all()` e si può facilmente sostituire la repository con una mock per i test. Basta creare un nuovo file `TestUserRepository`: +Si può ora accedere alla repository nei route handler con `req.users.all()` e si può facilmente sostituire la repository con una simulata per i test. Basta creare un nuovo file `TestUserRepository`: ```swift final class TestUserRepository: UserRepository { var users: [User] diff --git a/mkdocs.yml b/mkdocs.yml index 21f4bad85..b8d2a9b33 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -281,13 +281,13 @@ plugins: Errors: Errori Files: File Fluent: Fluent - Folder Structure: Struttura della Cartella + Folder Structure: Struttura delle Cartelle Getting Started: Inizio Hello, world: Ciao, mondo Install: Installazione JWT: JWT Leaf: Leaf - Legacy Docs: Documentazione Legacy + Legacy Docs: Documentazione Obsoleta Logging: Logging Middleware: Middleware Migrations: Migrazioni @@ -298,6 +298,7 @@ plugins: Queues: Code Redis: Redis Relations: Relazioni + Release Notes: Note sulla Versione Routing: Routing Schema: Schema Security: Sicurezza From ac92d0646396c629e758517fd9fa95537dd32a77 Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino Date: Sun, 24 Sep 2023 12:43:02 +0200 Subject: [PATCH 02/17] Added Redis --- docs/redis/overview.it.md | 169 ++++++++++++++++++++++++++++++++++++++ docs/redis/sessions.it.md | 78 ++++++++++++++++++ 2 files changed, 247 insertions(+) create mode 100644 docs/redis/overview.it.md create mode 100644 docs/redis/sessions.it.md diff --git a/docs/redis/overview.it.md b/docs/redis/overview.it.md new file mode 100644 index 000000000..d0abd55f7 --- /dev/null +++ b/docs/redis/overview.it.md @@ -0,0 +1,169 @@ +# Redis + +[Redis](https://redis.io/) è uno dei più popolari store di strutture dati residente in memoria comunemente usato come cache o broker di messaggi. + +Questa libreria è un'integrazione tra Vapor e [**RediStack**](https://github.com/swift-server/RediStack), che è il driver sottostante che comunica con Redis. + +!!! note + La maggior parte delle funzionalità di Redis sono fornite da **RediStack**. + Raccomandiamo fortemente di acquisire familiarità con la sua documentazione. + + _I link saranno forniti quando appropriato._ + +## Pacchetto + +Il primo passo per usare Redis è aggiungerlo come dipendenza al tuo progetto nel tuo manifesto del pacchetto Swift. + +> Questo esempio è per un pacchetto esistente. Per avere aiuto a iniziare un nuovo progetto, guarda la guida principale su [Inizio](../getting-started/hello-world.md). + +```swift +dependencies: [ + // ... + .package(url: "https://github.com/vapor/redis.git", from: "4.0.0") +] +// ... +targets: [ + .target(name: "App", dependencies: [ + // ... + .product(name: "Redis", package: "redis") + ]) +] +``` + +## Configura + +Vapor impiega una strategia di pooling per le istanze [`RedisConnection`](https://swiftpackageindex.com/swift-server/RediStack/main/documentation/redistack/redisconnection), e ci sono varie opzioni per configurare connessioni singole come anche le pool stesse. + +Il minimo indispensabile richiesto per configurare Redis è fornire un URL per connettersi: + +```swift +let app = Application() + +app.redis.configuration = try RedisConfiguration(hostname: "localhost") +``` + +### Configurazione di Redis + +> Documentazione dell'API: [`RedisConfiguration`](https://api.vapor.codes/redis/documentation/redis/redisconfiguration) + +#### serverAddresses + +Se hai più endpoint Redis, come un cluster di istanze Redis, vorrai invece creare una collezione di [`[SocketAddress]`](https://swiftpackageindex.com/apple/swift-nio/main/documentation/niocore/socketaddress) da passare all'inizializzatore. + +Il modo più comune di creare un `SocketAddress` è con il metodo statico [`makeAddressResolvingHost(_:port:)`](https://swiftpackageindex.com/apple/swift-nio/main/documentation/niocore/socketaddress/makeaddressresolvinghost(_:port:)). + +```swift +let serverAddresses: [SocketAddress] = [ + try .makeAddressResolvingHost("localhost", port: RedisConnection.Configuration.defaultPort) +] +``` + +Per un singolo endpoint Redis, potrebbe essere più facile lavorare con gli inizializzatori pratici, in quanto si occuperanno di creare il `SocketAddress` per te: + +- [`.init(url:pool)`](https://api.vapor.codes/redis/documentation/redis/redisconfiguration/init(url:tlsconfiguration:pool:)-o9lf) (con `String` o [`Foundation.URL`](https://developer.apple.com/documentation/foundation/url)) +- [`.init(hostname:port:password:database:pool:)`](https://api.vapor.codes/redis/documentation/redis/redisconfiguration/init(hostname:port:password:tlsconfiguration:database:pool:)) + +#### password + +Se la tua istanza Redis è protetta da una password, dovrai passarla come argomento `password`. + +Ogni connessione, quando viene creata, sarà autenticata usando la password. + +#### database + +Questo è l'indice del database che intendi selezionare quando ogni connessione viene creata. + +Questo ti evita di dover mandare il comando `SELECT` a Redis da te. + +!!! warning + La selezione del database non è mantenuta. Stai attento quando mandi il comando `SELECT` da te. + +### Opzioni del Pool di Connessioni + +> Documentazione dell'API: [`RedisConfiguration.PoolOptions`](https://api.vapor.codes/redis/documentation/redis/redisconfiguration/pooloptions) + +!!! note + Solo le opzioni cambiate più comunemente sono evidenziate qui. Per tutte le altre opzioni, fai riferimento alla documentazione dell'API. + +#### minimumConnectionCount + +Questo è il valore che indica quante connessioni vuoi che ogni pool mantenga in ogni momento. + +Se il tuo valore è `0` allora se le connessioni si perdono per qualsiasi motivo, la pool non le ricreerà fino a quando non sarà necessario. + +Questa è conosciuta come connessione "cold start", e ha dell'overhead rispetto a mantenere un numero di connessioni minime. + +#### maximumConnectionCount + +Quest'opzione determina il comportamento di come il numero massimo di connessioni è mantenuto. + +!!! seealso + Fai riferimento all'API `RedisConnectionPoolSize` per familiarizzare con le opzioni disponibili. + +## Inviare un Comando + +Puoi inviare comandi usando la proprietà `.redis` su ogni istanza di [`Application`](https://api.vapor.codes/vapor/documentation/vapor/application) o di [`Request`](https://api.vapor.codes/vapor/documentation/vapor/request), che ti darà accesso a [`RedisClient`](https://swiftpackageindex.com/swift-server/RediStack/main/documentation/redistack/redisclient). + +Ogni `RedisClient` ha diverse estensioni per tutti i vari [comandi Redis](https://redis.io/commands). + +```swift +let value = try app.redis.get("my_key", as: String.self).wait() +print(value) +// Optional("my_value") + +// oppure + +let value = try await app.redis.get("my_key", as: String.self) +print(value) +// Optional("my_value") +``` + +### Comandi Non Supportati + +Se **RediStack** non dovesse supportare un comando con un metodo di estensione, puoi comunque mandarlo manualmente. + +```swift +// ogni valore dopo il comando è l'argomento di posizione che Redis si aspetta +try app.redis.send(command: "PING", with: ["hello"]) + .map { + print($0) + } + .wait() +// "hello" + +// oppure + +let res = try await app.redis.send(command: "PING", with: ["hello"]) +print(res) +// "hello" +``` + +## Modalità Pub/Sub + +Redis supporta la possibilità di entrare in una [modalità "Pub/Sub"](https://redis.io/topics/pubsub) dove una connessione può ascoltare specifici "canali" ed eseguire specifiche closure quando i canali abbonati pubblicano un "messaggio" (qualche valore dei dati). + +Un abbonamento ha un ciclo di vita ben definito: + +1. **subscribe**: invocato una volta quando l'abbonamento inizia +1. **message**: invocato da 0 a più volte man mano che i messaggi sono pubbicati ai canali abbonati +1. **unsubscribe**: invocato una volta quando l'abbonamento finisce, o su richiesta o quando la connessione viene persa + +Quando crei un abbonamento, devi fornire al meno un [`messageReceiver`](https://swiftpackageindex.com/swift-server/RediStack/main/documentation/redistack/redissubscriptionmessagereceiver) per gestire tutti i messaggi che sono pubblicati dai canali abbonati. + +Puoi facoltativamente fornire un `RedisSubscriptionChangeHandler` per `onSubscribe` e `onUnsubscribe` per gestire i loro rispettivi eventi di ciclo di vita. + +```swift +// crea 2 abbonamenti, uno per ogni canale fornito +app.redis.subscribe + to: "channel_1", "channel_2", + messageReceiver: { channel, message in + switch channel { + case "channel_1": // fai qualcosa col messaggio + default: break + } + }, + onUnsubscribe: { channel, subscriptionCount in + print("unsubscribed from \(channel)") + print("subscriptions remaining: \(subscriptionCount)") + } +``` diff --git a/docs/redis/sessions.it.md b/docs/redis/sessions.it.md new file mode 100644 index 000000000..471dad6e2 --- /dev/null +++ b/docs/redis/sessions.it.md @@ -0,0 +1,78 @@ +# Redis & Sessioni + +Redis può fungere da provider di archiviazione per il caching dei [dati di sessione](../advanced/sessions.md#session-data) come le credenziali degli utenti. + +Se non viene fornito un [`RedisSessionsDelegate`](https://api.vapor.codes/redis/documentation/redis/redissessionsdelegate) personalizzato, sarà utilizzato quello di default. + +## Comportamento di Default + +### Creazione di SessionID + +A meno che non implementi il metodo [`makeNewID()`](https://api.vapor.codes/redis/documentation/redis/redissessionsdelegate/makenewid()-3hyne) nel [tuo `RedisSessionsDelegate` personale](#redissessionsdelegate), tutti i valori [`SessionID`](https://api.vapor.codes/vapor/documentation/vapor/sessionid) saranno creati facendo quanto segue: + +1. Generare 32 byte di caratteri casuali +1. Codificare il valore in base64 + +Per esempio: `Hbxozx8rTj+XXGWAzOhh1npZFXaGLpTWpWCaXuo44xQ=` + +### Archiviazione di SessionData + +L'implementazione di default di `RedisSessionsDelegate` salverà [`SessionData`](https://api.vapor.codes/vapor/documentation/vapor/sessiondata) come una semplice stringa JSON usando `Codable`. + +A meno che non implementi il metodo [`makeRedisKey(for:)`](https://api.vapor.codes/redis/documentation/redis/redissessionsdelegate/makerediskey(for:)-5nfge) nel tuo `RedisSessionsDelegate` personale, `SessionData` sarà salvato in Redis con una chiave che precede il `SessionID` con `vrs-` (**V**apor **R**edis **S**essions) + +Per esempio: `vrs-Hbxozx8rTj+XXGWAzOhh1npZFXaGLpTWpWCaXuo44xQ=` + +## Registrare un Delegato Modificato + +Per modificare il modo in cui i dati vengono letti e scritti su Redis, registra il tuo oggetto `RedisSessionsDelegate` come segue: + +```swift +import Redis + +struct CustomRedisSessionsDelegate: RedisSessionsDelegate { + // implementazione +} + +app.sessions.use(.redis(delegate: CustomRedisSessionsDelegate())) +``` + +## RedisSessionsDelegate + +> Documentazione dell'API: [`RedisSessionsDelegate`](https://api.vapor.codes/redis/documentation/redis/redissessionsdelegate) + +Un oggetto che è conforme a questo protocollo può essere usato per cambiare come `SessionData` è salvato in Redis. + +Viene richiesto di implementare solo due metodi a un tipo conforme al protocollo: [`redis(_:store:with:)`](https://api.vapor.codes/redis/documentation/redis/redissessionsdelegate/redis(_:store:with:)) e [`redis(_:fetchDataFor:)`](https://api.vapor.codes/redis/documentation/redis/redissessionsdelegate/redis(_:fetchdatafor:)). + +Entrambi sono necessari, in quanto il modo in cui tu personalizzi la scrittura dei dati di sessione su Redis è intrinsecamente legato a come deve essere letto da Redis. + +### Esempio di Hash di RedisSessionsDelegate + +Per esempio, se vuoi salvare i dati di sessione come un [**Hash** in Redis](https://redis.io/topics/data-types-intro#redis-hashes), dovresti implementare qualcosa simile a quanto segue: + +```swift +func redis( + _ client: Client, + store data: SessionData, + with key: RedisKey +) -> EventLoopFuture { + // salva ogni campo dei dati come un campo hash separato + return client.hmset(data.snapshot, in: key) +} +func redis( + _ client: Client, + fetchDataFor key: RedisKey +) -> EventLoopFuture { + return client + .hgetall(from: key) + .map { hash in + // hash è [String: RESPValue] quindi dobbiamo provare e spacchettare il + // valore come una stringa e salvare ogni valore nel container dei dati + return hash.reduce(into: SessionData()) { result, next in + guard let value = next.value.string else { return } + result[next.key] = value + } + } +} +``` From 765057dc35409e32ac86354b0e9d15ec4adc1914 Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino Date: Sun, 24 Sep 2023 12:52:04 +0200 Subject: [PATCH 03/17] Added Legacy Docs --- docs/version/legacy-docs.it.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/version/legacy-docs.it.md diff --git a/docs/version/legacy-docs.it.md b/docs/version/legacy-docs.it.md new file mode 100644 index 000000000..7e5295d4f --- /dev/null +++ b/docs/version/legacy-docs.it.md @@ -0,0 +1,3 @@ +# Reindirizzando... + + From 8380be43b167e7fa79a6a7995b9e90b9c6ce928b Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino Date: Sun, 24 Sep 2023 16:40:51 +0200 Subject: [PATCH 04/17] Added Leaf --- docs/leaf/custom-tags.it.md | 128 ++++++++++++++++++++++++++++++++ docs/leaf/getting-started.it.md | 96 ++++++++++++++++++++++++ 2 files changed, 224 insertions(+) create mode 100644 docs/leaf/custom-tags.it.md create mode 100644 docs/leaf/getting-started.it.md diff --git a/docs/leaf/custom-tags.it.md b/docs/leaf/custom-tags.it.md new file mode 100644 index 000000000..c2e783a39 --- /dev/null +++ b/docs/leaf/custom-tags.it.md @@ -0,0 +1,128 @@ +# Tag Personalizzati + +Puoi creare tag Leaf personalizzati usando il protocollo [`LeafTag`](https://api.vapor.codes/leafkit/documentation/leafkit/leaftag). + +Per mostrare come funziona, diamo un'occhiata alla creazione di un tag personalizzato `#now` che stampa l'attuale marca temporale. Il tag supporterà anche un singolo parametro opzionale per specificare il formato della data. + +!!! tip + Se il tuo tag personalizzato renderizza HTML dovresti conformare il tuo tag personalizzato a `UnsafeUnescapedLeafTag` così che l'HTML non sia "escaped". Ricorda di controllare o ripulire ogni input dell'utente. + +## `LeafTag` + +Prima crea una classe chiamata `NowTag` e conformala a `LeafTag`. + +```swift +struct NowTag: LeafTag { + func render(_ ctx: LeafContext) throws -> LeafData { + ... + } +} +``` + +Adesso implementiamo il metodo `render(_:)`. Il contesto `LeafContext` passato a questo metodo ha tutto quello che ci dovrebbe servire. + +```swift +enum NowTagError: Error { + case invalidFormatParameter + case tooManyParameters +} + +struct NowTag: LeafTag { + func render(_ ctx: LeafContext) throws -> LeafData { + let formatter = DateFormatter() + switch ctx.parameters.count { + case 0: formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" + case 1: + guard let string = ctx.parameters[0].string else { + throw NowTagError.invalidFormatParameter + } + + formatter.dateFormat = string + default: + throw NowTagError.tooManyParameters + } + + let dateAsString = formatter.string(from: Date()) + return LeafData.string(dateAsString) + } +} +``` + +## Configura il Tag + +Adesso che abbiamo implementato `NowTag`, dobbiamo solo dirlo a Leaf. Puoi aggiungere qualsiasi tag così - anche se vengono da un pacchetto separato. Di solito si fa in `configure.swift`: + +```swift +app.leaf.tags["now"] = NowTag() +``` + +Fatto! Ora possiamo usare la nostra tag personalizzata in Leaf. + +```leaf +The time is #now() +``` + +## Proprietà del Contesto + +Il `LeafContext` contiene due proprietà importanti. `parameters` e `data` che ha tutto quello che ci dovrebbe servire. + +- `parameters`: Un array che contiene i parametri del tag. +- `data`: Un dizionario che contiene i dati della view passata a `render(_:_:)` come contesto. + +### Tag Hello di Esempio + +Per vedere come usarlo, implementiamo un semplice tag di saluto usando entrambe le proprietà. + +#### Usando i Parametri + +Possiamo accedere al primo parametro che dovrebbe contenere il nome. + +```swift +enum HelloTagError: Error { + case missingNameParameter +} + +struct HelloTag: UnsafeUnescapedLeafTag { + func render(_ ctx: LeafContext) throws -> LeafData { + guard let name = ctx.parameters[0].string else { + throw HelloTagError.missingNameParameter + } + + return LeafData.string("

Hello \(name)

") + } +} +``` + +```leaf +#hello("John") +``` + +#### Usando i Dati + +Possiamo accedere al valore del nome usando la chiame "name" dentro la proprietà dei dati. + +```swift +enum HelloTagError: Error { + case nameNotFound +} + +struct HelloTag: UnsafeUnescapedLeafTag { + func render(_ ctx: LeafContext) throws -> LeafData { + guard let name = ctx.data["name"]?.string else { + throw HelloTagError.nameNotFound + } + + return LeafData.string("

Hello \(name)

") + } +} +``` + +```leaf +#hello() +``` + +_Controller_: + +```swift +return try await req.view.render("home", ["name": "John"]) +``` diff --git a/docs/leaf/getting-started.it.md b/docs/leaf/getting-started.it.md new file mode 100644 index 000000000..0d2364f15 --- /dev/null +++ b/docs/leaf/getting-started.it.md @@ -0,0 +1,96 @@ +# Leaf + +Leaf è un potente linguaggio di templating con la sintassi ispirata a Swift. Puoi usarlo per generare pagine HTML dinamiche per un sito front-end o per generare email abbellite da inviare con una API. + +## Pacchetto + +Il primo passo per usare Leaf è aggiungerlo come una dipendenza al tuo progetto nel tuo file di manifesto del pacchetto SPM. + +```swift +// swift-tools-version:5.2 +import PackageDescription + +let package = Package( + name: "MyApp", + platforms: [ + .macOS(.v10_15) + ], + dependencies: [ + /// Qualsiasi altra dipendenza ... + .package(url: "https://github.com/vapor/leaf.git", from: "4.0.0"), + ], + targets: [ + .target(name: "App", dependencies: [ + .product(name: "Leaf", package: "leaf"), + // Qualsiasi altra dipendenza + ]), + // Altri target + ] +) +``` + +## Configura + +Non appena hai aggiunto il pacchetto al tuo progetto, puoi configurare Vapor per usarlo. Di solito si fa in [`configure.swift`](../getting-started/folder-structure.md#configureswift). + +```swift +import Leaf + +app.views.use(.leaf) +``` + +Questo dice a Vapor di usare `LeafRenderer` quando chiami `req.view` nel tuo codice. + +!!! note + Leaf ha una cache interna per renderizzare le pagine. Quando l'ambiente di `Application` è impostato su `.development` questa cache è disabilitata, così che i cambiamenti ai template abbiano effetto immediatamente. In `.production` e tutti gli altri ambienti la cache è abilitata di default; qualsiasi cambiamento fatto ai template non avrà effetto finché l'applicazione non viene riavviata. + +!!! warning + Per fare in modo che Leaf trovi i template quando gira su Xcode, devi settare la [directory di lavoro personalizzata](../getting-started/xcode.md#custom-working-directory) per il tuo ambiente di lavoro Xcode. +## Struttura delle Cartelle + +Non appena hai configurato Leaf, devi assicurarti di avere una cartella `Views` dove salvare i tuoi file `.leaf`. Di default, Leaf si aspetta che la cartella delle view sia `./Resources/Views`, relativamente alla radice del tuo progetto. + +Probabilmente vorrai abilitare anche il [`FileMiddleware`](https://api.vapor.codes/vapor/documentation/vapor/filemiddleware) di Vapor per servire file dalla tua cartella `/Public` se hai in mente di servire file Javascript e CSS per esempio. + +``` +VaporApp +├── Package.swift +├── Resources +│   ├── Views +│   │   └── hello.leaf +├── Public +│   ├── images (immagini) +│   ├── styles (risorse css) +└── Sources +    └── ... +``` + +## Renderizzare una View + +Adesso che Leaf è configurato, renderizziamo il tuo primo template. Dentro la cartella `Resources/Views`, crea un nuovo file chiamato `hello.leaf` con il seguente contenuto: + +```leaf +Hello, #(name)! +``` + +!!! tip + Se usi VSCode come editor di testo, raccomandiamo di installare l'estensione Leaf per abilitare l'evidenziazione della sintassi: [Leaf HTML](https://marketplace.visualstudio.com/items?itemName=Francisco.html-leaf). + +Quindi, registra una route (di solito fatto in `routes.swift` o un controller) per renderizzare la view. + +```swift +app.get("hello") { req -> EventLoopFuture in + return req.view.render("hello", ["name": "Leaf"]) +} + +// oppure + +app.get("hello") { req async throws -> View in + return try await req.view.render("hello", ["name": "Leaf"]) +} +``` + +Questo usa la generica proprietà `view` su `Request` invece di chiamare Leaf direttamente. Questo ti permette di passare a un renderer diverso nei tuoi test. + + +Apri il tuo browser e visita `/hello`. Dovresti vedere `Hello, Leaf!`. Congratulazioni per aver renderizzato la tua prima view Leaf! From 832768b55e66df7170318783450b41133c7cc14f Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino <96546612+fpseverino@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:41:11 +0200 Subject: [PATCH 05/17] Update contributing.it.md Co-authored-by: Paul Toffoloni <69189821+ptoffy@users.noreply.github.com> --- docs/contributing/contributing.it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributing/contributing.it.md b/docs/contributing/contributing.it.md index 9f7e61e8b..9b1bc6cce 100644 --- a/docs/contributing/contributing.it.md +++ b/docs/contributing/contributing.it.md @@ -18,7 +18,7 @@ Se scopri un problema di sicurezza e vuoi riferirlo o aiutare a risolverlo perfa ### Piccoli problemi -Se trovi un piccolo problema, bug o errore di battitura, sentiti libero di procedere e creare una pull request per risolverlo. Se risolve una issue aperta su una qualsiasi delle repo puoi linkarla nella pull request nella barra laterale in modo che la issue viene automaticamente chiusa quando la pull request viene unita. +Se trovi un piccolo problema, bug o errore di battitura, sentiti libero di procedere e creare una pull request per risolverlo. Se risolve una issue aperta su una qualsiasi delle repo puoi linkarla nella pull request nella barra laterale in modo che la issue venga automaticamente chiusa quando la pull request viene unita. ![GitHub Link Issue](../images/github-link-issue.png) From 8f9e504771ef4837400bbd361d1d14bbb785ee79 Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino <96546612+fpseverino@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:41:47 +0200 Subject: [PATCH 06/17] Update contributing.it.md Co-authored-by: Paul Toffoloni <69189821+ptoffy@users.noreply.github.com> --- docs/contributing/contributing.it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributing/contributing.it.md b/docs/contributing/contributing.it.md index 9b1bc6cce..cf1875c6a 100644 --- a/docs/contributing/contributing.it.md +++ b/docs/contributing/contributing.it.md @@ -24,7 +24,7 @@ Se trovi un piccolo problema, bug o errore di battitura, sentiti libero di proce ### Nuove funzionalità -Se vuoi proporre cambiamenti più grandi, come nuove funzionalità o bug fix che cambiano quantità significative di codice, allora perfavore apri una issue prima o fai un post nel canale `#development` di Discord. Questo ci permette di discutere il cambiamento con te in quanto potrebbe esserci del contesto che dobbiamo applicare o possiamo darti delle indicazioni. Non vogliamo farti perdere tempo se una funzionalità non rientra nei nostri piani! +Se vuoi proporre cambiamenti più grandi, come nuove funzionalità o bug fix che cambiano quantità significative di codice, allora per favore apri una issue prima o fai un post nel canale `#development` di Discord. Questo ci permetterà di discutere il cambiamento con te in quanto potrebbe esserci del contesto da aggiungere o delle indicazioni da darti. Non vogliamo farti perdere tempo se una funzionalità non rientra nei nostri piani! ### Bacheca di Vapor From 9c2eba21b01c89a96a048e72c4fb6f2fd8f75b49 Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino <96546612+fpseverino@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:42:27 +0200 Subject: [PATCH 07/17] Update contributing.it.md Co-authored-by: Paul Toffoloni <69189821+ptoffy@users.noreply.github.com> --- docs/contributing/contributing.it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributing/contributing.it.md b/docs/contributing/contributing.it.md index cf1875c6a..54e9705e1 100644 --- a/docs/contributing/contributing.it.md +++ b/docs/contributing/contributing.it.md @@ -28,7 +28,7 @@ Se vuoi proporre cambiamenti più grandi, come nuove funzionalità o bug fix che ### Bacheca di Vapor -Se vuoi solo contribuire ma non hai idea su cosa lavorare, fantastico! Vapor ha un paio di bacheche che possono aiutarti. Vapor ha circa 40 repository che sono attivamente sviluppate e cercare fra tutte queste per trovare qualcosa su cui lavorare non è fattibile, quindi delle bacheche per aggregarle. +Se vuoi solo contribuire ma non hai idea su cosa lavorare, fantastico! Vapor ha un paio di bacheche che possono aiutarti. Vapor ha circa 40 repository che sono attivamente sviluppate e cercare fra tutte queste per trovare qualcosa su cui lavorare non è fattibile, quindi usiamo le bacheche per aggregarle. La prima bachecha è la [bacheca delle buone prime issue](https://github.com/orgs/vapor/projects/10). Ogni issue nell'organizzazione GitHub di Vapor che è taggata come `good first issue` sarà aggiunta alla bacheca. Queste sono issue che pensiamo possano essere buone per persone relativamente nuove a Vapor per lavorarci su, in quanto non richiedono molta esperienza sul codice. From 0e8468492541bfcc68a33b2daa71fda9feccca9f Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino <96546612+fpseverino@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:42:55 +0200 Subject: [PATCH 08/17] Update contributing.it.md Co-authored-by: Paul Toffoloni <69189821+ptoffy@users.noreply.github.com> --- docs/contributing/contributing.it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributing/contributing.it.md b/docs/contributing/contributing.it.md index 54e9705e1..186ca15f4 100644 --- a/docs/contributing/contributing.it.md +++ b/docs/contributing/contributing.it.md @@ -32,7 +32,7 @@ Se vuoi solo contribuire ma non hai idea su cosa lavorare, fantastico! Vapor ha La prima bachecha è la [bacheca delle buone prime issue](https://github.com/orgs/vapor/projects/10). Ogni issue nell'organizzazione GitHub di Vapor che è taggata come `good first issue` sarà aggiunta alla bacheca. Queste sono issue che pensiamo possano essere buone per persone relativamente nuove a Vapor per lavorarci su, in quanto non richiedono molta esperienza sul codice. -La seconda bacheca è la [bacheca dell'aiuto cercasi](https://github.com/orgs/vapor/projects/11). Questa contiene issue taggate `help wanted`. Queste sono issue che potrebbero essere aggiustate, ma la squadra principale al momento ha altre priorità. Queste issue di solito richiedono un po' più di conoscenza se non sono anche taggate `good first issue`, ma potrebbero essere un progetto divertente su cui lavorare! +La seconda bacheca è la [bacheca del "Cercasi aiuto"](https://github.com/orgs/vapor/projects/11). Questa contiene issue taggate `help wanted`. Queste sono issue che potrebbero essere aggiustate, ma la squadra principale al momento ha altre priorità. Queste issue di solito richiedono un po' più di conoscenza se non sono anche taggate `good first issue`, ma potrebbero essere un progetto divertente su cui lavorare! ### Traduzioni From cc65c93f99ba793f30c70e531dbd204896e63c0e Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino <96546612+fpseverino@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:43:09 +0200 Subject: [PATCH 09/17] Update contributing.it.md Co-authored-by: Paul Toffoloni <69189821+ptoffy@users.noreply.github.com> --- docs/contributing/contributing.it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributing/contributing.it.md b/docs/contributing/contributing.it.md index 186ca15f4..d3182698c 100644 --- a/docs/contributing/contributing.it.md +++ b/docs/contributing/contributing.it.md @@ -48,7 +48,7 @@ A questo punto puoi fare cambiamenti nella tua fork con il solito processo di co ## Presentare una Pull Request -Quando presenti una pull request delle cose che dovresti controllare: +Quando presenti una pull request ci sono delle cose che dovresti controllare: * Che tutti i test passino * Che ci siano nuovi test aggiunti per ogni nuovo comportamento o bug fixato From 28aa7b02fd40c72fd18b13080d50c954aa6ec73a Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino <96546612+fpseverino@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:43:41 +0200 Subject: [PATCH 10/17] Update overview.it.md Co-authored-by: Paul Toffoloni <69189821+ptoffy@users.noreply.github.com> --- docs/redis/overview.it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/redis/overview.it.md b/docs/redis/overview.it.md index d0abd55f7..444b90378 100644 --- a/docs/redis/overview.it.md +++ b/docs/redis/overview.it.md @@ -1,6 +1,6 @@ # Redis -[Redis](https://redis.io/) è uno dei più popolari store di strutture dati residente in memoria comunemente usato come cache o broker di messaggi. +[Redis](https://redis.io/) è uno dei più popolari archivi di strutture dati residente in memoria comunemente usato come cache o broker di messaggi. Questa libreria è un'integrazione tra Vapor e [**RediStack**](https://github.com/swift-server/RediStack), che è il driver sottostante che comunica con Redis. From 0e9e9b93cdc0dbd475335d78885446f4b294cd51 Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino <96546612+fpseverino@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:44:35 +0200 Subject: [PATCH 11/17] Update overview.it.md Co-authored-by: Paul Toffoloni <69189821+ptoffy@users.noreply.github.com> --- docs/redis/overview.it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/redis/overview.it.md b/docs/redis/overview.it.md index 444b90378..0e701db73 100644 --- a/docs/redis/overview.it.md +++ b/docs/redis/overview.it.md @@ -148,7 +148,7 @@ Un abbonamento ha un ciclo di vita ben definito: 1. **message**: invocato da 0 a più volte man mano che i messaggi sono pubbicati ai canali abbonati 1. **unsubscribe**: invocato una volta quando l'abbonamento finisce, o su richiesta o quando la connessione viene persa -Quando crei un abbonamento, devi fornire al meno un [`messageReceiver`](https://swiftpackageindex.com/swift-server/RediStack/main/documentation/redistack/redissubscriptionmessagereceiver) per gestire tutti i messaggi che sono pubblicati dai canali abbonati. +Quando crei un abbonamento, devi fornire almeno un [`messageReceiver`](https://swiftpackageindex.com/swift-server/RediStack/main/documentation/redistack/redissubscriptionmessagereceiver) per gestire tutti i messaggi che sono pubblicati dai canali abbonati. Puoi facoltativamente fornire un `RedisSubscriptionChangeHandler` per `onSubscribe` e `onUnsubscribe` per gestire i loro rispettivi eventi di ciclo di vita. From ee3f1f6b062ad873ef5c0a6811c7011bff14ef74 Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino <96546612+fpseverino@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:44:46 +0200 Subject: [PATCH 12/17] Update custom-tags.it.md Co-authored-by: Paul Toffoloni <69189821+ptoffy@users.noreply.github.com> --- docs/leaf/custom-tags.it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/leaf/custom-tags.it.md b/docs/leaf/custom-tags.it.md index c2e783a39..839b45f4d 100644 --- a/docs/leaf/custom-tags.it.md +++ b/docs/leaf/custom-tags.it.md @@ -9,7 +9,7 @@ Per mostrare come funziona, diamo un'occhiata alla creazione di un tag personali ## `LeafTag` -Prima crea una classe chiamata `NowTag` e conformala a `LeafTag`. +Prima creiamo una classe chiamata `NowTag` e conformiamola a `LeafTag`. ```swift struct NowTag: LeafTag { From 74f133d9f453e9091b809fb586f4b97696d5f35f Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino <96546612+fpseverino@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:45:02 +0200 Subject: [PATCH 13/17] Update custom-tags.it.md Co-authored-by: Paul Toffoloni <69189821+ptoffy@users.noreply.github.com> --- docs/leaf/custom-tags.it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/leaf/custom-tags.it.md b/docs/leaf/custom-tags.it.md index 839b45f4d..4d75a9822 100644 --- a/docs/leaf/custom-tags.it.md +++ b/docs/leaf/custom-tags.it.md @@ -64,7 +64,7 @@ The time is #now() ## Proprietà del Contesto -Il `LeafContext` contiene due proprietà importanti. `parameters` e `data` che ha tutto quello che ci dovrebbe servire. +Il `LeafContext` contiene due proprietà importanti: `parameters` e `data`, che hanno tutto quello che ci dovrebbe servire. - `parameters`: Un array che contiene i parametri del tag. - `data`: Un dizionario che contiene i dati della view passata a `render(_:_:)` come contesto. From b040034a7168bfb64733edfa8f97668e685bb8fa Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino <96546612+fpseverino@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:45:15 +0200 Subject: [PATCH 14/17] Update custom-tags.it.md Co-authored-by: Paul Toffoloni <69189821+ptoffy@users.noreply.github.com> --- docs/leaf/custom-tags.it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/leaf/custom-tags.it.md b/docs/leaf/custom-tags.it.md index 4d75a9822..398c3cbdc 100644 --- a/docs/leaf/custom-tags.it.md +++ b/docs/leaf/custom-tags.it.md @@ -66,7 +66,7 @@ The time is #now() Il `LeafContext` contiene due proprietà importanti: `parameters` e `data`, che hanno tutto quello che ci dovrebbe servire. -- `parameters`: Un array che contiene i parametri del tag. +- `parameters`: Un array che contiene i parametri del tag; - `data`: Un dizionario che contiene i dati della view passata a `render(_:_:)` come contesto. ### Tag Hello di Esempio From 08e3dc9aa05be8b0404bd44b6f20c54f5081c365 Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino <96546612+fpseverino@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:45:31 +0200 Subject: [PATCH 15/17] Update custom-tags.it.md Co-authored-by: Paul Toffoloni <69189821+ptoffy@users.noreply.github.com> --- docs/leaf/custom-tags.it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/leaf/custom-tags.it.md b/docs/leaf/custom-tags.it.md index 398c3cbdc..ff8031d9a 100644 --- a/docs/leaf/custom-tags.it.md +++ b/docs/leaf/custom-tags.it.md @@ -99,7 +99,7 @@ struct HelloTag: UnsafeUnescapedLeafTag { #### Usando i Dati -Possiamo accedere al valore del nome usando la chiame "name" dentro la proprietà dei dati. +Possiamo accedere al valore del nome usando la chiave "name" dentro la proprietà dei dati. ```swift enum HelloTagError: Error { From 75015e76320c4865b3828dc99d976513c7e29cf6 Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino <96546612+fpseverino@users.noreply.github.com> Date: Mon, 25 Sep 2023 10:45:44 +0200 Subject: [PATCH 16/17] Update getting-started.it.md Co-authored-by: Paul Toffoloni <69189821+ptoffy@users.noreply.github.com> --- docs/leaf/getting-started.it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/leaf/getting-started.it.md b/docs/leaf/getting-started.it.md index 0d2364f15..17824b995 100644 --- a/docs/leaf/getting-started.it.md +++ b/docs/leaf/getting-started.it.md @@ -45,7 +45,7 @@ Questo dice a Vapor di usare `LeafRenderer` quando chiami `req.view` nel tuo cod Leaf ha una cache interna per renderizzare le pagine. Quando l'ambiente di `Application` è impostato su `.development` questa cache è disabilitata, così che i cambiamenti ai template abbiano effetto immediatamente. In `.production` e tutti gli altri ambienti la cache è abilitata di default; qualsiasi cambiamento fatto ai template non avrà effetto finché l'applicazione non viene riavviata. !!! warning - Per fare in modo che Leaf trovi i template quando gira su Xcode, devi settare la [directory di lavoro personalizzata](../getting-started/xcode.md#custom-working-directory) per il tuo ambiente di lavoro Xcode. + Per fare in modo che Leaf trovi i template quando gira su Xcode, devi impostare la [directory di lavoro personalizzata](../getting-started/xcode.md#custom-working-directory) per il tuo ambiente di lavoro Xcode. ## Struttura delle Cartelle Non appena hai configurato Leaf, devi assicurarti di avere una cartella `Views` dove salvare i tuoi file `.leaf`. Di default, Leaf si aspetta che la cartella delle view sia `./Resources/Views`, relativamente alla radice del tuo progetto. From 57ec0a1f79f635b2b7ebfc5ee173c2bffd7ee1de Mon Sep 17 00:00:00 2001 From: Francesco Paolo Severino Date: Mon, 25 Sep 2023 15:55:16 +0200 Subject: [PATCH 17/17] Fixed "struttura della cartella" --- docs/getting-started/folder-structure.it.md | 4 ++-- docs/getting-started/spm.it.md | 4 ++-- docs/leaf/getting-started.it.md | 2 +- mkdocs.yml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/getting-started/folder-structure.it.md b/docs/getting-started/folder-structure.it.md index 5f71b58e8..e01d5e150 100644 --- a/docs/getting-started/folder-structure.it.md +++ b/docs/getting-started/folder-structure.it.md @@ -1,4 +1,4 @@ -# Struttura delle Cartelle +# Struttura della Cartella Dopo aver creato, compilato ed eseguito la tua prima applicazione, è il momento di dare un'occhiata a come Vapor struttura le cartelle del progetto. La struttura si basa su [SwiftPM](spm.md), quindi se hai già familiarità con SwiftPM ti sentirai a casa. @@ -19,7 +19,7 @@ Dopo aver creato, compilato ed eseguito la tua prima applicazione, è il momento └── Package.swift ``` -Le seguenti sezioni spiegano in maggior dettaglio la struttura delle cartelle. +Le seguenti sezioni spiegano in maggior dettaglio la struttura della cartella. ## Public diff --git a/docs/getting-started/spm.it.md b/docs/getting-started/spm.it.md index 82e8ddfd4..446683130 100644 --- a/docs/getting-started/spm.it.md +++ b/docs/getting-started/spm.it.md @@ -63,9 +63,9 @@ Nell'esempio precedente, si può notare che il pacchetto dipende da [vapor/vapor I target sono i moduli che compongono il tuo pacchetto. I target possono essere eseguibili, librerie o test. Solitamente un progetto Vapor ha due target, tuttavia se ne possono aggiungere in modo da organizzare il codice. Ogni target dichiara i moduli da cui dipende. Per poter importare ed usare i vari moduli nel codice bisogna dichiarare qui i loro nomi. Un target può dipendere da altri target nello stesso pacchetto o da qualsiasi modulo presente nei pacchetti aggiunto all'array delle [dipendenze principali](#dependencies). -## Struttura delle Cartelle +## Struttura della Cartella -Questa è la tipica struttura delle cartelle di un pacchetto SPM: +Questa è la tipica struttura della cartella di un pacchetto SPM: ``` . diff --git a/docs/leaf/getting-started.it.md b/docs/leaf/getting-started.it.md index 17824b995..799c044dd 100644 --- a/docs/leaf/getting-started.it.md +++ b/docs/leaf/getting-started.it.md @@ -46,7 +46,7 @@ Questo dice a Vapor di usare `LeafRenderer` quando chiami `req.view` nel tuo cod !!! warning Per fare in modo che Leaf trovi i template quando gira su Xcode, devi impostare la [directory di lavoro personalizzata](../getting-started/xcode.md#custom-working-directory) per il tuo ambiente di lavoro Xcode. -## Struttura delle Cartelle +## Struttura della Cartella Non appena hai configurato Leaf, devi assicurarti di avere una cartella `Views` dove salvare i tuoi file `.leaf`. Di default, Leaf si aspetta che la cartella delle view sia `./Resources/Views`, relativamente alla radice del tuo progetto. diff --git a/mkdocs.yml b/mkdocs.yml index b8d2a9b33..0120683a7 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -281,7 +281,7 @@ plugins: Errors: Errori Files: File Fluent: Fluent - Folder Structure: Struttura delle Cartelle + Folder Structure: Struttura della Cartella Getting Started: Inizio Hello, world: Ciao, mondo Install: Installazione