diff --git a/next-i18next.config.js b/next-i18next.config.js
index f672d2625..eccc62ec3 100644
--- a/next-i18next.config.js
+++ b/next-i18next.config.js
@@ -3,7 +3,7 @@ const path = require("path");
module.exports = {
i18n: {
defaultLocale: "en",
- locales: ["en", "es", "de", "fr", "sv", "pt-BR"],
+ locales: ["en", "es", "de", "fr", "it", "sv", "pt-BR"],
localePath: path.resolve("./public/locales"),
reloadOnPrerender: process.env.NODE_ENV === "development",
},
diff --git a/public/locales/it/app.json b/public/locales/it/app.json
new file mode 100644
index 000000000..94f77f310
--- /dev/null
+++ b/public/locales/it/app.json
@@ -0,0 +1,128 @@
+{
+ "12h": "12 ore",
+ "24h": "24 ore",
+ "addParticipant": "Aggiungi partecipante",
+ "addTimeOption": "Aggiungi opzione orario",
+ "alreadyVoted": "Hai già votato",
+ "applyToAllDates": "Applica a tutte le date",
+ "areYouSure": "Sei sicuro/a?",
+ "back": "Indietro",
+ "calendarHelp": "Non puoi creare un sondaggio senza nessuna opzione. Aggiungi almeno un opzione per continuare.",
+ "calendarHelpTitle": "Dimentichi qualcosa?",
+ "cancel": "Annulla",
+ "comment": "Commenta",
+ "commentPlaceholder": "Lascia un commento su questo sondaggio (visibile a tutti)",
+ "comments": "Commenti",
+ "continue": "Continua",
+ "copied": "Copiato",
+ "copyLink": "Copia link",
+ "createdBy": "da {{name}}",
+ "createPoll": "Crea sondaggio",
+ "creatingDemo": "Creando sondaggio demo…",
+ "delete": "Elimina",
+ "deleteComment": "Elimina commento",
+ "deleteDate": "Elimina data",
+ "deletedPoll": "Elimina sondaggio",
+ "deletedPollInfo": "Questo sondaggio non esiste più.",
+ "deletePoll": "Elimina sondaggio",
+ "deletePollDescription": "Tutti i dati relativi a questo sondaggio saranno eliminati. Per confermare, digita “{{confirmText}}” qui sotto:",
+ "deletingOptionsWarning": "Stai eliminando opzioni per le quali i partecipanti hanno votato. Anche il loro voto sarà eliminato.",
+ "demoPollNotice": "I sondaggi demo vengono cancellati automaticamente dopo 1 giorno",
+ "description": "Descrizione",
+ "descriptionPlaceholder": "Ciao a tutti, scegliete le date che per voi vanno bene!",
+ "donate": "Dona",
+ "editDetails": "Modifica i dettagli",
+ "editOptions": "Modifica opzioni",
+ "email": "Email",
+ "emailPlaceholder": "jessie.smith@email.com",
+ "endingGuestSessionNotice": "Una volta terminata la sessione ospite, la sessione non può essere ripresa. Non sarà possibile modificare alcun voto o commento fatto con questa sessione.",
+ "endSession": "Termina sessione",
+ "errorCreate": "Oh oh! Si è verificato un problema durante la creazione del tuo sondaggio. L'errore è stato registrato e proveremo a risolverlo.",
+ "exportToCsv": "Esporta in CSV",
+ "finish": "Termina",
+ "forgetMe": "Dimenticati di me",
+ "goToAdmin": "Vai a Admin",
+ "guest": "Ospite",
+ "guestSessionNotice": "Stai usando una sessione ospite. Questo ci permette di riconoscerti se tornerai più tardi in modo da poter modificare i tuoi voti.",
+ "guestSessionReadMore": "Leggi altro sulle sessioni ospite.",
+ "hide": "Nascondi",
+ "ifNeedBe": "Se necessario",
+ "linkHasExpired": "Il link è scaduto o non è più valido",
+ "loading": "Caricamento…",
+ "loadingParticipants": "Caricamento partecipanti…",
+ "location": "Posizione",
+ "locationPlaceholder": "Bar di Joe",
+ "lockPoll": "Blocca sondaggio",
+ "login": "Accedi",
+ "loginCheckInbox": "Verifica la tua posta in arrivo.",
+ "loginMagicLinkSent": "Un link di accesso è stato inviato a:",
+ "loginSendMagicLink": "Inviami un link di accesso",
+ "loginViaMagicLink": "Accedi tramite link di accesso",
+ "loginViaMagicLinkDescription": "Ti invieremo un email con un link di accesso che puoi usare per effettuare il login.",
+ "loginWithValidEmail": "Inserisci un indirizzo email valido",
+ "logout": "Esci",
+ "manage": "Gestisci",
+ "menu": "Menu",
+ "mixedOptionsDescription": "Non puoi avere entrambe le opzioni di data e ora nello stesso sondaggio. Quale vorresti mantenere?",
+ "mixedOptionsKeepDates": "Mantieni opzioni data",
+ "mixedOptionsKeepTimes": "Mantieni opzioni tempo",
+ "mixedOptionsTitle": "Aspetta un minuto…🤔",
+ "monday": "Lunedì",
+ "monthView": "Vista mensile",
+ "name": "Nome",
+ "namePlaceholder": "Jessie Smith",
+ "newPoll": "Nuovo sondaggio",
+ "next": "Avanti",
+ "nextMonth": "Mese successivo",
+ "no": "No",
+ "noDatesSelected": "Nessuna data selezionata",
+ "notificationsDisabled": "Le notifiche sono state disabilitate",
+ "notificationsOff": "Notifiche disattive",
+ "notificationsOn": "Notifiche attive",
+ "notificationsOnDescription": "Un'email verrà inviata a {{email}} quando c'è attività su questo sondaggio.",
+ "notificationsVerifyEmail": "Devi verificare la tua email per attivare le notifiche",
+ "ok": "Ok",
+ "options": "Opzioni",
+ "participant": "Partecipante",
+ "participantCount_other": "{{count}} partecipanti",
+ "participantCount": "{{count}} partecipante",
+ "pollHasBeenLocked": "Questo sondaggio è stato bloccato",
+ "pollHasBeenVerified": "Il tuo sondaggio è stato verificato",
+ "pollOwnerNotice": "Ehi {{name}}, sembra che tu sia il proprietario di questo sondaggio.",
+ "pollsEmpty": "Nessun sondaggio creato",
+ "possibleAnswers": "Possibili risposte",
+ "preferences": "Impostazioni",
+ "previousMonth": "Mese precedente",
+ "profileLogin": "Profilo - Accedi",
+ "profileUser": "Profilo - {{username}}",
+ "requiredNameError": "Il nome è obbligatorio",
+ "save": "Salva",
+ "saveInstruction": "Seleziona la tua disponibilità e clicca su {{save}}",
+ "share": "Condividi",
+ "shareDescription": "Dai questo link ai partecipanti per permette loro di votare al tuo sondaggio.",
+ "shareLink": "Condividi via link",
+ "specifyTimes": "Specifica orari",
+ "specifyTimesDescription": "Includi gli orari di inizio e di fine per ogni opzione",
+ "stepSummary": "Fase {{current}} di {{total}}",
+ "sunday": "Domenica",
+ "timeAndDate": "Data e ora",
+ "timeFormat": "Formato orario:",
+ "timeZone": "Fuso orario:",
+ "title": "Titolo",
+ "titlePlaceholder": "Riunione Mensile",
+ "today": "Oggi",
+ "unlockPoll": "Sblocca sondaggio",
+ "unverifiedMessage": "Un'email è stata inviata a {{email}} con un link per verificare l'indirizzo email.",
+ "user": "Utente",
+ "vote": "Vota",
+ "voteCount_other": "{{count}} voti",
+ "voteCount": "{{count}} voti",
+ "weekStartsOn": "La settimana inizia da",
+ "weekView": "Vista settimanale",
+ "whatsThis": "Cos'è questo?",
+ "yes": "Si",
+ "you": "Tu",
+ "yourDetails": "I tuoi dati",
+ "yourName": "Il tuo nome…",
+ "yourPolls": "I tuoi sondaggi"
+}
diff --git a/public/locales/it/common.json b/public/locales/it/common.json
new file mode 100644
index 000000000..4d91fb3d1
--- /dev/null
+++ b/public/locales/it/common.json
@@ -0,0 +1,22 @@
+{
+ "blog": "Blog",
+ "discussions": "Discussioni",
+ "donate": "Dona",
+ "english": "Inglese",
+ "footerCredit": "Realizzato da @imlukevella",
+ "footerSponsor": "Questo progetto è finanziato dall'utente. Per favore considera di supportarlo donando.",
+ "french": "Francese",
+ "german": "Tedesco",
+ "home": "Home",
+ "italian": "Italiano",
+ "language": "Lingua",
+ "links": "Links",
+ "portugueseBr": "Portoghese (Brasile)",
+ "poweredBy": "Powered by",
+ "privacyPolicy": "Informativa sulla privacy",
+ "spanish": "Spagnolo",
+ "starOnGithub": "Aggiungi ai preferiti su Github",
+ "support": "Assistenza",
+ "swedish": "Svedese",
+ "volunteerTranslator": "Aiutaci a tradurre il sito"
+}
diff --git a/public/locales/it/errors.json b/public/locales/it/errors.json
new file mode 100644
index 000000000..b42a2b254
--- /dev/null
+++ b/public/locales/it/errors.json
@@ -0,0 +1,6 @@
+{
+ "notFoundTitle": "404 non trovato",
+ "notFoundDescription": "Non abbiamo trovato la pagina che stavi cercando.",
+ "goToHome": "Vai alla home",
+ "startChat": "Avvia la chat"
+}
diff --git a/public/locales/it/homepage.json b/public/locales/it/homepage.json
new file mode 100644
index 000000000..8fac72b9f
--- /dev/null
+++ b/public/locales/it/homepage.json
@@ -0,0 +1,36 @@
+{
+ "3Ls": "Sì—con 3 Ls",
+ "adFree": "Senza pubblicità",
+ "adFreeDescription": "Puoi far riposare il tuo ad-blocker — qui non ne avrai bisogno.",
+ "comments": "Commenti",
+ "commentsDescription": "I partecipanti possono commentare il sondaggio e i commenti saranno visibili a tutti.",
+ "features": "Funzionalità",
+ "featuresSubheading": "Pianificare in modo intelligente",
+ "follow": "Segui",
+ "getStarted": "Inizia ora",
+ "heroSubText": "Trova la data perfetta senza troppi problemi",
+ "heroText": "Pianifica riunioni di gruppo con facilità",
+ "links": "Links",
+ "liveDemo": "Demo Live",
+ "metaDescription": "Crea sondaggi e vota per trovare il miglior giorno o orario. Un alternativa gratuita a Doodle.",
+ "metaTitle": "Rallly - Programma incontri di gruppo",
+ "mobileFriendly": "Mobile friendly",
+ "mobileFriendlyDescription": "Funziona bene su dispositivi mobili in modo che i partecipanti possano rispondere ai sondaggi ovunque si trovino.",
+ "new": "Nuovo",
+ "noLoginRequired": "Login non necessario",
+ "noLoginRequiredDescription": "Non è necessario effettuare il login per creare o partecipare ad un sondaggio",
+ "notifications": "Notifiche",
+ "notificationsDescription": "Tieni traccia di chi ha risposto. Ricevi una notifica quando i partecipanti votano o commentano il tuo sondaggio.",
+ "openSource": "Open-source",
+ "openSourceDescription": "Il codice è completamente open-source e disponibile su GitHub.",
+ "participant": "Partecipante",
+ "participantCount_other": "{{count}} partecipanti",
+ "participantCount": "{{count}} partecipante",
+ "perfect": "Perfetto!",
+ "principles": "Principi",
+ "principlesSubheading": "Non siamo come gli altri",
+ "selfHostable": "Self-hostable",
+ "selfHostableDescription": "Eseguilo sul tuo server personale per avere il pieno controllo dei tuoi dati",
+ "timeSlots": "Fasce orarie",
+ "timeSlotsDescription": "Imposta singolarmente i tempi di inizio e fine per ogni opzione nel tuo sondaggio. Gli orari possono essere automaticamente adattati al fuso orario di ogni partecipante o possono essere impostati per ignorare completamente i fuso orari."
+}
diff --git a/src/components/poll/language-selector.tsx b/src/components/poll/language-selector.tsx
index f32cbf351..0035a389d 100644
--- a/src/components/poll/language-selector.tsx
+++ b/src/components/poll/language-selector.tsx
@@ -21,8 +21,9 @@ export const LanguageSelect: React.VoidFunctionComponent<{
-
+
+
);
diff --git a/src/middleware.ts b/src/middleware.ts
index 324198fcc..4effbacc7 100644
--- a/src/middleware.ts
+++ b/src/middleware.ts
@@ -1,7 +1,7 @@
import languageParser from "accept-language-parser";
import { NextRequest, NextResponse } from "next/server";
-const supportedLocales = ["en", "es", "de", "fr", "sv", "pt-BR"];
+const supportedLocales = ["en", "es", "de", "fr", "it", "sv", "pt-BR"];
export function middleware({ headers, cookies, nextUrl }: NextRequest) {
const newUrl = nextUrl.clone();
diff --git a/src/utils/dayjs.tsx b/src/utils/dayjs.tsx
index a2050509b..7b02456b5 100644
--- a/src/utils/dayjs.tsx
+++ b/src/utils/dayjs.tsx
@@ -45,6 +45,11 @@ const dayjsLocales: Record<
timeFormat: "24h",
import: () => import("dayjs/locale/fr"),
},
+ it: {
+ weekStartsOn: "monday",
+ timeFormat: "24h",
+ import: () => import("dayjs/locale/it"),
+ },
sv: {
weekStartsOn: "monday",
timeFormat: "24h",