chore: move i18n to shared package (#1066)

* chore: move i18n to shared package

* chore: move server translations to shared package and apply linter and prettier on entire shared package
This commit is contained in:
Julien G.
2026-05-26 20:27:29 +02:00
committed by GitHub
parent 324d930ca3
commit 126f2df21b
860 changed files with 56891 additions and 46377 deletions
+369
View File
@@ -0,0 +1,369 @@
import type { TranslationStrings } from '../types';
const admin: TranslationStrings = {
'admin.notifications.title': 'Notifiche',
'admin.notifications.hint':
'Scegli un canale di notifica. Solo uno può essere attivo alla volta.',
'admin.notifications.none': 'Disattivato',
'admin.notifications.email': 'E-mail (SMTP)',
'admin.notifications.webhook': 'Webhook',
'admin.notifications.save': 'Salva impostazioni notifiche',
'admin.notifications.saved': 'Impostazioni notifiche salvate',
'admin.notifications.testWebhook': 'Invia webhook di test',
'admin.notifications.testWebhookSuccess':
'Webhook di test inviato con successo',
'admin.notifications.testWebhookFailed': 'Invio webhook di test fallito',
'admin.smtp.title': 'Email e notifiche',
'admin.smtp.hint':
"Configurazione SMTP per l'invio delle notifiche via e-mail.",
'admin.smtp.testButton': 'Invia email di prova',
'admin.webhook.hint':
'Invia notifiche a un webhook esterno (Discord, Slack, ecc.).',
'admin.smtp.testSuccess': 'Email di prova inviata con successo',
'admin.smtp.testFailed': 'Invio email di prova fallito',
'admin.title': 'Amministrazione',
'admin.subtitle': 'Gestione utenti e impostazioni di sistema',
'admin.tabs.users': 'Utenti',
'admin.tabs.categories': 'Categorie',
'admin.tabs.backup': 'Backup',
'admin.stats.users': 'Utenti',
'admin.stats.trips': 'Viaggi',
'admin.stats.places': 'Luoghi',
'admin.stats.photos': 'Foto',
'admin.stats.files': 'File',
'admin.table.user': 'Utente',
'admin.table.email': 'Email',
'admin.table.role': 'Ruolo',
'admin.table.created': 'Creato',
'admin.table.lastLogin': 'Ultimo Accesso',
'admin.table.actions': 'Azioni',
'admin.you': '(Tu)',
'admin.editUser': 'Modifica Utente',
'admin.newPassword': 'Nuova Password',
'admin.newPasswordHint': 'Lascia vuoto per mantenere la password attuale',
'admin.deleteUser':
'Eliminare l\'utente "{name}"? Tutti i viaggi verranno eliminati in modo permanente.',
'admin.deleteUserTitle': 'Elimina utente',
'admin.newPasswordPlaceholder': 'Inserisci nuova password…',
'admin.toast.loadError': 'Impossibile caricare i dati di amministrazione',
'admin.toast.userUpdated': 'Utente aggiornato',
'admin.toast.updateError': 'Impossibile aggiornare',
'admin.toast.userDeleted': 'Utente eliminato',
'admin.toast.deleteError': 'Impossibile eliminare',
'admin.toast.cannotDeleteSelf': 'Impossibile eliminare il proprio account',
'admin.toast.userCreated': 'Utente creato',
'admin.toast.createError': "Impossibile creare l'utente",
'admin.toast.fieldsRequired': 'Username, email e password sono obbligatori',
'admin.createUser': 'Crea Utente',
'admin.invite.title': 'Link di Invito',
'admin.invite.subtitle': 'Crea link di registrazione monouso',
'admin.invite.create': 'Crea Link',
'admin.invite.createAndCopy': 'Crea & Copia',
'admin.invite.empty': 'Nessun link di invito ancora creato',
'admin.invite.maxUses': 'Usi Max.',
'admin.invite.expiry': 'Scade tra',
'admin.invite.uses': 'usato',
'admin.invite.expiresAt': 'scade',
'admin.invite.createdBy': 'da',
'admin.invite.active': 'Attivo',
'admin.invite.expired': 'Scaduto',
'admin.invite.usedUp': 'Esaurito',
'admin.invite.copied': 'Link di invito copiato negli appunti',
'admin.invite.copyLink': 'Copia link',
'admin.invite.deleted': 'Link di invito eliminato',
'admin.invite.createError': 'Impossibile creare il link di invito',
'admin.invite.deleteError': 'Impossibile eliminare il link di invito',
'admin.tabs.settings': 'Impostazioni',
'admin.allowRegistration': 'Consenti Registrazione',
'admin.allowRegistrationHint':
'I nuovi utenti possono registrarsi autonomamente',
'admin.authMethods': 'Authentication Methods',
'admin.passwordLogin': 'Password Login',
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
'admin.passwordRegistration': 'Password Registration',
'admin.passwordRegistrationHint':
'Allow new users to register with email and password',
'admin.oidcLogin': 'SSO Login',
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
'admin.oidcRegistration': 'SSO Auto-Provisioning',
'admin.oidcRegistrationHint':
'Automatically create accounts for new SSO users',
'admin.envOverrideHint':
'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
'admin.lockoutWarning': 'At least one login method must remain enabled',
'admin.requireMfa': 'Richiedi autenticazione a due fattori (2FA)',
'admin.requireMfaHint':
"Gli utenti senza 2FA devono completare la configurazione in Impostazioni prima di usare l'app.",
'admin.apiKeys': 'Chiavi API',
'admin.apiKeysHint':
'Opzionale. Abilita dati estesi per i luoghi come foto e meteo.',
'admin.mapsKey': 'Chiave API Google Maps',
'admin.mapsKeyHint':
'Richiesta per la ricerca dei luoghi. Ottienila su console.cloud.google.com',
'admin.mapsKeyHintLong':
'Senza una chiave API, OpenStreetMap viene utilizzato per la ricerca dei luoghi. Con una chiave API di Google, è possibile caricare anche foto, valutazioni e orari di apertura. Ottienine una su console.cloud.google.com.',
'admin.recommended': 'Consigliato',
'admin.weatherKey': 'Chiave API OpenWeatherMap',
'admin.weatherKeyHint': 'Per i dati meteo. Gratuita su openweathermap.org',
'admin.validateKey': 'Testa',
'admin.keyValid': 'Connessa',
'admin.keyInvalid': 'Non valida',
'admin.keySaved': 'Chiavi API salvate',
'admin.oidcTitle': 'Single Sign-On (OIDC)',
'admin.oidcSubtitle':
"Consenti l'accesso tramite provider esterni come Google, Apple, Authentik o Keycloak.",
'admin.oidcDisplayName': 'Nome Visualizzato',
'admin.oidcIssuer': 'URL Emittente',
'admin.oidcIssuerHint':
"L'URL dell'Emittente OpenID Connect del provider. es. https://accounts.google.com",
'admin.oidcSaved': 'Configurazione OIDC salvata',
'admin.oidcOnlyMode': 'Disabilita autenticazione con password',
'admin.oidcOnlyModeHint':
"Se abilitato, è consentito solo l'accesso SSO. L'accesso basato su password e la registrazione sono bloccati.",
'admin.fileTypes': 'Tipi di File Consentiti',
'admin.fileTypesHint':
'Configura quali tipi di file gli utenti possono caricare.',
'admin.fileTypesFormat':
'Estensioni separate da virgola (es. jpg,png,pdf,doc). Usa * per consentire tutti i tipi.',
'admin.fileTypesSaved': 'Impostazioni dei tipi di file salvate',
'admin.placesPhotos.title': 'Foto dei luoghi',
'admin.placesPhotos.subtitle':
"Recupera le foto dall'API Google Places. Disabilita per risparmiare la quota API. Le foto di Wikimedia non sono interessate.",
'admin.placesAutocomplete.title': 'Completamento automatico dei luoghi',
'admin.placesAutocomplete.subtitle':
"Utilizza l'API Google Places per i suggerimenti di ricerca. Disabilita per risparmiare la quota API.",
'admin.placesDetails.title': 'Dettagli del luogo',
'admin.placesDetails.subtitle':
"Recupera informazioni dettagliate sul luogo (orari, valutazione, sito web) dall'API Google Places. Disabilita per risparmiare la quota API.",
'admin.bagTracking.title': 'Tracciamento valigia',
'admin.bagTracking.subtitle':
"Abilita il peso e l'assegnazione della valigia per gli elementi della lista valigia",
'admin.collab.chat.title': 'Chat',
'admin.collab.chat.subtitle':
'Messaggistica in tempo reale per la collaborazione',
'admin.collab.notes.title': 'Note',
'admin.collab.notes.subtitle': 'Note e documenti condivisi',
'admin.collab.polls.title': 'Sondaggi',
'admin.collab.polls.subtitle': 'Sondaggi e votazioni di gruppo',
'admin.collab.whatsnext.title': 'Prossimi passi',
'admin.collab.whatsnext.subtitle': 'Suggerimenti attività e prossimi passi',
'admin.tabs.config': 'Personalizzazione',
'admin.tabs.defaults': 'Impostazioni predefinite',
'admin.defaultSettings.title': 'Impostazioni predefinite utente',
'admin.defaultSettings.description':
"Imposta i valori predefiniti per l'intera istanza. Gli utenti che non hanno modificato un'impostazione vedranno questi valori. Le loro modifiche hanno sempre la priorità.",
'admin.defaultSettings.saved': 'Predefinito salvato',
'admin.defaultSettings.reset': 'Ripristina il predefinito integrato',
'admin.defaultSettings.resetToBuiltIn': 'ripristina',
'admin.tabs.templates': 'Modelli lista valigia',
'admin.packingTemplates.title': 'Modelli lista valigia',
'admin.packingTemplates.subtitle':
'Crea liste valigia riutilizzabili per i tuoi viaggi',
'admin.packingTemplates.create': 'Nuovo modello',
'admin.packingTemplates.namePlaceholder':
'Nome modello (es. Vacanza al mare)',
'admin.packingTemplates.empty': 'Ancora nessun modello creato',
'admin.packingTemplates.items': 'elementi',
'admin.packingTemplates.categories': 'categorie',
'admin.packingTemplates.itemName': 'Nome elemento',
'admin.packingTemplates.itemCategory': 'Categoria',
'admin.packingTemplates.categoryName': 'Nome categoria (es. Abbigliamento)',
'admin.packingTemplates.addCategory': 'Aggiungi categoria',
'admin.packingTemplates.created': 'Modello creato',
'admin.packingTemplates.deleted': 'Modello eliminato',
'admin.packingTemplates.loadError': 'Impossibile caricare i modelli',
'admin.packingTemplates.createError': 'Impossibile creare il modello',
'admin.packingTemplates.deleteError': 'Impossibile eliminare il modello',
'admin.packingTemplates.saveError': 'Impossibile salvare',
'admin.tabs.addons': 'Moduli',
'admin.addons.title': 'Moduli',
'admin.addons.subtitle':
'Abilita o disabilita le funzionalità per personalizzare la tua esperienza TREK.',
'admin.addons.catalog.packing.name': 'Liste',
'admin.addons.catalog.packing.description':
'Liste di imballaggio e attività da svolgere per i tuoi viaggi',
'admin.addons.catalog.budget.name': 'Budget',
'admin.addons.catalog.budget.description':
'Tieni traccia delle spese e pianifica il budget del tuo viaggio',
'admin.addons.catalog.documents.name': 'Documenti',
'admin.addons.catalog.documents.description':
'Archivia e gestisci i documenti di viaggio',
'admin.addons.catalog.vacay.name': 'Ferie',
'admin.addons.catalog.vacay.description':
'Pianificatore personale delle ferie con vista calendario',
'admin.addons.catalog.atlas.name': 'Atlante',
'admin.addons.catalog.atlas.description':
'Mappa del mondo con paesi visitati e statistiche di viaggio',
'admin.addons.catalog.collab.name': 'Collaborazione',
'admin.addons.catalog.collab.description':
'Note, sondaggi e chat in tempo reale per la pianificazione del viaggio',
'admin.addons.catalog.memories.name': 'Foto (Immich)',
'admin.addons.catalog.memories.description':
'Condividi le foto del viaggio tramite la tua istanza Immich',
'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description':
"Model Context Protocol per l'integrazione di assistenti AI",
'admin.addons.subtitleBefore':
'Abilita o disabilita le funzionalità per personalizzare la tua ',
'admin.addons.subtitleAfter': ' esperienza.',
'admin.addons.enabled': 'Abilitato',
'admin.addons.disabled': 'Disabilitato',
'admin.addons.type.trip': 'Viaggio',
'admin.addons.type.global': 'Globale',
'admin.addons.type.integration': 'Integrazione',
'admin.addons.tripHint':
"Disponibile come scheda all'interno di ciascun viaggio",
'admin.addons.globalHint':
'Disponibile come sezione autonoma nella navigazione principale',
'admin.addons.integrationHint':
'Servizi backend e integrazioni API senza pagina dedicata',
'admin.addons.toast.updated': 'Modulo aggiornato',
'admin.addons.toast.error': 'Impossibile aggiornare il modulo',
'admin.addons.noAddons': 'Nessun modulo disponibile',
'admin.weather.title': 'Dati meteo',
'admin.weather.badge': 'Dal 24 marzo 2026',
'admin.weather.description':
'TREK utilizza Open-Meteo come fonte dei dati meteo. Open-Meteo è un servizio meteo gratuito e open-source — non è richiesta alcuna chiave API.',
'admin.weather.forecast': 'Previsioni a 16 giorni',
'admin.weather.forecastDesc': 'In precedenza 5 giorni (OpenWeatherMap)',
'admin.weather.climate': 'Dati climatici storici',
'admin.weather.climateDesc':
'Medie degli ultimi 85 anni per i giorni oltre le previsioni a 16 giorni',
'admin.weather.requests': '10.000 richieste / giorno',
'admin.weather.requestsDesc': 'Gratis, nessuna chiave API richiesta',
'admin.weather.locationHint':
"Il meteo si basa sul primo luogo con coordinate di ogni giorno. Se a un giorno non è assegnato alcun luogo, viene utilizzato come riferimento un qualsiasi luogo dell'elenco.",
'admin.tabs.audit': 'Audit',
'admin.audit.subtitle':
'Eventi sensibili di sicurezza e amministrazione (backup, utenti, 2FA, impostazioni).',
'admin.audit.empty': 'Nessuna voce di audit.',
'admin.audit.refresh': 'Aggiorna',
'admin.audit.loadMore': 'Carica altro',
'admin.audit.showing': '{count} caricati · {total} totali',
'admin.audit.col.time': 'Ora',
'admin.audit.col.user': 'Utente',
'admin.audit.col.action': 'Azione',
'admin.audit.col.resource': 'Risorsa',
'admin.audit.col.ip': 'IP',
'admin.audit.col.details': 'Dettagli',
'admin.tabs.mcpTokens': 'Accesso MCP',
'admin.mcpTokens.title': 'Accesso MCP',
'admin.mcpTokens.subtitle':
'Gestisci le sessioni OAuth e i token API di tutti gli utenti',
'admin.mcpTokens.sectionTitle': 'Token API',
'admin.mcpTokens.owner': 'Proprietario',
'admin.mcpTokens.tokenName': 'Nome token',
'admin.mcpTokens.created': 'Creato',
'admin.mcpTokens.lastUsed': 'Ultimo utilizzo',
'admin.mcpTokens.never': 'Mai',
'admin.mcpTokens.empty': 'Non sono ancora stati creati token MCP',
'admin.mcpTokens.deleteTitle': 'Elimina token',
'admin.mcpTokens.deleteMessage':
"Questo token verrà revocato immediatamente. L'utente perderà l'accesso MCP tramite questo token.",
'admin.mcpTokens.deleteSuccess': 'Token eliminato',
'admin.mcpTokens.deleteError': 'Impossibile eliminare il token',
'admin.mcpTokens.loadError': 'Impossibile caricare i token',
'admin.oauthSessions.sectionTitle': 'Sessioni OAuth',
'admin.oauthSessions.clientName': 'Client',
'admin.oauthSessions.owner': 'Proprietario',
'admin.oauthSessions.scopes': 'Ambiti',
'admin.oauthSessions.created': 'Creato',
'admin.oauthSessions.empty': 'Nessuna sessione OAuth attiva',
'admin.oauthSessions.revokeTitle': 'Revoca sessione',
'admin.oauthSessions.revokeMessage':
"Questa sessione OAuth verrà revocata immediatamente. Il client perderà l'accesso MCP.",
'admin.oauthSessions.revokeSuccess': 'Sessione revocata',
'admin.oauthSessions.revokeError': 'Impossibile revocare la sessione',
'admin.oauthSessions.loadError': 'Impossibile caricare le sessioni OAuth',
'admin.tabs.github': 'GitHub',
'admin.github.title': 'Cronologia rilasci',
'admin.github.subtitle': 'Ultimi aggiornamenti da {repo}',
'admin.github.latest': 'Ultimo',
'admin.github.prerelease': 'Pre-release',
'admin.github.showDetails': 'Mostra dettagli',
'admin.github.hideDetails': 'Nascondi dettagli',
'admin.github.loadMore': 'Carica altro',
'admin.github.loading': 'Caricamento...',
'admin.github.error': 'Impossibile caricare i rilasci',
'admin.github.by': 'da',
'admin.github.support': 'Mi aiuta a continuare a sviluppare TREK',
'admin.update.available': 'Aggiornamento disponibile',
'admin.update.text':
'TREK {version} è disponibile. Stai eseguendo {current}.',
'admin.update.button': 'Vedi su GitHub',
'admin.update.install': 'Installa aggiornamento',
'admin.update.confirmTitle': "Installare l'aggiornamento?",
'admin.update.confirmText':
'TREK verrà aggiornato da {current} a {version}. Il server si riavvierà automaticamente in seguito.',
'admin.update.dataInfo':
'Tutti i tuoi dati (viaggi, utenti, chiavi API, caricamenti, Ferie, Atlante, budget) saranno preservati.',
'admin.update.warning':
"L'app sarà temporaneamente non disponibile durante il riavvio.",
'admin.update.confirm': 'Aggiorna ora',
'admin.update.installing': 'Aggiornamento in corso…',
'admin.update.success':
'Aggiornamento installato! Il server si sta riavviando…',
'admin.update.failed': 'Aggiornamento non riuscito',
'admin.update.backupHint':
'Ti consigliamo di creare un backup prima di aggiornare.',
'admin.update.backupLink': 'Vai a Backup',
'admin.update.howTo': 'Come aggiornare',
'admin.update.dockerText':
'La tua istanza TREK è in esecuzione in Docker. Per aggiornare alla versione {version}, esegui i seguenti comandi sul tuo server:',
'admin.update.reloadHint': 'Ricarica la pagina tra qualche secondo.',
'admin.tabs.permissions': 'Permessi',
'admin.notifications.emailPanel.title': 'Email (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook',
'admin.notifications.inappPanel.title': 'In-App',
'admin.notifications.inappPanel.hint':
'Le notifiche in-app sono sempre attive e non possono essere disabilitate globalmente.',
'admin.notifications.adminWebhookPanel.title': 'Webhook admin',
'admin.notifications.adminWebhookPanel.hint':
'Questo webhook viene usato esclusivamente per le notifiche admin (es. avvisi di versione). È separato dai webhook utente e si attiva automaticamente quando è configurato un URL.',
'admin.notifications.adminWebhookPanel.saved': 'URL webhook admin salvato',
'admin.notifications.adminWebhookPanel.testSuccess':
'Webhook di test inviato con successo',
'admin.notifications.adminWebhookPanel.testFailed':
'Invio webhook di test fallito',
'admin.notifications.adminWebhookPanel.alwaysOnHint':
'Il webhook admin si attiva automaticamente quando è configurato un URL',
'admin.notifications.ntfy': 'Ntfy',
'admin.ntfy.hint':
'Consente agli utenti di configurare i propri argomenti ntfy per le notifiche push. Imposta il server predefinito di seguito per precompilare le impostazioni utente.',
'admin.notifications.testNtfy': 'Invia Ntfy di test',
'admin.notifications.testNtfySuccess': 'Ntfy di test inviato con successo',
'admin.notifications.testNtfyFailed': 'Invio Ntfy di test fallito',
'admin.notifications.adminNtfyPanel.title': 'Ntfy admin',
'admin.notifications.adminNtfyPanel.hint':
'Questo argomento Ntfy viene usato esclusivamente per le notifiche admin (es. avvisi di versione). È separato dagli argomenti per utente e si attiva sempre quando è configurato.',
'admin.notifications.adminNtfyPanel.serverLabel': 'URL server Ntfy',
'admin.notifications.adminNtfyPanel.serverHint':
'Usato anche come server predefinito per le notifiche ntfy degli utenti. Lasciare vuoto per usare ntfy.sh. Gli utenti possono sovrascriverlo nelle proprie impostazioni.',
'admin.notifications.adminNtfyPanel.serverPlaceholder': 'https://ntfy.sh',
'admin.notifications.adminNtfyPanel.topicLabel': 'Argomento admin',
'admin.notifications.adminNtfyPanel.topicPlaceholder': 'trek-admin-alerts',
'admin.notifications.adminNtfyPanel.tokenLabel':
'Token di accesso (opzionale)',
'admin.notifications.adminNtfyPanel.tokenCleared':
'Token di accesso admin rimosso',
'admin.notifications.adminNtfyPanel.saved': 'Impostazioni Ntfy admin salvate',
'admin.notifications.adminNtfyPanel.test': 'Invia Ntfy di test',
'admin.notifications.adminNtfyPanel.testSuccess':
'Ntfy di test inviato con successo',
'admin.notifications.adminNtfyPanel.testFailed': 'Invio Ntfy di test fallito',
'admin.notifications.adminNtfyPanel.alwaysOnHint':
'Il Ntfy admin si attiva sempre quando un argomento è configurato',
'admin.notifications.adminNotificationsHint':
'Configura quali canali consegnano le notifiche admin (es. avvisi di versione). Il webhook si attiva automaticamente se è impostato un URL webhook admin.',
'admin.notifications.tripReminders.title': 'Promemoria viaggio',
'admin.notifications.tripReminders.hint':
"Invia una notifica promemoria prima dell'inizio di un viaggio (richiede giorni di promemoria impostati sul viaggio).",
'admin.notifications.tripReminders.enabled': 'Promemoria viaggio attivati',
'admin.notifications.tripReminders.disabled':
'Promemoria viaggio disattivati',
'admin.tabs.notifications': 'Notifiche',
'admin.addons.catalog.journey.name': 'Diario di viaggio',
'admin.addons.catalog.journey.description':
'Tracciamento viaggi e diario con check-in, foto e storie quotidiane',
};
export default admin;
+6
View File
@@ -0,0 +1,6 @@
import type { TranslationStrings } from '../types';
const airport: TranslationStrings = {
'airport.searchPlaceholder': "Codice o città dell'aeroporto (es. FRA)",
};
export default airport;
+61
View File
@@ -0,0 +1,61 @@
import type { TranslationStrings } from '../types';
const atlas: TranslationStrings = {
'atlas.subtitle': 'La tua impronta di viaggio nel mondo',
'atlas.countries': 'Paesi',
'atlas.trips': 'Viaggi',
'atlas.places': 'Luoghi',
'atlas.unmark': 'Rimuovi',
'atlas.confirmMark': 'Segnare questo paese come visitato?',
'atlas.confirmUnmark': 'Rimuovere questo paese dalla tua lista dei visitati?',
'atlas.confirmUnmarkRegion':
'Rimuovere questa regione dalla tua lista dei visitati?',
'atlas.markVisited': 'Segna come visitato',
'atlas.markVisitedHint': 'Aggiungi questo paese alla tua lista dei visitati',
'atlas.markRegionVisitedHint':
'Aggiungi questa regione alla tua lista dei visitati',
'atlas.addToBucket': 'Aggiungi alla lista desideri',
'atlas.addPoi': 'Aggiungi luogo',
'atlas.bucketNamePlaceholder': 'Nome (paese, città, luogo...)',
'atlas.month': 'Mese',
'atlas.addToBucketHint': 'Salvalo come luogo che vuoi visitare',
'atlas.bucketWhen': 'Quando pensi di visitarlo?',
'atlas.statsTab': 'Statistiche',
'atlas.bucketTab': 'Lista desideri',
'atlas.addBucket': 'Aggiungi alla lista desideri',
'atlas.bucketNotesPlaceholder': 'Note (opzionale)',
'atlas.bucketEmpty': 'La tua lista desideri è vuota',
'atlas.bucketEmptyHint': 'Aggiungi luoghi che sogni di visitare',
'atlas.days': 'Giorni',
'atlas.visitedCountries': 'Paesi visitati',
'atlas.cities': 'Città',
'atlas.noData': 'Ancora nessun dato di viaggio',
'atlas.noDataHint':
'Crea un viaggio e aggiungi luoghi per vedere la tua mappa del mondo',
'atlas.lastTrip': 'Ultimo viaggio',
'atlas.nextTrip': 'Prossimo viaggio',
'atlas.daysLeft': 'giorni rimasti',
'atlas.streak': 'Serie',
'atlas.year': 'anno',
'atlas.years': 'anni',
'atlas.yearInRow': 'anno consecutivo',
'atlas.yearsInRow': 'anni consecutivi',
'atlas.tripIn': 'viaggio in',
'atlas.tripsIn': 'viaggi in',
'atlas.since': 'dal',
'atlas.europe': 'Europa',
'atlas.asia': 'Asia',
'atlas.northAmerica': 'Nord America',
'atlas.southAmerica': 'Sud America',
'atlas.africa': 'Africa',
'atlas.oceania': 'Oceania',
'atlas.other': 'Altro',
'atlas.firstVisit': 'Primo viaggio',
'atlas.lastVisitLabel': 'Ultimo viaggio',
'atlas.tripSingular': 'Viaggio',
'atlas.tripPlural': 'Viaggi',
'atlas.placeVisited': 'Luogo visitato',
'atlas.placesVisited': 'Luoghi visitati',
'atlas.searchCountry': 'Cerca un paese...',
};
export default atlas;
+77
View File
@@ -0,0 +1,77 @@
import type { TranslationStrings } from '../types';
const backup: TranslationStrings = {
'backup.title': 'Backup dati',
'backup.subtitle': 'Database e tutti i file caricati',
'backup.refresh': 'Aggiorna',
'backup.upload': 'Carica backup',
'backup.uploading': 'Caricamento...',
'backup.create': 'Crea backup',
'backup.creating': 'Creazione...',
'backup.empty': 'Ancora nessun backup',
'backup.createFirst': 'Crea primo backup',
'backup.download': 'Scarica',
'backup.restore': 'Ripristina',
'backup.confirm.restore':
'Ripristinare il backup "{name}"?\n\nTutti i dati attuali verranno sostituiti con il backup.',
'backup.confirm.uploadRestore':
'Scaricare e ripristinare il file di backup "{name}"?\n\nTutti i dati attuali verranno sovrascritti.',
'backup.confirm.delete': 'Eliminare il backup "{name}"?',
'backup.toast.loadError': 'Impossibile caricare i backup',
'backup.toast.created': 'Backup creato con successo',
'backup.toast.createError': 'Impossibile creare il backup',
'backup.toast.restored': 'Backup ripristinato. La pagina verrà ricaricata...',
'backup.toast.restoreError': 'Impossibile ripristinare',
'backup.toast.uploadError': 'Impossibile caricare',
'backup.toast.deleted': 'Backup eliminato',
'backup.toast.deleteError': 'Impossibile eliminare',
'backup.toast.downloadError': 'Download non riuscito',
'backup.toast.settingsSaved': 'Impostazioni auto-backup salvate',
'backup.toast.settingsError': 'Impossibile salvare le impostazioni',
'backup.auto.title': 'Auto-Backup',
'backup.auto.subtitle': 'Backup automatico pianificato',
'backup.auto.enable': 'Abilita auto-backup',
'backup.auto.enableHint':
'I backup verranno creati automaticamente in base alla pianificazione scelta',
'backup.auto.interval': 'Intervallo',
'backup.auto.hour': "Esegui all'ora",
'backup.auto.hourHint': 'Ora locale del server (formato {format})',
'backup.auto.dayOfWeek': 'Giorno della settimana',
'backup.auto.dayOfMonth': 'Giorno del mese',
'backup.auto.dayOfMonthHint':
'Limitato a 128 per compatibilità con tutti i mesi',
'backup.auto.scheduleSummary': 'Pianificazione',
'backup.auto.summaryDaily': 'Ogni giorno alle {hour}:00',
'backup.auto.summaryWeekly': 'Ogni {day} alle {hour}:00',
'backup.auto.summaryMonthly': 'Giorno {day} di ogni mese alle {hour}:00',
'backup.auto.envLocked': 'Docker',
'backup.auto.envLockedHint':
"L'auto-backup è configurato tramite variabili d'ambiente Docker. Per modificare queste impostazioni, aggiorna il tuo docker-compose.yml e riavvia il container.",
'backup.auto.copyEnv': 'Copia variabili env Docker',
'backup.auto.envCopied': 'Variabili env Docker copiate negli appunti',
'backup.auto.keepLabel': 'Elimina i vecchi backup dopo',
'backup.dow.sunday': 'Dom',
'backup.dow.monday': 'Lun',
'backup.dow.tuesday': 'Mar',
'backup.dow.wednesday': 'Mer',
'backup.dow.thursday': 'Gio',
'backup.dow.friday': 'Ven',
'backup.dow.saturday': 'Sab',
'backup.interval.hourly': 'Ogni ora',
'backup.interval.daily': 'Giornaliero',
'backup.interval.weekly': 'Settimanale',
'backup.interval.monthly': 'Mensile',
'backup.keep.1day': '1 giorno',
'backup.keep.3days': '3 giorni',
'backup.keep.7days': '7 giorni',
'backup.keep.14days': '14 giorni',
'backup.keep.30days': '30 giorni',
'backup.keep.forever': 'Conserva per sempre',
'backup.restoreConfirmTitle': 'Ripristinare il backup?',
'backup.restoreWarning':
'Tutti i dati attuali (viaggi, luoghi, utenti, caricamenti) verranno sostituiti in modo permanente dal backup. Questa azione non può essere annullata.',
'backup.restoreTip':
'Suggerimento: Crea un backup dello stato attuale prima di ripristinare.',
'backup.restoreConfirm': 'Sì, ripristina',
};
export default backup;
+44
View File
@@ -0,0 +1,44 @@
import type { TranslationStrings } from '../types';
const budget: TranslationStrings = {
'budget.title': 'Budget',
'budget.exportCsv': 'Esporta CSV',
'budget.emptyTitle': 'Ancora nessun budget creato',
'budget.emptyText':
'Crea categorie e voci per pianificare il budget del tuo viaggio',
'budget.emptyPlaceholder': 'Inserisci nome categoria...',
'budget.createCategory': 'Crea categoria',
'budget.category': 'Categoria',
'budget.categoryName': 'Nome categoria',
'budget.table.name': 'Nome',
'budget.table.total': 'Totale',
'budget.table.persons': 'Persone',
'budget.table.days': 'Giorni',
'budget.table.perPerson': 'Per persona',
'budget.table.perDay': 'Per giorno',
'budget.table.perPersonDay': 'P. p / gio.',
'budget.table.note': 'Nota',
'budget.table.date': 'Data',
'budget.newEntry': 'Nuova voce',
'budget.defaultEntry': 'Nuova voce',
'budget.defaultCategory': 'Nuova categoria',
'budget.total': 'Totale',
'budget.totalBudget': 'Budget totale',
'budget.byCategory': 'Per categoria',
'budget.editTooltip': 'Clicca per modificare',
'budget.linkedToReservation':
'Collegato a una prenotazione — modifica il nome lì',
'budget.confirm.deleteCategory':
'Sei sicuro di voler eliminare la categoria "{name}" con {count} voci?',
'budget.deleteCategory': 'Elimina categoria',
'budget.perPerson': 'Per persona',
'budget.paid': 'Pagato',
'budget.open': 'Aperto',
'budget.noMembers': 'Nessun membro assegnato',
'budget.settlement': 'Regolamento',
'budget.settlementInfo':
"Clicca sull'avatar di un membro su una voce di budget per contrassegnarlo in verde — significa che ha pagato. Il regolamento mostra poi chi deve quanto a chi.",
'budget.netBalances': 'Saldi netti',
'budget.categoriesLabel': 'categorie',
};
export default budget;
+26
View File
@@ -0,0 +1,26 @@
import type { TranslationStrings } from '../types';
const categories: TranslationStrings = {
'categories.title': 'Categorie',
'categories.subtitle': 'Gestisci le categorie per i luoghi',
'categories.new': 'Nuova categoria',
'categories.empty': 'Ancora nessuna categoria',
'categories.namePlaceholder': 'Nome categoria',
'categories.icon': 'Icona',
'categories.color': 'Colore',
'categories.customColor': 'Scegli colore personalizzato',
'categories.preview': 'Anteprima',
'categories.defaultName': 'Categoria',
'categories.update': 'Aggiorna',
'categories.create': 'Crea',
'categories.confirm.delete':
'Eliminare la categoria? I luoghi in questa categoria non verranno eliminati.',
'categories.toast.loadError': 'Impossibile caricare le categorie',
'categories.toast.nameRequired': 'Inserisci un nome',
'categories.toast.updated': 'Categoria aggiornata',
'categories.toast.created': 'Categoria creata',
'categories.toast.saveError': 'Impossibile salvare',
'categories.toast.deleted': 'Categoria eliminata',
'categories.toast.deleteError': 'Impossibile eliminare',
};
export default categories;
+75
View File
@@ -0,0 +1,75 @@
import type { TranslationStrings } from '../types';
const collab: TranslationStrings = {
'collab.tabs.chat': 'Chat',
'collab.tabs.notes': 'Note',
'collab.tabs.polls': 'Sondaggi',
'collab.whatsNext.title': "Cosa c'è dopo",
'collab.whatsNext.today': 'Oggi',
'collab.whatsNext.tomorrow': 'Domani',
'collab.whatsNext.empty': 'Nessuna attività imminente',
'collab.whatsNext.until': 'a',
'collab.whatsNext.emptyHint': 'Le attività con orari appariranno qui',
'collab.chat.send': 'Invia',
'collab.chat.placeholder': 'Scrivi un messaggio...',
'collab.chat.empty': 'Inizia la conversazione',
'collab.chat.emptyHint':
'I messaggi sono condivisi con tutti i membri del viaggio',
'collab.chat.emptyDesc':
'Condividi idee, programmi e aggiornamenti con il tuo gruppo di viaggio',
'collab.chat.today': 'Oggi',
'collab.chat.yesterday': 'Ieri',
'collab.chat.deletedMessage': 'ha eliminato un messaggio',
'collab.chat.reply': 'Rispondi',
'collab.chat.loadMore': 'Carica messaggi precedenti',
'collab.chat.justNow': 'ora',
'collab.chat.minutesAgo': '{n}m fa',
'collab.chat.hoursAgo': '{n}h fa',
'collab.notes.title': 'Note',
'collab.notes.new': 'Nuova nota',
'collab.notes.empty': 'Ancora nessuna nota',
'collab.notes.emptyHint': 'Inizia a raccogliere idee e programmi',
'collab.notes.all': 'Tutte',
'collab.notes.titlePlaceholder': 'Titolo della nota',
'collab.notes.contentPlaceholder': 'Scrivi qualcosa...',
'collab.notes.categoryPlaceholder': 'Categoria',
'collab.notes.newCategory': 'Nuova categoria...',
'collab.notes.category': 'Categoria',
'collab.notes.noCategory': 'Nessuna categoria',
'collab.notes.color': 'Colore',
'collab.notes.save': 'Salva',
'collab.notes.cancel': 'Annulla',
'collab.notes.edit': 'Modifica',
'collab.notes.delete': 'Elimina',
'collab.notes.pin': 'Fissa',
'collab.notes.unpin': 'Rimuovi',
'collab.notes.daysAgo': '{n}g fa',
'collab.notes.categorySettings': 'Gestisci categorie',
'collab.notes.create': 'Crea',
'collab.notes.website': 'Sito web',
'collab.notes.websitePlaceholder': 'https://...',
'collab.notes.attachFiles': 'Allega file',
'collab.notes.noCategoriesYet': 'Ancora nessuna categoria',
'collab.notes.emptyDesc': 'Crea una nota per iniziare',
'collab.polls.title': 'Sondaggi',
'collab.polls.new': 'Nuovo sondaggio',
'collab.polls.empty': 'Ancora nessun sondaggio',
'collab.polls.emptyHint': 'Chiedi al gruppo e votate insieme',
'collab.polls.question': 'Domanda',
'collab.polls.questionPlaceholder': 'Cosa dovremmo fare?',
'collab.polls.addOption': '+ Aggiungi opzione',
'collab.polls.optionPlaceholder': 'Opzione {n}',
'collab.polls.create': 'Crea sondaggio',
'collab.polls.close': 'Chiudi',
'collab.polls.closed': 'Chiuso',
'collab.polls.votes': '{n} voti',
'collab.polls.vote': '{n} voto',
'collab.polls.multipleChoice': 'Scelta multipla',
'collab.polls.multiChoice': 'Scelta multipla',
'collab.polls.deadline': 'Scadenza',
'collab.polls.option': 'Opzione',
'collab.polls.options': 'Opzioni',
'collab.polls.delete': 'Elimina',
'collab.polls.closedSection': 'Chiusi',
};
export default collab;
+54
View File
@@ -0,0 +1,54 @@
import type { TranslationStrings } from '../types';
const common: TranslationStrings = {
'common.save': 'Salva',
'common.showMore': 'Mostra di più',
'common.showLess': 'Mostra meno',
'common.cancel': 'Annulla',
'common.clear': 'Cancella',
'common.delete': 'Elimina',
'common.edit': 'Modifica',
'common.add': 'Aggiungi',
'common.loading': 'Caricamento...',
'common.import': 'Importa',
'common.select': 'Seleziona',
'common.selectAll': 'Seleziona tutto',
'common.deselectAll': 'Deseleziona tutto',
'common.error': 'Errore',
'common.unknownError': 'Errore sconosciuto',
'common.tooManyAttempts': 'Troppi tentativi. Riprova più tardi.',
'common.back': 'Indietro',
'common.all': 'Tutti',
'common.close': 'Chiudi',
'common.open': 'Apri',
'common.upload': 'Carica',
'common.search': 'Cerca',
'common.confirm': 'Conferma',
'common.ok': 'OK',
'common.yes': 'Sì',
'common.no': 'No',
'common.or': 'o',
'common.none': 'Nessuno',
'common.date': 'Data',
'common.rename': 'Rinomina',
'common.discardChanges': 'Scarta modifiche',
'common.discard': 'Scarta',
'common.name': 'Nome',
'common.email': 'Email',
'common.password': 'Password',
'common.saving': 'Salvataggio...',
'common.saved': 'Salvato',
'common.expand': 'Espandi',
'common.collapse': 'Comprimi',
'common.update': 'Aggiorna',
'common.change': 'Cambia',
'common.uploading': 'Caricamento…',
'common.backToPlanning': 'Torna al Programma',
'common.reset': 'Reimposta',
'common.copy': 'Copia',
'common.copied': 'Copiato',
'common.justNow': 'proprio ora',
'common.hoursAgo': '{count}h fa',
'common.daysAgo': '{count}g fa',
};
export default common;
+110
View File
@@ -0,0 +1,110 @@
import type { TranslationStrings } from '../types';
const dashboard: TranslationStrings = {
'dashboard.title': 'I miei Viaggi',
'dashboard.subtitle.loading': 'Caricamento viaggi...',
'dashboard.subtitle.trips': '{count} viaggi ({archived} archiviati)',
'dashboard.subtitle.empty': 'Inizia il tuo primo viaggio',
'dashboard.subtitle.activeOne': '{count} viaggio attivo',
'dashboard.subtitle.activeMany': '{count} viaggi attivi',
'dashboard.subtitle.archivedSuffix': ' · {count} archiviati',
'dashboard.newTrip': 'Nuovo Viaggio',
'dashboard.gridView': 'Vista a griglia',
'dashboard.listView': 'Vista a lista',
'dashboard.currency': 'Valuta',
'dashboard.timezone': 'Fusi orari',
'dashboard.localTime': 'Locale',
'dashboard.timezoneCustomTitle': 'Fuso orario personalizzato',
'dashboard.timezoneCustomLabelPlaceholder': 'Etichetta (opzionale)',
'dashboard.timezoneCustomTzPlaceholder': 'es. Europe/Rome',
'dashboard.timezoneCustomAdd': 'Aggiungi',
'dashboard.timezoneCustomErrorEmpty':
'Inserisci un identificatore di fuso orario',
'dashboard.timezoneCustomErrorInvalid':
'Fuso orario non valido. Usa formati come Europe/Rome',
'dashboard.timezoneCustomErrorDuplicate': 'Già aggiunto',
'dashboard.emptyTitle': 'Ancora nessun viaggio',
'dashboard.emptyText': 'Crea il tuo primo viaggio e inizia a programmare!',
'dashboard.emptyButton': 'Crea il primo viaggio',
'dashboard.nextTrip': 'Prossimo Viaggio',
'dashboard.shared': 'Condiviso',
'dashboard.sharedBy': 'Condiviso da {name}',
'dashboard.days': 'Giorni',
'dashboard.places': 'Luoghi',
'dashboard.members': 'Compagni di viaggio',
'dashboard.archive': 'Archivia',
'dashboard.copyTrip': 'Copia',
'dashboard.copySuffix': 'copia',
'dashboard.restore': 'Ripristina',
'dashboard.archived': 'Archiviati',
'dashboard.status.ongoing': 'In corso',
'dashboard.status.today': 'Oggi',
'dashboard.status.tomorrow': 'Domani',
'dashboard.status.past': 'Passato',
'dashboard.status.daysLeft': '-{count} giorni',
'dashboard.toast.loadError': 'Impossibile caricare i viaggi',
'dashboard.toast.created': 'Viaggio creato con successo!',
'dashboard.toast.createError': 'Impossibile creare il viaggio',
'dashboard.toast.updated': 'Viaggio aggiornato!',
'dashboard.toast.updateError': 'Impossibile aggiornare il viaggio',
'dashboard.toast.deleted': 'Viaggio eliminato',
'dashboard.toast.deleteError': 'Impossibile eliminare il viaggio',
'dashboard.toast.archived': 'Viaggio archiviato',
'dashboard.toast.archiveError': 'Impossibile archiviare il viaggio',
'dashboard.toast.restored': 'Viaggio ripristinato',
'dashboard.toast.restoreError': 'Impossibile ripristinare il viaggio',
'dashboard.toast.copied': 'Viaggio copiato!',
'dashboard.toast.copyError': 'Impossibile copiare il viaggio',
'dashboard.confirm.delete':
'Eliminare il viaggio "{title}"? Tutti i luoghi e i programmi verranno eliminati in modo permanente.',
'dashboard.editTrip': 'Modifica Viaggio',
'dashboard.createTrip': 'Crea Nuovo Viaggio',
'dashboard.tripTitle': 'Titolo',
'dashboard.tripTitlePlaceholder': 'es. Estate in Giappone',
'dashboard.tripDescription': 'Descrizione',
'dashboard.tripDescriptionPlaceholder': 'Di cosa tratta questo viaggio?',
'dashboard.startDate': 'Data di inizio',
'dashboard.endDate': 'Data di fine',
'dashboard.dayCount': 'Numero di giorni',
'dashboard.dayCountHint':
'Quanti giorni pianificare quando non sono impostate date di viaggio.',
'dashboard.noDateHint':
'Nessuna data impostata — verranno creati 7 giorni predefiniti. Puoi cambiarlo in qualsiasi momento.',
'dashboard.coverImage': 'Immagine di copertina',
'dashboard.addCoverImage':
'Aggiungi immagine di copertina (o trascinala qui)',
'dashboard.addMembers': 'Compagni di viaggio',
'dashboard.addMember': 'Aggiungi membro',
'dashboard.coverSaved': 'Immagine di copertina salvata',
'dashboard.coverUploadError': 'Impossibile caricare',
'dashboard.coverRemoveError': 'Impossibile rimuovere',
'dashboard.titleRequired': 'Il titolo è obbligatorio',
'dashboard.endDateError':
'La data di fine deve essere successiva alla data di inizio',
'dashboard.greeting.morning': 'Buongiorno,',
'dashboard.greeting.afternoon': 'Buon pomeriggio,',
'dashboard.greeting.evening': 'Buonasera,',
'dashboard.mobile.liveNow': 'In diretta',
'dashboard.mobile.tripProgress': 'Progresso del viaggio',
'dashboard.mobile.daysLeft': '{count} giorni rimanenti',
'dashboard.mobile.places': 'Luoghi',
'dashboard.mobile.buddies': 'Compagni',
'dashboard.mobile.newTrip': 'Nuovo viaggio',
'dashboard.mobile.currency': 'Valuta',
'dashboard.mobile.timezone': 'Fuso orario',
'dashboard.mobile.upcomingTrips': 'Viaggi in arrivo',
'dashboard.mobile.yourTrips': 'I tuoi viaggi',
'dashboard.mobile.trips': 'viaggi',
'dashboard.mobile.starts': 'Inizio',
'dashboard.mobile.duration': 'Durata',
'dashboard.mobile.day': 'giorno',
'dashboard.mobile.days': 'giorni',
'dashboard.mobile.ongoing': 'In corso',
'dashboard.mobile.startsToday': 'Inizia oggi',
'dashboard.mobile.tomorrow': 'Domani',
'dashboard.mobile.inDays': 'Tra {count} giorni',
'dashboard.mobile.inMonths': 'Tra {count} mesi',
'dashboard.mobile.completed': 'Completato',
'dashboard.mobile.currencyConverter': 'Convertitore di valuta',
};
export default dashboard;
+27
View File
@@ -0,0 +1,27 @@
import type { TranslationStrings } from '../types';
const day: TranslationStrings = {
'day.precipProb': 'Probabilità di pioggia',
'day.precipitation': 'Precipitazioni',
'day.wind': 'Vento',
'day.sunrise': 'Alba',
'day.sunset': 'Tramonto',
'day.hourlyForecast': 'Previsione oraria',
'day.climateHint':
'Medie storiche — previsioni reali disponibili entro 16 giorni da questa data.',
'day.noWeather':
'Nessun dato meteo disponibile. Aggiungi un luogo con coordinate.',
'day.overview': 'Panoramica giornaliera',
'day.accommodation': 'Alloggio',
'day.addAccommodation': 'Aggiungi alloggio',
'day.hotelDayRange': 'Applica ai giorni',
'day.noPlacesForHotel': 'Aggiungi prima i luoghi al tuo viaggio',
'day.allDays': 'Tutti',
'day.checkIn': 'Check-in',
'day.checkInUntil': 'Fino a',
'day.checkOut': 'Check-out',
'day.confirmation': 'Conferma',
'day.editAccommodation': 'Modifica alloggio',
'day.reservations': 'Prenotazioni',
};
export default day;
+46
View File
@@ -0,0 +1,46 @@
import type { TranslationStrings } from '../types';
const dayplan: TranslationStrings = {
'dayplan.icsTooltip': 'Esporta calendario (ICS)',
'dayplan.emptyDay': 'Nessun luogo programmato per questo giorno',
'dayplan.addNote': 'Aggiungi nota',
'dayplan.editNote': 'Modifica nota',
'dayplan.noteAdd': 'Aggiungi nota',
'dayplan.noteEdit': 'Modifica nota',
'dayplan.noteTitle': 'Nota',
'dayplan.noteSubtitle': 'Nota giornaliera',
'dayplan.totalCost': 'Costo totale',
'dayplan.days': 'Giorni',
'dayplan.dayN': 'Giorno {n}',
'dayplan.calculating': 'Calcolo in corso...',
'dayplan.route': 'Percorso',
'dayplan.optimize': 'Ottimizza',
'dayplan.optimized': 'Percorso ottimizzato',
'dayplan.routeError': 'Impossibile calcolare il percorso',
'dayplan.toast.needTwoPlaces':
"Servono almeno due luoghi per l'ottimizzazione del percorso",
'dayplan.toast.routeOptimized': 'Percorso ottimizzato',
'dayplan.toast.noGeoPlaces':
'Nessun luogo con coordinate trovato per il calcolo del percorso',
'dayplan.confirmed': 'Confermata',
'dayplan.pendingRes': 'In attesa',
'dayplan.pdf': 'PDF',
'dayplan.pdfTooltip': 'Esporta il programma del giorno come PDF',
'dayplan.pdfError': 'Impossibile esportare il PDF',
'dayplan.cannotReorderTransport':
'Le prenotazioni con un orario fisso non possono essere riordinate',
'dayplan.confirmRemoveTimeTitle': "Rimuovere l'orario?",
'dayplan.confirmRemoveTimeBody':
"Questo luogo ha un orario fisso ({time}). Spostarlo rimuoverà l'orario e consentirà l'ordinamento libero.",
'dayplan.confirmRemoveTimeAction': 'Rimuovi orario e sposta',
'dayplan.cannotDropOnTimed':
'Gli elementi non possono essere posizionati tra voci con orario fisso',
'dayplan.cannotBreakChronology':
"Ciò interromperebbe l'ordine cronologico degli elementi e delle prenotazioni pianificati",
'dayplan.mobile.addPlace': 'Aggiungi luogo',
'dayplan.mobile.searchPlaces': 'Cerca luoghi...',
'dayplan.mobile.allAssigned': 'Tutti i luoghi assegnati',
'dayplan.mobile.noMatch': 'Nessun risultato',
'dayplan.mobile.createNew': 'Crea nuovo luogo',
};
export default dayplan;
@@ -0,0 +1,64 @@
import type { NotificationLocale } from '../externalNotifications/types';
const it: NotificationLocale = {
email: {
footer:
'Hai ricevuto questa email perché hai le notifiche abilitate in TREK.',
manage: 'Gestisci le preferenze nelle impostazioni',
madeWith: 'Made with',
openTrek: 'Apri TREK',
},
events: {
trip_invite: (p) => ({
title: `Invito a "${p.trip}"`,
body: `${p.actor} ha invitato ${p.invitee || 'un membro'} al viaggio "${p.trip}".`,
}),
booking_change: (p) => ({
title: `Nuova prenotazione: ${p.booking}`,
body: `${p.actor} ha aggiunto una prenotazione "${p.booking}" (${p.type}) a "${p.trip}".`,
}),
trip_reminder: (p) => ({
title: `Promemoria viaggio: ${p.trip}`,
body: `Il tuo viaggio "${p.trip}" si avvicina!`,
}),
todo_due: (p) => ({
title: `Attività in scadenza: ${p.todo}`,
body: `"${p.todo}" in "${p.trip}" scade il ${p.due}.`,
}),
vacay_invite: (p) => ({
title: 'Invito Vacay Fusion',
body: `${p.actor} ti ha invitato a fondere i piani vacanza. Apri TREK per accettare o rifiutare.`,
}),
photos_shared: (p) => ({
title: `${p.count} foto condivise`,
body: `${p.actor} ha condiviso ${p.count} foto in "${p.trip}".`,
}),
collab_message: (p) => ({
title: `Nuovo messaggio in "${p.trip}"`,
body: `${p.actor}: ${p.preview}`,
}),
packing_tagged: (p) => ({
title: `Bagagli: ${p.category}`,
body: `${p.actor} ti ha assegnato alla categoria "${p.category}" in "${p.trip}".`,
}),
version_available: (p) => ({
title: 'Nuova versione TREK disponibile',
body: `TREK ${p.version} è ora disponibile. Visita il pannello di amministrazione per aggiornare.`,
}),
synology_session_cleared: () => ({
title: 'Sessione Synology rimossa',
body: 'Il tuo account o URL Synology è cambiato. Sei stato disconnesso da Synology Photos.',
}),
},
passwordReset: {
subject: 'Reimposta la tua password',
greeting: 'Ciao',
body: 'Abbiamo ricevuto una richiesta di reimpostazione della password per il tuo account TREK. Clicca il pulsante qui sotto per impostare una nuova password.',
ctaIntro: 'Reimposta password',
expiry: 'Questo link scade tra 60 minuti.',
ignore:
'Se non hai richiesto questa operazione, ignora questa email — la tua password non cambierà.',
},
};
export default it;
+62
View File
@@ -0,0 +1,62 @@
import type { TranslationStrings } from '../types';
const files: TranslationStrings = {
'files.title': 'File',
'files.pageTitle': 'File e documenti',
'files.subtitle': '{count} file per {trip}',
'files.download': 'Scarica',
'files.openError': 'Impossibile aprire il file',
'files.downloadPdf': 'Scarica PDF',
'files.count': '{count} file',
'files.countSingular': '1 documento',
'files.uploaded': '{count} caricati',
'files.uploadError': 'Caricamento non riuscito',
'files.dropzone': 'Trascina qui i file',
'files.dropzoneHint': 'oppure clicca per sfogliare',
'files.allowedTypes':
'Immagini, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Max 50 MB',
'files.uploading': 'Caricamento...',
'files.filterAll': 'Tutti',
'files.filterPdf': 'PDF',
'files.filterImages': 'Immagini',
'files.filterDocs': 'Documenti',
'files.filterCollab': 'Note Collaborazione',
'files.sourceCollab': 'Da Note Collaborazione',
'files.empty': 'Ancora nessun file',
'files.emptyHint': 'Carica file per allegarli al tuo viaggio',
'files.openTab': 'Apri in una nuova scheda',
'files.confirm.delete': 'Sei sicuro di voler eliminare questo file?',
'files.toast.deleted': 'File eliminato',
'files.toast.deleteError': 'Impossibile eliminare il file',
'files.sourcePlan': 'Programma giornaliero',
'files.sourceBooking': 'Prenotazione',
'files.sourceTransport': 'Trasporto',
'files.attach': 'Allega',
'files.pasteHint': 'Puoi anche incollare immagini dagli appunti (Ctrl+V)',
'files.trash': 'Cestino',
'files.trashEmpty': 'Il cestino è vuoto',
'files.emptyTrash': 'Svuota cestino',
'files.restore': 'Ripristina',
'files.star': 'Aggiungi ai preferiti',
'files.unstar': 'Rimuovi dai preferiti',
'files.assign': 'Assegna',
'files.assignTitle': 'Assegna file',
'files.assignPlace': 'Luogo',
'files.assignBooking': 'Prenotazione',
'files.assignTransport': 'Trasporto',
'files.unassigned': 'Non assegnato',
'files.unlink': 'Rimuovi collegamento',
'files.toast.trashed': 'Spostato nel cestino',
'files.toast.restored': 'File ripristinato',
'files.toast.trashEmptied': 'Cestino svuotato',
'files.toast.assigned': 'File assegnato',
'files.toast.assignError': 'Assegnazione fallita',
'files.toast.restoreError': 'Ripristino fallito',
'files.confirm.permanentDelete':
'Eliminare questo file in modo permanente? Questa operazione non può essere annullata.',
'files.confirm.emptyTrash':
'Eliminare in modo permanente tutti i file nel cestino? Questa operazione non può essere annullata.',
'files.noteLabel': 'Nota',
'files.notePlaceholder': 'Aggiungi una nota...',
};
export default files;
+86
View File
@@ -0,0 +1,86 @@
import admin from './admin';
import airport from './airport';
import atlas from './atlas';
import backup from './backup';
import budget from './budget';
import categories from './categories';
import collab from './collab';
import common from './common';
import dashboard from './dashboard';
import day from './day';
import dayplan from './dayplan';
import files from './files';
import inspector from './inspector';
import journey from './journey';
import login from './login';
import map from './map';
import members from './members';
import memories from './memories';
import nav from './nav';
import notif from './notif';
import notifications from './notifications';
import oauth from './oauth';
import packing from './packing';
import pdf from './pdf';
import perm from './perm';
import photos from './photos';
import places from './places';
import planner from './planner';
import register from './register';
import reservations from './reservations';
import settings from './settings';
import share from './share';
import shared from './shared';
import stats from './stats';
import system_notice from './system_notice';
import todo from './todo';
import transport from './transport';
import trip from './trip';
import trips from './trips';
import undo from './undo';
import vacay from './vacay';
const locale = {
...common,
...trips,
...nav,
...dashboard,
...settings,
...admin,
...dayplan,
...share,
...shared,
...login,
...register,
...vacay,
...atlas,
...trip,
...places,
...inspector,
...reservations,
...airport,
...map,
...budget,
...files,
...packing,
...members,
...categories,
...backup,
...photos,
...pdf,
...planner,
...stats,
...day,
...memories,
...collab,
...perm,
...undo,
...notifications,
...todo,
...notif,
...journey,
...oauth,
...system_notice,
...transport,
};
export default locale;
+22
View File
@@ -0,0 +1,22 @@
import type { TranslationStrings } from '../types';
const inspector: TranslationStrings = {
'inspector.opened': 'Aperto',
'inspector.closed': 'Chiuso',
'inspector.openingHours': 'Orari di apertura',
'inspector.showHours': 'Mostra orari di apertura',
'inspector.files': 'File',
'inspector.filesCount': '{count} file',
'inspector.removeFromDay': 'Rimuovi dal giorno',
'inspector.remove': 'Rimuovi',
'inspector.addToDay': 'Aggiungi al giorno',
'inspector.confirmedRes': 'Prenotazione confermata',
'inspector.pendingRes': 'Prenotazione in attesa',
'inspector.google': 'Apri in Google Maps',
'inspector.website': 'Apri sito web',
'inspector.addRes': 'Prenotazione',
'inspector.editRes': 'Modifica prenotazione',
'inspector.participants': 'Partecipanti',
'inspector.trackStats': 'Dati del percorso',
};
export default inspector;
+240
View File
@@ -0,0 +1,240 @@
import type { TranslationStrings } from '../types';
const journey: TranslationStrings = {
'journey.search.placeholder': 'Cerca viaggi…',
'journey.search.noResults': 'Nessun viaggio corrisponde a "{query}"',
'journey.title': 'Diario di viaggio',
'journey.subtitle': 'Segui i tuoi viaggi in tempo reale',
'journey.new': 'Nuovo diario',
'journey.create': 'Crea',
'journey.titlePlaceholder': 'Dove stai andando?',
'journey.empty': 'Nessun diario ancora',
'journey.emptyHint': 'Inizia a documentare il tuo prossimo viaggio',
'journey.deleted': 'Diario eliminato',
'journey.createError': 'Impossibile creare il diario',
'journey.deleteError': 'Impossibile eliminare il diario',
'journey.deleteConfirmTitle': 'Elimina',
'journey.deleteConfirmMessage':
'Eliminare "{title}"? Questa azione non può essere annullata.',
'journey.deleteConfirmGeneric': 'Sei sicuro di voler eliminare questo?',
'journey.notFound': 'Diario non trovato',
'journey.photos': 'Foto',
'journey.timelineEmpty': 'Nessuna tappa ancora',
'journey.timelineEmptyHint':
'Aggiungi un check-in o scrivi una voce di diario per iniziare',
'journey.status.draft': 'Bozza',
'journey.status.active': 'Attivo',
'journey.status.completed': 'Completato',
'journey.status.upcoming': 'In arrivo',
'journey.status.archived': 'Archiviato',
'journey.checkin.add': 'Check-in',
'journey.checkin.namePlaceholder': 'Nome del luogo',
'journey.checkin.notesPlaceholder': 'Note (facoltativo)',
'journey.checkin.save': 'Salva',
'journey.checkin.error': 'Impossibile salvare il check-in',
'journey.entry.add': 'Diario',
'journey.entry.edit': 'Modifica voce',
'journey.entry.titlePlaceholder': 'Titolo (facoltativo)',
'journey.entry.bodyPlaceholder': 'Cosa è successo oggi?',
'journey.entry.save': 'Salva',
'journey.entry.error': 'Impossibile salvare la voce',
'journey.photo.add': 'Foto',
'journey.photo.uploadError': 'Caricamento fallito',
'journey.share.share': 'Condividi',
'journey.share.public': 'Pubblico',
'journey.share.linkCopied': 'Link pubblico copiato',
'journey.share.disabled': 'Condivisione pubblica disattivata',
'journey.editor.titlePlaceholder': 'Dai un nome a questo momento...',
'journey.editor.bodyPlaceholder': 'Racconta la storia di questa giornata...',
'journey.editor.placePlaceholder': 'Luogo (facoltativo)',
'journey.editor.tagsPlaceholder':
'Tag: gioiello nascosto, miglior pasto, da rivisitare...',
'journey.visibility.private': 'Privato',
'journey.visibility.shared': 'Condiviso',
'journey.visibility.public': 'Pubblico',
'journey.emptyState.title': 'La tua storia inizia qui',
'journey.emptyState.subtitle':
'Fai un check-in o scrivi la tua prima voce di diario',
'journey.frontpage.subtitle':
'Trasforma i tuoi viaggi in storie indimenticabili',
'journey.frontpage.createJourney': 'Crea diario',
'journey.frontpage.activeJourney': 'Diario attivo',
'journey.frontpage.allJourneys': 'Tutti i diari',
'journey.frontpage.journeys': 'diari',
'journey.frontpage.createNew': 'Crea un nuovo diario',
'journey.frontpage.createNewSub':
'Scegli viaggi, scrivi storie, condividi le tue avventure',
'journey.frontpage.live': 'In diretta',
'journey.frontpage.synced': 'Sincronizzato',
'journey.frontpage.continueWriting': 'Continua a scrivere',
'journey.frontpage.updated': 'Aggiornato {time}',
'journey.frontpage.suggestionLabel': 'Viaggio appena terminato',
'journey.frontpage.suggestionText':
'Trasforma <strong>{title}</strong> in un diario di viaggio',
'journey.frontpage.dismiss': 'Ignora',
'journey.frontpage.journeyName': 'Nome del diario',
'journey.frontpage.namePlaceholder': 'es. Sud-est asiatico 2026',
'journey.frontpage.selectTrips': 'Seleziona viaggi',
'journey.frontpage.tripsSelected': 'viaggi selezionati',
'journey.frontpage.trips': 'viaggi',
'journey.frontpage.placesImported': 'luoghi saranno importati',
'journey.frontpage.places': 'luoghi',
'journey.detail.backToJourney': 'Torna al diario',
'journey.detail.syncedWithTrips': 'Sincronizzato con i viaggi',
'journey.detail.addEntry': 'Aggiungi voce',
'journey.detail.newEntry': 'Nuova voce',
'journey.detail.editEntry': 'Modifica voce',
'journey.detail.noEntries': 'Nessuna voce ancora',
'journey.detail.noEntriesHint':
'Aggiungi un viaggio per iniziare con voci precompilate',
'journey.detail.noPhotos': 'Nessuna foto ancora',
'journey.detail.noPhotosHint':
'Carica foto nelle voci o sfoglia la tua libreria Immich/Synology',
'journey.detail.journeyStats': 'Statistiche del diario',
'journey.detail.syncedTrips': 'Viaggi sincronizzati',
'journey.detail.noTripsLinked': 'Nessun viaggio collegato ancora',
'journey.detail.contributors': 'Contributori',
'journey.detail.readMore': 'Leggi di più',
'journey.detail.prosCons': 'Pro e contro',
'journey.detail.photos': 'foto',
'journey.detail.day': 'Giorno {number}',
'journey.detail.places': 'luoghi',
'journey.stats.days': 'Giorni',
'journey.stats.cities': 'Città',
'journey.stats.entries': 'Voci',
'journey.stats.photos': 'Foto',
'journey.stats.places': 'Luoghi',
'journey.skeletons.show': 'Mostra suggerimenti',
'journey.skeletons.hide': 'Nascondi suggerimenti',
'journey.verdict.lovedIt': 'Adorato',
'journey.verdict.couldBeBetter': 'Potrebbe essere meglio',
'journey.synced.places': 'luoghi',
'journey.synced.synced': 'sincronizzato',
'journey.editor.discardChangesConfirm':
'Hai modifiche non salvate. Vuoi scartarle?',
'journey.editor.uploadFailed': 'Caricamento foto non riuscito',
'journey.editor.uploadPhotos': 'Carica foto',
'journey.editor.uploading': 'Caricamento...',
'journey.editor.uploadingProgress': 'Caricamento {done}/{total}…',
'journey.editor.uploadPartialFailed':
'{failed} di {total} foto non riuscite — salva di nuovo per riprovare',
'journey.editor.fromGallery': 'Dalla galleria',
'journey.editor.allPhotosAdded': 'Tutte le foto sono già state aggiunte',
'journey.editor.writeStory': 'Scrivi la tua storia...',
'journey.editor.prosCons': 'Pro e contro',
'journey.editor.pros': 'Pro',
'journey.editor.cons': 'Contro',
'journey.editor.proPlaceholder': 'Qualcosa di fantastico...',
'journey.editor.conPlaceholder': 'Non così fantastico...',
'journey.editor.addAnother': 'Aggiungi un altro',
'journey.editor.date': 'Data',
'journey.editor.location': 'Luogo',
'journey.editor.searchLocation': 'Cerca luogo...',
'journey.editor.mood': 'Umore',
'journey.editor.weather': 'Meteo',
'journey.editor.photoFirst': '1°',
'journey.editor.makeFirst': 'Metti 1°',
'journey.editor.searching': 'Ricerca...',
'journey.mood.amazing': 'Fantastico',
'journey.mood.good': 'Buono',
'journey.mood.neutral': 'Neutro',
'journey.mood.rough': 'Difficile',
'journey.weather.sunny': 'Soleggiato',
'journey.weather.partly': 'Parzialmente nuvoloso',
'journey.weather.cloudy': 'Nuvoloso',
'journey.weather.rainy': 'Piovoso',
'journey.weather.stormy': 'Temporalesco',
'journey.weather.cold': 'Nevoso',
'journey.trips.linkTrip': 'Collega viaggio',
'journey.trips.searchTrip': 'Cerca viaggio',
'journey.trips.searchPlaceholder': 'Nome del viaggio o destinazione...',
'journey.trips.noTripsAvailable': 'Nessun viaggio disponibile',
'journey.trips.link': 'Collega',
'journey.trips.tripLinked': 'Viaggio collegato',
'journey.trips.linkFailed': 'Collegamento del viaggio fallito',
'journey.trips.addTrip': 'Aggiungi viaggio',
'journey.trips.unlinkTrip': 'Scollega viaggio',
'journey.trips.unlinkMessage':
'Scollegare "{title}"? Tutte le voci e le foto sincronizzate da questo viaggio saranno eliminate definitivamente. Questa azione non può essere annullata.',
'journey.trips.unlink': 'Scollega',
'journey.trips.tripUnlinked': 'Viaggio scollegato',
'journey.trips.unlinkFailed': 'Scollegamento del viaggio fallito',
'journey.trips.noTripsLinkedSettings': 'Nessun viaggio collegato',
'journey.contributors.invite': 'Invita contributore',
'journey.contributors.searchUser': 'Cerca utente',
'journey.contributors.searchPlaceholder': 'Nome utente o e-mail...',
'journey.contributors.noUsers': 'Nessun utente trovato',
'journey.contributors.role': 'Ruolo',
'journey.contributors.added': 'Contributore aggiunto',
'journey.contributors.addFailed': 'Impossibile aggiungere il contributore',
'journey.share.publicShare': 'Condivisione pubblica',
'journey.share.createLink': 'Crea link di condivisione',
'journey.share.linkCreated': 'Link di condivisione creato',
'journey.share.createFailed': 'Creazione del link fallita',
'journey.share.copy': 'Copia',
'journey.share.copied': 'Copiato!',
'journey.share.timeline': 'Cronologia',
'journey.share.gallery': 'Galleria',
'journey.share.map': 'Mappa',
'journey.share.removeLink': 'Rimuovi link di condivisione',
'journey.share.linkDeleted': 'Link di condivisione eliminato',
'journey.share.deleteFailed': 'Eliminazione fallita',
'journey.share.updateFailed': 'Aggiornamento fallito',
'journey.invite.role': 'Ruolo',
'journey.invite.viewer': 'Visualizzatore',
'journey.invite.editor': 'Editore',
'journey.invite.invite': 'Invita',
'journey.invite.inviting': 'Invito in corso...',
'journey.settings.title': 'Impostazioni del diario',
'journey.settings.coverImage': 'Immagine di copertina',
'journey.settings.changeCover': 'Cambia copertina',
'journey.settings.addCover': 'Aggiungi immagine di copertina',
'journey.settings.name': 'Nome',
'journey.settings.subtitle': 'Sottotitolo',
'journey.settings.subtitlePlaceholder': 'es. Thailandia, Vietnam e Cambogia',
'journey.settings.endJourney': 'Archivia il viaggio',
'journey.settings.reopenJourney': 'Ripristina il viaggio',
'journey.settings.archived': 'Viaggio archiviato',
'journey.settings.reopened': 'Viaggio riaperto',
'journey.settings.endDescription':
'Nasconde il badge In diretta. Puoi riaprire in qualsiasi momento.',
'journey.settings.delete': 'Elimina',
'journey.settings.deleteJourney': 'Elimina diario',
'journey.settings.deleteMessage':
'Eliminare "{title}"? Tutte le voci e le foto andranno perse.',
'journey.settings.saved': 'Impostazioni salvate',
'journey.settings.saveFailed': 'Salvataggio fallito',
'journey.settings.coverUpdated': 'Copertina aggiornata',
'journey.settings.coverFailed': 'Caricamento fallito',
'journey.settings.failedToDelete': 'Eliminazione non riuscita',
'journey.entries.deleteTitle': 'Elimina voce',
'journey.photosUploaded': '{count} foto caricate',
'journey.photosUploadFailed': 'Alcune foto non sono state caricate',
'journey.photosAdded': '{count} foto aggiunte',
'journey.public.notFound': 'Non trovato',
'journey.public.notFoundMessage':
'Questo diario non esiste o il link è scaduto.',
'journey.public.readOnly': 'Sola lettura · Diario pubblico',
'journey.public.tagline': 'Travel Resource & Exploration Kit',
'journey.public.sharedVia': 'Condiviso tramite',
'journey.public.madeWith': 'Creato con',
'journey.pdf.journeyBook': 'Diario di viaggio',
'journey.pdf.madeWith': 'Creato con TREK',
'journey.pdf.day': 'Giorno',
'journey.pdf.theEnd': 'Fine',
'journey.pdf.saveAsPdf': 'Salva come PDF',
'journey.pdf.pages': 'pagine',
'journey.picker.tripPeriod': 'Periodo del viaggio',
'journey.picker.dateRange': 'Intervallo di date',
'journey.picker.allPhotos': 'Tutte le foto',
'journey.picker.albums': 'Album',
'journey.picker.selected': 'selezionati',
'journey.picker.addTo': 'Aggiungi a',
'journey.picker.newGallery': 'Nuova galleria',
'journey.picker.selectAll': 'Seleziona tutto',
'journey.picker.deselectAll': 'Deseleziona tutto',
'journey.picker.noAlbums': 'Nessun album trovato',
'journey.picker.selectDate': 'Seleziona data',
'journey.picker.search': 'Cerca',
};
export default journey;
+96
View File
@@ -0,0 +1,96 @@
import type { TranslationStrings } from '../types';
const login: TranslationStrings = {
'login.error': 'Accesso fallito. Controlla le tue credenziali.',
'login.tagline': 'I tuoi viaggi.\nIl tuo programma.',
'login.description':
'Programma viaggi in collaborazione con mappe interattive, budget e sincronizzazione in tempo reale.',
'login.features.maps': 'Mappe Interattive',
'login.features.mapsDesc': 'Google Places, percorsi e clustering',
'login.features.realtime': 'Sincronizzazione in tempo reale',
'login.features.realtimeDesc': 'Programmate insieme tramite WebSocket',
'login.features.budget': 'Tracciamento Budget',
'login.features.budgetDesc': 'Categorie, grafici e costi per persona',
'login.features.collab': 'Collaborazione',
'login.features.collabDesc': 'Multi-utente con viaggi condivisi',
'login.features.packing': 'Lista Valigia',
'login.features.packingDesc': 'Categorie, progressi e suggerimenti',
'login.features.bookings': 'Prenotazioni',
'login.features.bookingsDesc': 'Voli, alloggi, ristoranti e altro',
'login.features.files': 'Documenti',
'login.features.filesDesc': 'Carica e gestisci i documenti',
'login.features.routes': 'Percorsi Intelligenti',
'login.features.routesDesc':
'Ottimizzazione automatica ed esportazione su Google Maps',
'login.selfHosted': 'Self-hosted · Open Source · Your data stays yours',
'login.title': 'Accedi',
'login.subtitle': 'Bentornato',
'login.signingIn': 'Accesso in corso…',
'login.signIn': 'Accedi',
'login.createAdmin': 'Crea Account Amministratore',
'login.createAdminHint': 'Imposta il primo account amministratore per TREK.',
'login.setNewPassword': 'Imposta nuova password',
'login.setNewPasswordHint': 'Devi cambiare la password prima di continuare.',
'login.createAccount': 'Crea Account',
'login.createAccountHint': 'Registra un nuovo account.',
'login.creating': 'Creazione in corso…',
'login.noAccount': 'Non hai un account?',
'login.hasAccount': 'Hai già un account?',
'login.register': 'Registrati',
'login.emailPlaceholder': 'tua@email.com',
'login.username': 'Nome utente',
'login.oidc.registrationDisabled':
'La registrazione è disabilitata. Contatta il tuo amministratore.',
'login.oidc.noEmail': 'Nessuna email ricevuta dal provider.',
'login.oidc.tokenFailed': 'Autenticazione fallita.',
'login.oidc.invalidState': 'Sessione non valida. Riprova.',
'login.demoFailed': 'Accesso demo fallito',
'login.oidcSignIn': 'Accedi con {name}',
'login.oidcOnly':
"L'autenticazione tramite password è disabilitata. Accedi utilizzando il tuo provider SSO.",
'login.oidcLoggedOut':
'Sei stato disconnesso. Accedi nuovamente tramite il tuo provider SSO.',
'login.demoHint': 'Prova la demo — nessuna registrazione necessaria',
'login.mfaTitle': 'Autenticazione a due fattori',
'login.mfaSubtitle':
'Inserisci il codice a 6 cifre dalla tua app authenticator.',
'login.mfaCodeLabel': 'Codice di verifica',
'login.mfaCodeRequired': 'Inserisci il codice dalla tua app authenticator.',
'login.mfaHint': "Apri Google Authenticator, Authy o un'altra app TOTP.",
'login.mfaBack': "← Torna all'accesso",
'login.mfaVerify': 'Verifica',
'login.invalidInviteLink': 'Link di invito non valido o scaduto',
'login.oidcFailed': 'Accesso OIDC non riuscito',
'login.usernameRequired': 'Il nome utente è obbligatorio',
'login.passwordMinLength': 'La password deve contenere almeno 8 caratteri',
'login.forgotPassword': 'Password dimenticata?',
'login.forgotPasswordTitle': 'Reimposta la password',
'login.forgotPasswordBody':
'Inserisci lindirizzo email del tuo account. Se esiste un account, invieremo un link per reimpostarla.',
'login.forgotPasswordSubmit': 'Invia link',
'login.forgotPasswordSentTitle': 'Controlla la tua email',
'login.forgotPasswordSentBody':
'Se esiste un account con questa email, il link è in arrivo. Scade tra 60 minuti.',
'login.forgotPasswordSmtpHintOff':
'Nota: il tuo amministratore non ha configurato SMTP, quindi il link di reset verrà scritto nella console del server invece di essere inviato via email.',
'login.backToLogin': 'Torna allaccesso',
'login.newPassword': 'Nuova password',
'login.confirmPassword': 'Conferma nuova password',
'login.passwordsDontMatch': 'Le password non corrispondono',
'login.mfaCode': 'Codice 2FA',
'login.resetPasswordTitle': 'Imposta una nuova password',
'login.resetPasswordBody':
'Scegli una password robusta che non hai già usato qui. Minimo 8 caratteri.',
'login.resetPasswordMfaBody':
'Inserisci il codice 2FA o un codice di backup per completare il reset.',
'login.resetPasswordSubmit': 'Reimposta password',
'login.resetPasswordVerify': 'Verifica e reimposta',
'login.resetPasswordSuccessTitle': 'Password aggiornata',
'login.resetPasswordSuccessBody': 'Ora puoi accedere con la nuova password.',
'login.resetPasswordInvalidLink': 'Link di reset non valido',
'login.resetPasswordInvalidLinkBody':
'Il link è mancante o danneggiato. Richiedine uno nuovo per continuare.',
'login.resetPasswordFailed':
'Reset non riuscito. Il link potrebbe essere scaduto.',
};
export default login;
+8
View File
@@ -0,0 +1,8 @@
import type { TranslationStrings } from '../types';
const map: TranslationStrings = {
'map.connections': 'Connessioni',
'map.showConnections': 'Mostra percorsi prenotati',
'map.hideConnections': 'Nascondi percorsi prenotati',
};
export default map;
+24
View File
@@ -0,0 +1,24 @@
import type { TranslationStrings } from '../types';
const members: TranslationStrings = {
'members.shareTrip': 'Condividi viaggio',
'members.inviteUser': 'Invita utente',
'members.selectUser': 'Seleziona utente...',
'members.invite': 'Invita',
'members.allHaveAccess': 'Tutti gli utenti hanno già accesso.',
'members.access': 'Accesso',
'members.person': 'persona',
'members.persons': 'persone',
'members.you': 'tu',
'members.owner': 'Proprietario',
'members.leaveTrip': 'Abbandona viaggio',
'members.removeAccess': 'Rimuovi accesso',
'members.confirmLeave': "Abbandonare il viaggio? Perderai l'accesso.",
'members.confirmRemove': "Rimuovere l'accesso per questo utente?",
'members.loadError': 'Impossibile caricare i membri',
'members.added': 'aggiunto',
'members.addError': 'Impossibile aggiungere',
'members.removed': 'Membro rimosso',
'members.removeError': 'Impossibile rimuovere',
};
export default members;
+82
View File
@@ -0,0 +1,82 @@
import type { TranslationStrings } from '../types';
const memories: TranslationStrings = {
'memories.title': 'Foto',
'memories.notConnected': 'Immich non connesso',
'memories.notConnectedHint':
'Connetti la tua istanza Immich nelle Impostazioni per vedere qui le foto del tuo viaggio.',
'memories.notConnectedMultipleHint':
'Collega uno di questi provider di foto: {provider_names} nelle Impostazioni per poter aggiungere foto a questo viaggio.',
'memories.noDates': 'Aggiungi le date al tuo viaggio per caricare le foto.',
'memories.noPhotos': 'Nessuna foto trovata',
'memories.noPhotosHint':
"Nessuna foto trovata in Immich per l'intervallo di date di questo viaggio.",
'memories.photosFound': 'foto',
'memories.fromOthers': 'da altri',
'memories.sharePhotos': 'Condividi foto',
'memories.sharing': 'Condivisione',
'memories.reviewTitle': 'Rivedi le tue foto',
'memories.reviewHint': 'Clicca sulle foto per escluderle dalla condivisione.',
'memories.shareCount': 'Condividi {count} foto',
'memories.providerUrl': 'URL del server',
'memories.providerApiKey': 'Chiave API',
'memories.providerUsername': 'Nome utente',
'memories.providerPassword': 'Password',
'memories.providerOTP': 'Codice MFA (se abilitato)',
'memories.skipSSLVerification': 'Ignora la verifica del certificato SSL',
'memories.immichAutoUpload':
'Rispecchia le foto del journey su Immich al caricamento',
'memories.providerUrlHintSynology':
"Includi il percorso dell'app Foto nell'URL, es. https://nas:5001/photo",
'memories.testConnection': 'Test connessione',
'memories.testShort': 'Prova',
'memories.testFirst': 'Testa prima la connessione',
'memories.connected': 'Connesso',
'memories.disconnected': 'Non connesso',
'memories.connectionSuccess': 'Connesso a Immich',
'memories.connectionError': 'Impossibile connettersi a Immich',
'memories.saved': 'Impostazioni {provider_name} salvate',
'memories.providerDisconnectedBanner':
'La connessione a {provider_name} è persa. Riconnetti nelle Impostazioni per visualizzare le foto.',
'memories.saveError':
'Impossibile salvare le impostazioni di {provider_name}',
'memories.saveRouteNotConfigured':
'La route di salvataggio non è configurata per questo provider',
'memories.testRouteNotConfigured':
'La route di test non è configurata per questo provider',
'memories.fillRequiredFields': 'Per favore compila tutti i campi obbligatori',
'memories.addPhotos': 'Aggiungi foto',
'memories.linkAlbum': 'Collega album',
'memories.selectAlbum': 'Seleziona album Immich',
'memories.selectAlbumMultiple': 'Seleziona album',
'memories.noAlbums': 'Nessun album trovato',
'memories.syncAlbum': 'Sincronizza album',
'memories.unlinkAlbum': 'Scollega',
'memories.photos': 'foto',
'memories.selectPhotos': 'Seleziona foto da Immich',
'memories.selectPhotosMultiple': 'Seleziona foto',
'memories.selectHint': 'Tocca le foto per selezionarle.',
'memories.selected': 'selezionate',
'memories.addSelected': 'Aggiungi {count} foto',
'memories.alreadyAdded': 'Aggiunta',
'memories.private': 'Privato',
'memories.stopSharing': 'Interrompi condivisione',
'memories.oldest': 'Prima le più vecchie',
'memories.newest': 'Prima le più recenti',
'memories.allLocations': 'Tutte le posizioni',
'memories.tripDates': 'Date del viaggio',
'memories.allPhotos': 'Tutte le foto',
'memories.confirmShareTitle': 'Condividere con i membri del viaggio?',
'memories.confirmShareHint':
'{count} foto saranno visibili a tutti i membri di questo viaggio. Potrai rendere private le singole foto in seguito.',
'memories.confirmShareButton': 'Condividi foto',
'memories.error.loadAlbums': 'Caricamento album non riuscito',
'memories.error.linkAlbum': 'Collegamento album non riuscito',
'memories.error.unlinkAlbum': 'Scollegamento album non riuscito',
'memories.error.syncAlbum': 'Sincronizzazione album non riuscita',
'memories.error.loadPhotos': 'Caricamento foto non riuscito',
'memories.error.addPhotos': 'Aggiunta foto non riuscita',
'memories.error.removePhoto': 'Rimozione foto non riuscita',
'memories.error.toggleSharing': 'Aggiornamento condivisione non riuscito',
};
export default memories;
+20
View File
@@ -0,0 +1,20 @@
import type { TranslationStrings } from '../types';
const nav: TranslationStrings = {
'nav.trip': 'Viaggio',
'nav.share': 'Condividi',
'nav.settings': 'Impostazioni',
'nav.admin': 'Amministrazione',
'nav.logout': 'Esci',
'nav.lightMode': 'Modalità chiara',
'nav.darkMode': 'Modalità scura',
'nav.autoMode': 'Modalità automatica',
'nav.administrator': 'Amministratore',
'nav.myTrips': 'I miei viaggi',
'nav.profile': 'Profilo',
'nav.bottomSettings': 'Impostazioni',
'nav.bottomAdmin': 'Amministrazione',
'nav.bottomLogout': 'Disconnetti',
'nav.bottomAdminBadge': 'Admin',
};
export default nav;
+42
View File
@@ -0,0 +1,42 @@
import type { TranslationStrings } from '../types';
const notif: TranslationStrings = {
'notif.test.title': '[Test] Notifica',
'notif.test.simple.text': 'Questa è una semplice notifica di test.',
'notif.test.boolean.text': 'Accetti questa notifica di test?',
'notif.test.navigate.text': 'Clicca qui sotto per accedere alla dashboard.',
'notif.trip_invite.title': 'Invito al viaggio',
'notif.trip_invite.text': '{actor} ti ha invitato a {trip}',
'notif.booking_change.title': 'Prenotazione aggiornata',
'notif.booking_change.text':
'{actor} ha aggiornato una prenotazione in {trip}',
'notif.trip_reminder.title': 'Promemoria viaggio',
'notif.trip_reminder.text': 'Il tuo viaggio {trip} si avvicina!',
'notif.todo_due.title': 'Attività in scadenza',
'notif.todo_due.text': '{todo} in {trip} scade il {due}',
'notif.vacay_invite.title': 'Invito Vacay Fusion',
'notif.vacay_invite.text': '{actor} ti ha invitato a fondere i piani vacanza',
'notif.photos_shared.title': 'Foto condivise',
'notif.photos_shared.text': '{actor} ha condiviso {count} foto in {trip}',
'notif.collab_message.title': 'Nuovo messaggio',
'notif.collab_message.text': '{actor} ha inviato un messaggio in {trip}',
'notif.packing_tagged.title': 'Assegnazione bagagli',
'notif.packing_tagged.text': '{actor} ti ha assegnato a {category} in {trip}',
'notif.version_available.title': 'Nuova versione disponibile',
'notif.version_available.text': 'TREK {version} è ora disponibile',
'notif.action.view_trip': 'Vedi viaggio',
'notif.action.view_collab': 'Vedi messaggi',
'notif.action.view_packing': 'Vedi bagagli',
'notif.action.view_photos': 'Vedi foto',
'notif.action.view_vacay': 'Vedi Vacay',
'notif.action.view_admin': "Vai all'admin",
'notif.action.view': 'Vedi',
'notif.action.accept': 'Accetta',
'notif.action.decline': 'Rifiuta',
'notif.generic.title': 'Notifica',
'notif.generic.text': 'Hai una nuova notifica',
'notif.dev.unknown_event.title': '[DEV] Evento sconosciuto',
'notif.dev.unknown_event.text':
'Il tipo di evento "{event}" non è registrato in EVENT_NOTIFICATION_CONFIG',
};
export default notif;
+37
View File
@@ -0,0 +1,37 @@
import type { TranslationStrings } from '../types';
const notifications: TranslationStrings = {
'notifications.title': 'Notifiche',
'notifications.markAllRead': 'Segna tutto come letto',
'notifications.deleteAll': 'Elimina tutto',
'notifications.showAll': 'Vedi tutte le notifiche',
'notifications.empty': 'Nessuna notifica',
'notifications.emptyDescription': 'Sei aggiornato!',
'notifications.all': 'Tutte',
'notifications.unreadOnly': 'Non lette',
'notifications.markRead': 'Segna come letto',
'notifications.markUnread': 'Segna come non letto',
'notifications.delete': 'Elimina',
'notifications.system': 'Sistema',
'notifications.synologySessionCleared.title': 'Synology Photos disconnesso',
'notifications.synologySessionCleared.text':
"Il server o l'account è cambiato — vai alle Impostazioni per testare nuovamente la connessione.",
'notifications.test.title': 'Notifica di test da {actor}',
'notifications.test.text': 'Questa è una semplice notifica di test.',
'notifications.test.booleanTitle': '{actor} richiede la tua approvazione',
'notifications.test.booleanText': 'Notifica di test con risposta.',
'notifications.test.accept': 'Approva',
'notifications.test.decline': 'Rifiuta',
'notifications.test.navigateTitle': "Dai un'occhiata",
'notifications.test.navigateText': 'Notifica di test con navigazione.',
'notifications.test.goThere': 'Vai',
'notifications.test.adminTitle': 'Comunicazione admin',
'notifications.test.adminText':
'{actor} ha inviato una notifica di test a tutti gli amministratori.',
'notifications.test.tripTitle': '{actor} ha pubblicato nel tuo viaggio',
'notifications.test.tripText': 'Notifica di test per il viaggio "{trip}".',
'notifications.versionAvailable.title': 'Aggiornamento disponibile',
'notifications.versionAvailable.text': 'TREK {version} è ora disponibile.',
'notifications.versionAvailable.button': 'Visualizza dettagli',
};
export default notifications;
+99
View File
@@ -0,0 +1,99 @@
import type { TranslationStrings } from '../types';
const oauth: TranslationStrings = {
'oauth.scope.group.trips': 'Viaggi',
'oauth.scope.group.places': 'Luoghi',
'oauth.scope.group.atlas': 'Atlas',
'oauth.scope.group.packing': 'Bagagli',
'oauth.scope.group.todos': 'Attività',
'oauth.scope.group.budget': 'Budget',
'oauth.scope.group.reservations': 'Prenotazioni',
'oauth.scope.group.collab': 'Collaborazione',
'oauth.scope.group.notifications': 'Notifiche',
'oauth.scope.group.vacay': 'Ferie',
'oauth.scope.group.geo': 'Geo',
'oauth.scope.group.weather': 'Meteo',
'oauth.scope.group.journey': 'Diario di viaggio',
'oauth.scope.trips:read.label': 'Visualizza viaggi e itinerari',
'oauth.scope.trips:read.description':
'Leggi viaggi, giorni, note giornaliere e membri',
'oauth.scope.trips:write.label': 'Modifica viaggi e itinerari',
'oauth.scope.trips:write.description':
'Crea e aggiorna viaggi, giorni, note e gestisci membri',
'oauth.scope.trips:delete.label': 'Elimina viaggi',
'oauth.scope.trips:delete.description':
'Elimina definitivamente interi viaggi — questa azione è irreversibile',
'oauth.scope.trips:share.label': 'Gestisci link di condivisione',
'oauth.scope.trips:share.description':
'Crea, aggiorna e revoca link di condivisione pubblici per i viaggi',
'oauth.scope.places:read.label': 'Visualizza luoghi e dati mappa',
'oauth.scope.places:read.description':
'Leggi luoghi, assegnazioni giornaliere, tag e categorie',
'oauth.scope.places:write.label': 'Gestisci luoghi',
'oauth.scope.places:write.description':
'Crea, aggiorna ed elimina luoghi, assegnazioni e tag',
'oauth.scope.atlas:read.label': 'Visualizza Atlas',
'oauth.scope.atlas:read.description':
'Leggi paesi visitati, regioni e lista dei desideri',
'oauth.scope.atlas:write.label': 'Gestisci Atlas',
'oauth.scope.atlas:write.description':
'Segna paesi e regioni come visitati, gestisci la lista dei desideri',
'oauth.scope.packing:read.label': 'Visualizza liste bagagli',
'oauth.scope.packing:read.description':
'Leggi articoli, borse e assegnatari di categoria',
'oauth.scope.packing:write.label': 'Gestisci liste bagagli',
'oauth.scope.packing:write.description':
'Aggiungi, aggiorna, elimina, spunta e riordina articoli e borse',
'oauth.scope.todos:read.label': 'Visualizza liste attività',
'oauth.scope.todos:read.description':
'Leggi attività del viaggio e assegnatari di categoria',
'oauth.scope.todos:write.label': 'Gestisci liste attività',
'oauth.scope.todos:write.description':
'Crea, aggiorna, spunta, elimina e riordina attività',
'oauth.scope.budget:read.label': 'Visualizza budget',
'oauth.scope.budget:read.description':
'Leggi voci di budget e ripartizione delle spese',
'oauth.scope.budget:write.label': 'Gestisci budget',
'oauth.scope.budget:write.description':
'Crea, aggiorna ed elimina voci di budget',
'oauth.scope.reservations:read.label': 'Visualizza prenotazioni',
'oauth.scope.reservations:read.description':
'Leggi prenotazioni e dettagli alloggio',
'oauth.scope.reservations:write.label': 'Gestisci prenotazioni',
'oauth.scope.reservations:write.description':
'Crea, aggiorna, elimina e riordina prenotazioni',
'oauth.scope.collab:read.label': 'Visualizza collaborazione',
'oauth.scope.collab:read.description':
'Leggi note collaborative, sondaggi e messaggi',
'oauth.scope.collab:write.label': 'Gestisci collaborazione',
'oauth.scope.collab:write.description':
'Crea, aggiorna ed elimina note collaborative, sondaggi e messaggi',
'oauth.scope.notifications:read.label': 'Visualizza notifiche',
'oauth.scope.notifications:read.description':
'Leggi notifiche in-app e conteggi non letti',
'oauth.scope.notifications:write.label': 'Gestisci notifiche',
'oauth.scope.notifications:write.description':
'Segna notifiche come lette e rispondi',
'oauth.scope.vacay:read.label': 'Visualizza piani ferie',
'oauth.scope.vacay:read.description':
'Leggi dati di pianificazione ferie, voci e statistiche',
'oauth.scope.vacay:write.label': 'Gestisci piani ferie',
'oauth.scope.vacay:write.description':
'Crea e gestisci voci ferie, festività e piani del team',
'oauth.scope.geo:read.label': 'Mappe e geocodifica',
'oauth.scope.geo:read.description':
'Cerca luoghi, risolvi URL mappa e geocodifica inversa coordinate',
'oauth.scope.weather:read.label': 'Previsioni meteo',
'oauth.scope.weather:read.description':
'Ottieni previsioni meteo per luoghi e date del viaggio',
'oauth.scope.journey:read.label': 'Visualizza diari di viaggio',
'oauth.scope.journey:read.description':
'Leggi diari di viaggio, voci e lista dei collaboratori',
'oauth.scope.journey:write.label': 'Gestisci diari di viaggio',
'oauth.scope.journey:write.description':
'Crea, aggiorna ed elimina diari di viaggio e le loro voci',
'oauth.scope.journey:share.label': 'Gestisci link diari di viaggio',
'oauth.scope.journey:share.description':
'Crea, aggiorna e revoca link di condivisione pubblici per i diari di viaggio',
};
export default oauth;
+186
View File
@@ -0,0 +1,186 @@
import type { TranslationStrings } from '../types';
const packing: TranslationStrings = {
'packing.title': 'Lista valigia',
'packing.empty': 'La lista valigia è vuota',
'packing.import': 'Importa',
'packing.importTitle': 'Importa lista valigia',
'packing.importHint':
'Un elemento per riga. Formato: Categoria, Nome, Peso in g (opzionale), Borsa (opzionale), checked/unchecked (opzionale)',
'packing.importPlaceholder':
'Igiene, Spazzolino\nAbbigliamento, Magliette, 200\nDocumenti, Passaporto, , Bagaglio a mano\nElettronica, Caricabatterie, 50, Valigia, checked',
'packing.importCsv': 'Carica CSV/TXT',
'packing.importAction': 'Importa {count}',
'packing.importSuccess': '{count} elementi importati',
'packing.importError': 'Importazione non riuscita',
'packing.importEmpty': 'Nessun elemento da importare',
'packing.progress': '{packed} di {total} in valigia ({percent}%)',
'packing.clearChecked': 'Rimuovi {count} spuntati',
'packing.clearCheckedShort': 'Rimuovi {count}',
'packing.suggestions': 'Suggerimenti',
'packing.suggestionsTitle': 'Aggiungi suggerimenti',
'packing.allSuggested': 'Tutti i suggerimenti aggiunti',
'packing.allPacked': 'Tutto in valigia!',
'packing.addPlaceholder': 'Aggiungi nuovo elemento...',
'packing.categoryPlaceholder': 'Categoria...',
'packing.filterAll': 'Tutti',
'packing.filterOpen': 'Da fare',
'packing.filterDone': 'Fatto',
'packing.emptyTitle': 'La lista valigia è vuota',
'packing.emptyHint': 'Aggiungi elementi o usa i suggerimenti',
'packing.emptyFiltered': 'Nessun elemento corrisponde a questo filtro',
'packing.menuRename': 'Rinomina',
'packing.menuCheckAll': 'Seleziona tutti',
'packing.menuUncheckAll': 'Deseleziona tutti',
'packing.menuDeleteCat': 'Elimina categoria',
'packing.noMembers': 'Nessun membro del viaggio',
'packing.addItem': 'Aggiungi elemento',
'packing.addItemPlaceholder': 'Nome elemento...',
'packing.addCategory': 'Aggiungi categoria',
'packing.newCategoryPlaceholder': 'Nome categoria (es. Abbigliamento)',
'packing.applyTemplate': 'Applica modello',
'packing.template': 'Modello',
'packing.templateApplied': '{count} elementi aggiunti dal modello',
'packing.templateError': 'Impossibile applicare il modello',
'packing.saveAsTemplate': 'Salva come modello',
'packing.templateName': 'Nome modello',
'packing.templateSaved': 'Lista bagagli salvata come modello',
'packing.bags': 'Valigie',
'packing.noBag': 'Non assegnato',
'packing.totalWeight': 'Peso totale',
'packing.bagName': 'Nome valigia...',
'packing.addBag': 'Aggiungi valigia',
'packing.changeCategory': 'Cambia categoria',
'packing.confirm.clearChecked':
'Sei sicuro di voler rimuovere {count} elementi spuntati?',
'packing.confirm.deleteCat':
'Sei sicuro di voler eliminare la categoria "{name}" con {count} elementi?',
'packing.defaultCategory': 'Altro',
'packing.toast.saveError': 'Impossibile salvare',
'packing.toast.deleteError': 'Impossibile eliminare',
'packing.toast.renameError': 'Impossibile rinominare',
'packing.toast.addError': 'Impossibile aggiungere',
'packing.suggestions.items': [
{
name: 'Passaporto',
category: 'Documenti',
},
{
name: "Carta d'identità",
category: 'Documenti',
},
{
name: 'Assicurazione di viaggio',
category: 'Documenti',
},
{
name: 'Biglietti aerei',
category: 'Documenti',
},
{
name: 'Carta di credito',
category: 'Finanze',
},
{
name: 'Contanti',
category: 'Finanze',
},
{
name: 'Visto',
category: 'Documenti',
},
{
name: 'Magliette',
category: 'Abbigliamento',
},
{
name: 'Pantaloni',
category: 'Abbigliamento',
},
{
name: 'Intimo',
category: 'Abbigliamento',
},
{
name: 'Calzini',
category: 'Abbigliamento',
},
{
name: 'Giacca',
category: 'Abbigliamento',
},
{
name: 'Pigiama',
category: 'Abbigliamento',
},
{
name: 'Costume da bagno',
category: 'Abbigliamento',
},
{
name: 'Giacca a vento',
category: 'Abbigliamento',
},
{
name: 'Scarpe comode',
category: 'Abbigliamento',
},
{
name: 'Spazzolino da denti',
category: 'Igiene personale',
},
{
name: 'Dentifricio',
category: 'Igiene personale',
},
{
name: 'Shampoo',
category: 'Igiene personale',
},
{
name: 'Deodorante',
category: 'Igiene personale',
},
{
name: 'Crema solare',
category: 'Igiene personale',
},
{
name: 'Rasoio',
category: 'Igiene personale',
},
{
name: 'Caricabatterie',
category: 'Elettronica',
},
{
name: 'Power bank',
category: 'Elettronica',
},
{
name: 'Cuffie',
category: 'Elettronica',
},
{
name: 'Adattatore da viaggio',
category: 'Elettronica',
},
{
name: 'Macchina fotografica',
category: 'Elettronica',
},
{
name: 'Antidolorifici',
category: 'Salute',
},
{
name: 'Cerotti',
category: 'Salute',
},
{
name: 'Disinfettante',
category: 'Salute',
},
],
};
export default packing;
+10
View File
@@ -0,0 +1,10 @@
import type { TranslationStrings } from '../types';
const pdf: TranslationStrings = {
'pdf.travelPlan': 'Programma di viaggio',
'pdf.planned': 'Programmato',
'pdf.costLabel': 'Costo EUR',
'pdf.preview': 'Anteprima PDF',
'pdf.saveAsPdf': 'Salva come PDF',
};
export default pdf;
+63
View File
@@ -0,0 +1,63 @@
import type { TranslationStrings } from '../types';
const perm: TranslationStrings = {
'perm.title': 'Impostazioni dei permessi',
'perm.subtitle': "Controlla chi può eseguire azioni nell'applicazione",
'perm.saved': 'Impostazioni dei permessi salvate',
'perm.resetDefaults': 'Ripristina predefiniti',
'perm.customized': 'personalizzato',
'perm.level.admin': 'Solo amministratore',
'perm.level.tripOwner': 'Proprietario del viaggio',
'perm.level.tripMember': 'Membri del viaggio',
'perm.level.everybody': 'Tutti',
'perm.cat.trip': 'Gestione viaggi',
'perm.cat.members': 'Gestione membri',
'perm.cat.files': 'File',
'perm.cat.content': 'Contenuti e programma',
'perm.cat.extras': 'Budget, bagagli e collaborazione',
'perm.action.trip_create': 'Creare viaggi',
'perm.action.trip_edit': 'Modificare dettagli del viaggio',
'perm.action.trip_delete': 'Eliminare viaggi',
'perm.action.trip_archive': 'Archiviare / dearchiviare viaggi',
'perm.action.trip_cover_upload': 'Caricare immagine di copertina',
'perm.action.member_manage': 'Aggiungere / rimuovere membri',
'perm.action.file_upload': 'Caricare file',
'perm.action.file_edit': 'Modificare metadati dei file',
'perm.action.file_delete': 'Eliminare file',
'perm.action.place_edit': 'Aggiungere / modificare / eliminare luoghi',
'perm.action.day_edit': 'Modificare giorni, note e assegnazioni',
'perm.action.reservation_edit': 'Gestire prenotazioni',
'perm.action.budget_edit': 'Gestire budget',
'perm.action.packing_edit': 'Gestire liste bagagli',
'perm.action.collab_edit': 'Collaborazione (note, sondaggi, chat)',
'perm.action.share_manage': 'Gestire link di condivisione',
'perm.actionHint.trip_create': 'Chi può creare nuovi viaggi',
'perm.actionHint.trip_edit':
'Chi può modificare nome, date, descrizione e valuta del viaggio',
'perm.actionHint.trip_delete': 'Chi può eliminare definitivamente un viaggio',
'perm.actionHint.trip_archive':
'Chi può archiviare o dearchiviare un viaggio',
'perm.actionHint.trip_cover_upload':
"Chi può caricare o modificare l'immagine di copertina",
'perm.actionHint.member_manage':
'Chi può invitare o rimuovere membri del viaggio',
'perm.actionHint.file_upload': 'Chi può caricare file in un viaggio',
'perm.actionHint.file_edit': 'Chi può modificare descrizioni e link dei file',
'perm.actionHint.file_delete':
'Chi può spostare file nel cestino o eliminarli definitivamente',
'perm.actionHint.place_edit':
'Chi può aggiungere, modificare o eliminare luoghi',
'perm.actionHint.day_edit':
'Chi può modificare giorni, note dei giorni e assegnazioni dei luoghi',
'perm.actionHint.reservation_edit':
'Chi può creare, modificare o eliminare prenotazioni',
'perm.actionHint.budget_edit':
'Chi può creare, modificare o eliminare voci di budget',
'perm.actionHint.packing_edit':
'Chi può gestire articoli da bagaglio e borse',
'perm.actionHint.collab_edit':
'Chi può creare note, sondaggi e inviare messaggi',
'perm.actionHint.share_manage':
'Chi può creare o eliminare link di condivisione pubblici',
};
export default perm;
+25
View File
@@ -0,0 +1,25 @@
import type { TranslationStrings } from '../types';
const photos: TranslationStrings = {
'photos.title': 'Foto',
'photos.subtitle': '{count} foto per {trip}',
'photos.dropHere': 'Trascina le foto qui...',
'photos.dropHereActive': 'Trascina le foto qui',
'photos.captionForAll': 'Didascalia (per tutti)',
'photos.captionPlaceholder': 'Didascalia opzionale...',
'photos.addCaption': 'Aggiungi didascalia...',
'photos.allDays': 'Tutti i giorni',
'photos.noPhotos': 'Ancora nessuna foto',
'photos.uploadHint': 'Carica le foto del tuo viaggio',
'photos.clickToSelect': 'o clicca per selezionare',
'photos.linkPlace': 'Collega luogo',
'photos.noPlace': 'Nessun luogo',
'photos.uploadN': 'Caricamento di {n} foto',
'photos.linkDay': 'Collega giorno',
'photos.noDay': 'Nessun giorno',
'photos.dayLabel': 'Giorno {number}',
'photos.photoSelected': 'Foto selezionata',
'photos.photosSelected': 'Foto selezionate',
'photos.fileTypeHint': 'JPG, PNG, WebP · max. 10 MB · fino a 30 foto',
};
export default photos;
+92
View File
@@ -0,0 +1,92 @@
import type { TranslationStrings } from '../types';
const places: TranslationStrings = {
'places.addPlace': 'Aggiungi Luogo/Attività',
'places.importFile': 'Importa file',
'places.sidebarDrop': 'Rilascia per importare',
'places.importFileHint':
'Importa file .gpx, .kml o .kmz da strumenti come Google My Maps, Google Earth o un tracker GPS.',
'places.importFileDropHere':
'Clicca per selezionare un file o trascina e rilascia qui',
'places.importFileDropActive': 'Rilascia il file per selezionarlo',
'places.importFileUnsupported':
'Tipo di file non supportato. Usa .gpx, .kml o .kmz.',
'places.importFileTooLarge':
'Il file è troppo grande. La dimensione massima di caricamento è {maxMb} MB.',
'places.importFileError': 'Importazione non riuscita',
'places.importAllSkipped': 'Tutti i luoghi erano già nel viaggio.',
'places.gpxImported': '{count} luoghi importati da GPX',
'places.gpxImportTypes': 'Cosa vuoi importare?',
'places.gpxImportWaypoints': 'Waypoint',
'places.gpxImportRoutes': 'Percorsi',
'places.gpxImportTracks': 'Tracce (con geometria percorso)',
'places.gpxImportNoneSelected': 'Seleziona almeno un tipo da importare.',
'places.kmlImportTypes': 'Cosa vuoi importare?',
'places.kmlImportPoints': 'Punti (Placemarks)',
'places.kmlImportPaths': 'Percorsi (LineStrings)',
'places.kmlImportNoneSelected': 'Seleziona almeno un tipo.',
'places.selectionCount': '{count} selezionato/i',
'places.deleteSelected': 'Elimina selezionati',
'places.kmlKmzImported': '{count} luoghi importati da KMZ/KML',
'places.urlResolved': "Luogo importato dall'URL",
'places.importList': 'Importa lista',
'places.kmlKmzSummaryValues':
'Placemarks: {total} • Importati: {created} • Saltati: {skipped}',
'places.importGoogleList': 'Lista Google',
'places.importNaverList': 'Lista Naver',
'places.googleListHint':
'Incolla un link condiviso di una lista Google Maps per importare tutti i luoghi.',
'places.googleListImported': '{count} luoghi importati da "{list}"',
'places.googleListError': 'Importazione lista Google Maps non riuscita',
'places.naverListHint':
'Incolla un link condiviso di una lista Naver Maps per importare tutti i luoghi.',
'places.naverListImported': '{count} luoghi importati da "{list}"',
'places.naverListError': 'Importazione lista Naver Maps non riuscita',
'places.viewDetails': 'Visualizza dettagli',
'places.assignToDay': 'A quale giorno aggiungere?',
'places.all': 'Tutti',
'places.unplanned': 'Non pianificati',
'places.filterTracks': 'Tracce',
'places.search': 'Cerca luoghi...',
'places.allCategories': 'Tutte le categorie',
'places.categoriesSelected': 'categorie',
'places.clearFilter': 'Cancella filtro',
'places.count': '{count} luoghi',
'places.countSingular': '1 luogo',
'places.allPlanned': 'Tutti i luoghi sono programmati',
'places.noneFound': 'Nessun luogo trovato',
'places.editPlace': 'Modifica luogo',
'places.formName': 'Nome',
'places.formNamePlaceholder': 'es. Torre Eiffel',
'places.formDescription': 'Descrizione',
'places.formDescriptionPlaceholder': 'Breve descrizione...',
'places.formAddress': 'Indirizzo',
'places.formAddressPlaceholder': 'Via, Città, Paese',
'places.formLat': 'Latitudine (es. 48.8566)',
'places.formLng': 'Longitudine (es. 2.3522)',
'places.formCategory': 'Categoria',
'places.noCategory': 'Nessuna categoria',
'places.categoryNamePlaceholder': 'Nome categoria',
'places.formTime': 'Ora',
'places.startTime': 'Inizio',
'places.endTime': 'Fine',
'places.endTimeBeforeStart': "L'ora di fine è precedente all'ora di inizio",
'places.timeCollision': 'Sovrapposizione di orario con:',
'places.formWebsite': 'Sito web',
'places.formNotes': 'Note',
'places.formNotesPlaceholder': 'Note personali...',
'places.formReservation': 'Prenotazione',
'places.reservationNotesPlaceholder':
'Note della prenotazione, numero di conferma...',
'places.mapsSearchPlaceholder': 'Cerca luoghi...',
'places.mapsSearchError': 'Impossibile cercare i luoghi.',
'places.loadingDetails': 'Caricamento dettagli del luogo…',
'places.osmHint':
'Uso della ricerca OpenStreetMap (senza foto, orari di apertura o valutazioni). Aggiungi una chiave API Google nelle impostazioni per i dettagli completi.',
'places.osmActive':
'Ricerca tramite OpenStreetMap (senza foto, valutazioni o orari di apertura). Aggiungi una chiave API Google nelle Impostazioni per dati avanzati.',
'places.categoryCreateError': 'Impossibile creare la categoria',
'places.nameRequired': 'Inserisci un nome',
'places.saveError': 'Impossibile salvare',
};
export default places;
+69
View File
@@ -0,0 +1,69 @@
import type { TranslationStrings } from '../types';
const planner: TranslationStrings = {
'planner.places': 'Luoghi',
'planner.bookings': 'Prenotazioni',
'planner.packingList': 'Lista valigia',
'planner.documents': 'Documenti',
'planner.dayPlan': 'Programma giornaliero',
'planner.reservations': 'Prenotazioni',
'planner.minTwoPlaces': 'Servono almeno 2 luoghi con coordinate',
'planner.noGeoPlaces': 'Nessun luogo con coordinate disponibile',
'planner.routeCalculated': 'Percorso calcolato',
'planner.routeCalcFailed': 'Il percorso non è stato calcolato',
'planner.routeError': 'Errore nel calcolo del percorso',
'planner.icsExportFailed': 'Esportazione ICS non riuscita',
'planner.routeOptimized': 'Percorso ottimizzato',
'planner.reservationUpdated': 'Prenotazione aggiornata',
'planner.reservationAdded': 'Prenotazione aggiunta',
'planner.confirmDeleteReservation': 'Eliminare la prenotazione?',
'planner.reservationDeleted': 'Prenotazione eliminata',
'planner.days': 'Giorni',
'planner.allPlaces': 'Tutti i luoghi',
'planner.totalPlaces': '{n} luoghi in totale',
'planner.noDaysPlanned': 'Nessun giorno ancora programmato',
'planner.editTrip': 'Modifica viaggio →',
'planner.placeOne': '1 luogo',
'planner.placeN': '{n} luoghi',
'planner.addNote': 'Aggiungi nota',
'planner.noEntries': 'Nessuna voce per questo giorno',
'planner.addPlace': 'Aggiungi luogo/attività',
'planner.addPlaceShort': '+ Aggiungi luogo/attività',
'planner.resPending': 'Prenotazione in attesa · ',
'planner.resConfirmed': 'Prenotazione confermata · ',
'planner.notePlaceholder': 'Nota…',
'planner.noteTimePlaceholder': 'Ora (opzionale)',
'planner.noteExamplePlaceholder':
'es. S3 alle 14:30 dalla stazione centrale, traghetto dal molo 7, pausa pranzo…',
'planner.totalCost': 'Costo totale',
'planner.searchPlaces': 'Cerca luoghi…',
'planner.allCategories': 'Tutte le categorie',
'planner.noPlacesFound': 'Nessun luogo trovato',
'planner.addFirstPlace': 'Aggiungi primo luogo',
'planner.noReservations': 'Nessuna prenotazione',
'planner.addFirstReservation': 'Aggiungi prima prenotazione',
'planner.new': 'Nuovo',
'planner.addToDay': '+ Giorno',
'planner.calculating': 'Calcolo in corso…',
'planner.route': 'Percorso',
'planner.optimize': 'Ottimizza',
'planner.openGoogleMaps': 'Apri in Google Maps',
'planner.selectDayHint':
"Seleziona un giorno dall'elenco a sinistra per vedere il programma",
'planner.noPlacesForDay': 'Ancora nessun luogo per questo giorno',
'planner.addPlacesLink': 'Aggiungi luoghi →',
'planner.minTotal': 'min. totali',
'planner.noReservation': 'Nessuna prenotazione',
'planner.removeFromDay': 'Rimuovi dal giorno',
'planner.addToThisDay': 'Aggiungi al giorno',
'planner.overview': 'Panoramica',
'planner.noDays': 'Ancora nessun giorno',
'planner.editTripToAddDays': 'Modifica viaggio per aggiungere giorni',
'planner.dayCount': '{n} Giorni',
'planner.clickToUnlock': 'Clicca per sbloccare',
'planner.keepPosition':
"Mantieni la posizione durante l'ottimizzazione del percorso",
'planner.dayDetails': 'Dettagli del giorno',
'planner.dayN': 'Giorno {n}',
};
export default planner;
+26
View File
@@ -0,0 +1,26 @@
import type { TranslationStrings } from '../types';
const register: TranslationStrings = {
'register.passwordMismatch': 'Le password non corrispondono',
'register.passwordTooShort': 'La password deve contenere almeno 8 caratteri',
'register.failed': 'Registrazione fallita',
'register.getStarted': 'Inizia',
'register.subtitle':
'Crea un account e inizia a programmare i viaggi dei tuoi sogni.',
'register.feature1': 'Piani di viaggio illimitati',
'register.feature2': 'Vista mappa interattiva',
'register.feature3': 'Gestisci luoghi e categorie',
'register.feature4': 'Traccia le prenotazioni',
'register.feature5': 'Crea liste per la valigia',
'register.feature6': 'Archivia foto e file',
'register.createAccount': 'Crea Account',
'register.startPlanning': 'Inizia a programmare il tuo viaggio',
'register.minChars': 'Min. 6 caratteri',
'register.confirmPassword': 'Conferma Password',
'register.repeatPassword': 'Ripeti password',
'register.registering': 'Registrazione in corso...',
'register.register': 'Registrati',
'register.hasAccount': 'Hai già un account?',
'register.signIn': 'Accedi',
};
export default register;
+120
View File
@@ -0,0 +1,120 @@
import type { TranslationStrings } from '../types';
const reservations: TranslationStrings = {
'reservations.title': 'Prenotazioni',
'reservations.empty': 'Ancora nessuna prenotazione',
'reservations.emptyHint': 'Aggiungi prenotazioni per voli, alloggi e altro',
'reservations.add': 'Aggiungi prenotazione',
'reservations.addManual': 'Prenotazione manuale',
'reservations.placeHint':
'Suggerimento: è meglio creare le prenotazioni direttamente da un luogo per collegarle al tuo programma del giorno.',
'reservations.confirmed': 'Confermata',
'reservations.pending': 'In attesa',
'reservations.summary': '{confirmed} confermate, {pending} in attesa',
'reservations.fromPlan': 'Dal programma',
'reservations.showFiles': 'Mostra file',
'reservations.editTitle': 'Modifica prenotazione',
'reservations.status': 'Stato',
'reservations.datetime': 'Data e ora',
'reservations.startTime': 'Ora di inizio',
'reservations.endTime': 'Ora di fine',
'reservations.date': 'Data',
'reservations.time': 'Ora',
'reservations.timeAlt': 'Ora (alternativa, es. 19:30)',
'reservations.notes': 'Note',
'reservations.notesPlaceholder': 'Note aggiuntive...',
'reservations.meta.airline': 'Compagnia aerea',
'reservations.meta.flightNumber': 'N. volo',
'reservations.meta.from': 'Da',
'reservations.meta.to': 'A',
'reservations.needsReview': 'Verifica',
'reservations.needsReviewHint':
"L'aeroporto non è stato riconosciuto automaticamente — conferma la posizione.",
'reservations.searchLocation': 'Cerca stazione, porto, indirizzo...',
'reservations.meta.trainNumber': 'N. treno',
'reservations.meta.platform': 'Binario',
'reservations.meta.seat': 'Posto',
'reservations.meta.checkIn': 'Check-in',
'reservations.meta.checkInUntil': 'Check-in fino a',
'reservations.meta.checkOut': 'Check-out',
'reservations.meta.linkAccommodation': 'Alloggio',
'reservations.meta.pickAccommodation': 'Collega a un alloggio',
'reservations.meta.noAccommodation': 'Nessuno',
'reservations.meta.hotelPlace': 'Alloggio',
'reservations.meta.pickHotel': 'Seleziona alloggio',
'reservations.meta.fromDay': 'Da',
'reservations.meta.toDay': 'A',
'reservations.meta.selectDay': 'Seleziona giorno',
'reservations.type.flight': 'Volo',
'reservations.type.hotel': 'Alloggio',
'reservations.type.restaurant': 'Ristorante',
'reservations.type.train': 'Treno',
'reservations.type.car': 'Auto',
'reservations.type.cruise': 'Crociera',
'reservations.type.event': 'Evento',
'reservations.type.tour': 'Tour',
'reservations.type.other': 'Altro',
'reservations.confirm.delete':
'Sei sicuro di voler eliminare la prenotazione "{name}"?',
'reservations.confirm.deleteTitle': 'Eliminare la prenotazione?',
'reservations.confirm.deleteBody':
'"{name}" verrà eliminato in modo permanente.',
'reservations.toast.updated': 'Prenotazione aggiornata',
'reservations.toast.removed': 'Prenotazione eliminata',
'reservations.toast.fileUploaded': 'File caricato',
'reservations.toast.uploadError': 'Impossibile caricare',
'reservations.newTitle': 'Nuova prenotazione',
'reservations.bookingType': 'Tipo di prenotazione',
'reservations.titleLabel': 'Titolo',
'reservations.titlePlaceholder': 'es. Lufthansa LH123, Hotel Adlon, ...',
'reservations.locationAddress': 'Posizione / Indirizzo',
'reservations.locationPlaceholder': 'Indirizzo, aeroporto, hotel...',
'reservations.confirmationCode': 'Codice prenotazione',
'reservations.confirmationPlaceholder': 'es. ABC12345',
'reservations.day': 'Giorno',
'reservations.noDay': 'Nessun giorno',
'reservations.place': 'Luogo',
'reservations.noPlace': 'Nessun luogo',
'reservations.pendingSave': 'verrà salvato…',
'reservations.uploading': 'Caricamento...',
'reservations.attachFile': 'Allega file',
'reservations.linkExisting': 'Collega file esistente',
'reservations.toast.saveError': 'Impossibile salvare',
'reservations.toast.updateError': 'Impossibile aggiornare',
'reservations.toast.deleteError': 'Impossibile eliminare',
'reservations.confirm.remove': 'Rimuovere la prenotazione per "{name}"?',
'reservations.linkAssignment': "Collega all'assegnazione del giorno",
'reservations.pickAssignment':
"Seleziona un'assegnazione dal tuo programma...",
'reservations.noAssignment': 'Nessun collegamento (autonomo)',
'reservations.price': 'Prezzo',
'reservations.budgetCategory': 'Categoria budget',
'reservations.budgetCategoryPlaceholder': 'es. Trasporto, Alloggio',
'reservations.budgetCategoryAuto': 'Auto (dal tipo di prenotazione)',
'reservations.budgetHint':
'Una voce di budget verrà creata automaticamente al salvataggio.',
'reservations.departureDate': 'Partenza',
'reservations.arrivalDate': 'Arrivo',
'reservations.departureTime': 'Ora part.',
'reservations.arrivalTime': 'Ora arr.',
'reservations.pickupDate': 'Ritiro',
'reservations.returnDate': 'Riconsegna',
'reservations.pickupTime': 'Ora ritiro',
'reservations.returnTime': 'Ora riconsegna',
'reservations.endDate': 'Data fine',
'reservations.meta.departureTimezone': 'TZ part.',
'reservations.meta.arrivalTimezone': 'TZ arr.',
'reservations.span.departure': 'Partenza',
'reservations.span.arrival': 'Arrivo',
'reservations.span.inTransit': 'In transito',
'reservations.span.pickup': 'Ritiro',
'reservations.span.return': 'Riconsegna',
'reservations.span.active': 'Attivo',
'reservations.span.start': 'Inizio',
'reservations.span.end': 'Fine',
'reservations.span.ongoing': 'In corso',
'reservations.validation.endBeforeStart':
'La data/ora di fine deve essere successiva alla data/ora di inizio',
'reservations.addBooking': 'Aggiungi prenotazione',
};
export default reservations;
+298
View File
@@ -0,0 +1,298 @@
import type { TranslationStrings } from '../types';
const settings: TranslationStrings = {
'settings.title': 'Impostazioni',
'settings.subtitle': 'Configura le tue impostazioni personali',
'settings.tabs.display': 'Visualizzazione',
'settings.tabs.map': 'Mappa',
'settings.tabs.notifications': 'Notifiche',
'settings.tabs.integrations': 'Integrazioni',
'settings.tabs.account': 'Account',
'settings.tabs.offline': 'Offline',
'settings.tabs.about': 'Informazioni',
'settings.map': 'Mappa',
'settings.mapTemplate': 'Modello Mappa',
'settings.mapTemplatePlaceholder.select': 'Seleziona modello...',
'settings.mapDefaultHint': 'Lascia vuoto per OpenStreetMap (predefinito)',
'settings.mapTemplatePlaceholder':
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
'settings.mapHint': 'Modello URL per i tile della mappa',
'settings.mapProvider': 'Provider mappa',
'settings.mapProviderHint':
'Influisce sulle mappe Trip Planner e Journey. Atlas usa sempre Leaflet.',
'settings.mapLeafletSubtitle': 'Classica 2D, qualsiasi tile raster',
'settings.mapMapboxSubtitle': 'Tile vettoriali, edifici 3D e terreno',
'settings.mapExperimental': 'Sperimentale',
'settings.mapMapboxToken': 'Token di accesso Mapbox',
'settings.mapMapboxTokenHint': 'Token pubblico (pk.*) da',
'settings.mapMapboxTokenLink': 'mapbox.com → Token di accesso',
'settings.mapStyle': 'Stile mappa',
'settings.mapStylePlaceholder': 'Seleziona uno stile Mapbox',
'settings.mapStyleHint': 'Preset o il tuo URL mapbox://styles/USER/ID',
'settings.map3dBuildings': 'Edifici 3D e terreno',
'settings.map3dHint':
'Inclinazione + estrusioni 3D reali degli edifici — funziona con ogni stile, incluso satellite.',
'settings.mapHighQuality': 'Modalità alta qualità',
'settings.mapHighQualityHint':
'Antialiasing + proiezione globo per bordi più nitidi e una vista realistica del mondo.',
'settings.mapHighQualityWarning':
'Può influire sulle prestazioni su dispositivi meno potenti.',
'settings.mapTipLabel': 'Suggerimento:',
'settings.mapTip':
'Click destro e trascina per ruotare/inclinare la mappa. Click centrale per aggiungere un luogo (il click destro è riservato alla rotazione).',
'settings.latitude': 'Latitudine',
'settings.longitude': 'Longitudine',
'settings.saveMap': 'Salva Mappa',
'settings.apiKeys': 'Chiavi API',
'settings.mapsKey': 'Chiave API Google Maps',
'settings.mapsKeyHint':
'Per la ricerca dei luoghi. Richiede Places API (New). Ottienila su console.cloud.google.com',
'settings.weatherKey': 'Chiave API OpenWeatherMap',
'settings.weatherKeyHint':
'Per i dati meteo. Gratuita su openweathermap.org/api',
'settings.keyPlaceholder': 'Inserisci la chiave...',
'settings.configured': 'Configurata',
'settings.saveKeys': 'Salva Chiavi',
'settings.display': 'Visualizzazione',
'settings.colorMode': 'Modalità Colore',
'settings.light': 'Chiara',
'settings.dark': 'Scura',
'settings.auto': 'Automatica',
'settings.language': 'Lingua',
'settings.temperature': 'Unità di Temperatura',
'settings.timeFormat': 'Formato Ora',
'settings.blurBookingCodes': 'Nascondi codici di prenotazione',
'settings.notifications': 'Notifiche',
'settings.notifyTripInvite': 'Inviti di viaggio',
'settings.notifyBookingChange': 'Modifiche alle prenotazioni',
'settings.notifyTripReminder': 'Promemoria di viaggio',
'settings.notifyTodoDue': 'Attività in scadenza',
'settings.notifyVacayInvite': 'Inviti fusione Vacay',
'settings.notifyPhotosShared': 'Foto condivise (Immich)',
'settings.notifyCollabMessage': 'Messaggi chat (Collab)',
'settings.notifyPackingTagged': 'Lista valigia: assegnazioni',
'settings.notifyWebhook': 'Notifiche webhook',
'settings.notificationsDisabled':
'Le notifiche non sono configurate. Chiedi a un amministratore di abilitare le notifiche e-mail o webhook.',
'settings.notificationsActive': 'Canale attivo',
'settings.notificationsManagedByAdmin':
"Gli eventi di notifica sono configurati dall'amministratore.",
'settings.on': 'On',
'settings.off': 'Off',
'settings.mcp.title': 'Configurazione MCP',
'settings.mcp.endpoint': 'Endpoint MCP',
'settings.mcp.clientConfig': 'Configurazione client',
'settings.mcp.clientConfigHint':
'Sostituisci <your_token> con un token API dalla lista sottostante. Il percorso di npx potrebbe dover essere adattato per il tuo sistema (es. C:\\PROGRA~1\\nodejs\\npx.cmd su Windows).',
'settings.mcp.clientConfigHintOAuth':
'Replace <your_client_id> and <your_client_secret> with the credentials shown in the OAuth 2.1 client you created above. mcp-remote will open your browser to complete the authorization the first time you connect. The path to npx may need to be adjusted for your system (e.g. C:PROGRA~1\nodejs\npx.cmd on Windows).',
'settings.mcp.copy': 'Copia',
'settings.mcp.copied': 'Copiato!',
'settings.mcp.apiTokens': 'Token API',
'settings.mcp.createToken': 'Crea nuovo token',
'settings.mcp.noTokens':
'Nessun token ancora. Creane uno per connettere i client MCP.',
'settings.mcp.tokenCreatedAt': 'Creato',
'settings.mcp.tokenUsedAt': 'Utilizzato',
'settings.mcp.deleteTokenTitle': 'Elimina token',
'settings.mcp.deleteTokenMessage':
"Questo token smetterà di funzionare immediatamente. Qualsiasi client MCP che lo utilizza perderà l'accesso.",
'settings.mcp.modal.createTitle': 'Crea token API',
'settings.mcp.modal.tokenName': 'Nome del token',
'settings.mcp.modal.tokenNamePlaceholder':
'es. Claude Desktop, Laptop di lavoro',
'settings.mcp.modal.creating': 'Creazione…',
'settings.mcp.modal.create': 'Crea token',
'settings.mcp.modal.createdTitle': 'Token creato',
'settings.mcp.modal.createdWarning':
'Questo token verrà mostrato solo una volta. Copialo e salvalo ora — non può essere recuperato.',
'settings.mcp.modal.done': 'Fatto',
'settings.mcp.toast.created': 'Token creato',
'settings.mcp.toast.createError': 'Impossibile creare il token',
'settings.mcp.toast.deleted': 'Token eliminato',
'settings.mcp.toast.deleteError': 'Impossibile eliminare il token',
'settings.mcp.apiTokensDeprecated':
'I token API sono deprecati e verranno rimossi in una versione futura. Utilizza invece i client OAuth 2.1.',
'settings.oauth.clients': 'Client OAuth 2.1',
'settings.oauth.clientsHint':
'Registra client OAuth 2.1 per consentire alle applicazioni MCP di terze parti (Claude Web, Cursor, ecc.) di connettersi senza token statici.',
'settings.oauth.createClient': 'Nuovo client',
'settings.oauth.noClients': 'Nessun client OAuth registrato.',
'settings.oauth.clientId': 'ID client',
'settings.oauth.clientSecret': 'Segreto client',
'settings.oauth.deleteClient': 'Elimina client',
'settings.oauth.deleteClientMessage':
"Questo client e tutte le sessioni attive verranno eliminati definitivamente. Qualsiasi applicazione che lo utilizza perderà immediatamente l'accesso.",
'settings.oauth.rotateSecret': 'Rinnova segreto',
'settings.oauth.rotateSecretMessage':
'Verrà generato un nuovo segreto client e tutte le sessioni esistenti verranno invalidate immediatamente. Aggiorna la tua applicazione prima di chiudere questa finestra.',
'settings.oauth.rotateSecretConfirm': 'Rinnova',
'settings.oauth.rotateSecretConfirming': 'Rinnovo in corso…',
'settings.oauth.rotateSecretDoneTitle': 'Nuovo segreto generato',
'settings.oauth.rotateSecretDoneWarning':
'Questo segreto viene mostrato una sola volta. Copialo ora e aggiorna la tua applicazione — tutte le sessioni precedenti sono state invalidate.',
'settings.oauth.activeSessions': 'Sessioni OAuth attive',
'settings.oauth.sessionScopes': 'Ambiti',
'settings.oauth.sessionExpires': 'Scade',
'settings.oauth.revoke': 'Revoca',
'settings.oauth.revokeSession': 'Revoca sessione',
'settings.oauth.revokeSessionMessage':
"Questo revocherà immediatamente l'accesso per questa sessione OAuth.",
'settings.oauth.modal.createTitle': 'Registra client OAuth',
'settings.oauth.modal.presets': 'Preimpostazioni rapide',
'settings.oauth.modal.clientName': 'Nome applicazione',
'settings.oauth.modal.clientNamePlaceholder':
'es. Claude Web, La mia app MCP',
'settings.oauth.modal.redirectUris': 'URI di reindirizzamento',
'settings.oauth.modal.redirectUrisPlaceholder':
'https://your-app.com/callback\nhttps://your-app.com/auth',
'settings.oauth.modal.redirectUrisHint':
'Un URI per riga. HTTPS richiesto (localhost esente). Corrispondenza esatta richiesta.',
'settings.oauth.modal.scopes': 'Ambiti consentiti',
'settings.oauth.modal.scopesHint':
"list_trips e get_trip_summary sono sempre disponibili — nessun ambito richiesto. Permettono all'IA di scoprire gli ID viaggio necessari.",
'settings.oauth.modal.selectAll': 'Seleziona tutto',
'settings.oauth.modal.deselectAll': 'Deseleziona tutto',
'settings.oauth.modal.creating': 'Registrazione…',
'settings.oauth.modal.create': 'Registra client',
'settings.oauth.modal.createdTitle': 'Client registrato',
'settings.oauth.modal.createdWarning':
'Il segreto client viene mostrato una sola volta. Copialo ora — non può essere recuperato.',
'settings.oauth.toast.createError': 'Impossibile registrare il client OAuth',
'settings.oauth.toast.deleted': 'Client OAuth eliminato',
'settings.oauth.toast.deleteError': 'Impossibile eliminare il client OAuth',
'settings.oauth.toast.revoked': 'Sessione revocata',
'settings.oauth.toast.revokeError': 'Impossibile revocare la sessione',
'settings.oauth.toast.rotateError': 'Impossibile rinnovare il segreto client',
'settings.oauth.modal.machineClient':
'Client macchina (senza login nel browser)',
'settings.oauth.modal.machineClientHint':
'Usa il grant client_credentials — nessun URI di reindirizzamento necessario. Il token viene emesso direttamente tramite client_id + client_secret e agisce come te negli ambiti selezionati.',
'settings.oauth.modal.machineClientUsage':
'Ottieni token: POST /oauth/token con grant_type=client_credentials, client_id e client_secret. Senza browser, senza token di aggiornamento.',
'settings.oauth.badge.machine': 'macchina',
'settings.account': 'Account',
'settings.about': 'Informazioni',
'settings.about.reportBug': 'Segnala un bug',
'settings.about.reportBugHint': 'Hai trovato un problema? Faccelo sapere',
'settings.about.featureRequest': 'Richiedi funzionalità',
'settings.about.featureRequestHint': 'Suggerisci una nuova funzionalità',
'settings.about.wikiHint': 'Documentazione e guide',
'settings.about.supporters.badge': 'Sostenitori Mensili',
'settings.about.supporters.title': 'Compagni di viaggio per TREK',
'settings.about.supporters.subtitle':
'Mentre pianifichi il tuo prossimo itinerario, queste persone aiutano a pianificare il futuro di TREK. Il loro contributo mensile va direttamente allo sviluppo e alle ore realmente investite — per mantenere TREK Open Source.',
'settings.about.supporters.since': 'sostenitore da {date}',
'settings.about.supporters.tierEmpty': 'Sii il primo',
'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket',
'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP',
'settings.about.supporter.tier.businessClassDreamer':
'Business Class Dreamer',
'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller',
'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate',
'settings.about.description':
"TREK è un pianificatore di viaggi self-hosted che ti aiuta a organizzare i tuoi viaggi dalla prima idea all'ultimo ricordo. Pianificazione giornaliera, budget, liste bagagli, foto e molto altro — tutto in un unico posto, sul tuo server.",
'settings.about.madeWith': 'Fatto con',
'settings.about.madeBy': 'da Maurice e una crescente comunità open-source.',
'settings.username': 'Nome utente',
'settings.email': 'Email',
'settings.role': 'Ruolo',
'settings.roleAdmin': 'Amministratore',
'settings.oidcLinked': 'Collegato con',
'settings.changePassword': 'Cambia Password',
'settings.currentPassword': 'Password attuale',
'settings.currentPasswordRequired': 'La password attuale è obbligatoria',
'settings.newPassword': 'Nuova password',
'settings.confirmPassword': 'Conferma nuova password',
'settings.updatePassword': 'Aggiorna password',
'settings.passwordRequired': 'Inserisci la password attuale e quella nuova',
'settings.passwordTooShort': 'La password deve contenere almeno 8 caratteri',
'settings.passwordMismatch': 'Le password non corrispondono',
'settings.passwordWeak':
'La password deve contenere lettere maiuscole, minuscole, un numero e un carattere speciale',
'settings.passwordChanged': 'Password cambiata con successo',
'settings.deleteAccount': 'Elimina account',
'settings.deleteAccountTitle': 'Eliminare il tuo account?',
'settings.deleteAccountWarning':
'Il tuo account e tutti i tuoi viaggi, luoghi e file verranno eliminati in modo permanente. Questa azione non può essere annullata.',
'settings.deleteAccountConfirm': 'Elimina in modo permanente',
'settings.deleteBlockedTitle': 'Eliminazione impossibile',
'settings.deleteBlockedMessage':
"Sei l'unico amministratore. Promuovi un altro utente ad amministratore prima di eliminare il tuo account.",
'settings.roleUser': 'Utente',
'settings.saveProfile': 'Salva Profillo',
'settings.toast.mapSaved': 'Impostazioni mappa salvate',
'settings.toast.keysSaved': 'Chiavi API salvate',
'settings.toast.displaySaved': 'Impostazioni di visualizzazione salvate',
'settings.toast.profileSaved': 'Profilo salvato',
'settings.uploadAvatar': 'Carica Immagine del Profilo',
'settings.removeAvatar': 'Rimuovi Immagine del Profilo',
'settings.avatarUploaded': 'Immagine del profilo aggiornata',
'settings.avatarRemoved': 'Immagine del profilo rimossa',
'settings.avatarError': 'Impossibile caricare',
'settings.mfa.title': 'Autenticazione a due fattori (2FA)',
'settings.mfa.description':
"Aggiunge un secondo passaggio quando accedi con email e password. Usa un'app authenticator (Google Authenticator, Authy, ecc.).",
'settings.mfa.requiredByPolicy':
"L'amministratore richiede l'autenticazione a due fattori. Configura un'app authenticator qui sotto prima di continuare.",
'settings.mfa.backupTitle': 'Codici di backup',
'settings.mfa.backupDescription':
"Usa questi codici monouso se perdi l'accesso alla tua app authenticator.",
'settings.mfa.backupWarning':
'Salvali adesso. Ogni codice può essere usato una sola volta.',
'settings.mfa.backupCopy': 'Copia codici',
'settings.mfa.backupDownload': 'Scarica TXT',
'settings.mfa.backupPrint': 'Stampa / PDF',
'settings.mfa.backupCopied': 'Codici di backup copiati',
'settings.mfa.enabled': 'La 2FA è abilitata sul tuo account.',
'settings.mfa.disabled': 'La 2FA non è abilitata.',
'settings.mfa.setup': 'Configura authenticator',
'settings.mfa.scanQr':
'Scansiona questo codice QR con la tua app, o inserisci il segreto manualmente.',
'settings.mfa.secretLabel': 'Chiave segreta (inserimento manuale)',
'settings.mfa.codePlaceholder': 'Codice a 6 cifre',
'settings.mfa.enable': 'Abilita 2FA',
'settings.mfa.cancelSetup': 'Annulla',
'settings.mfa.disableTitle': 'Disabilita 2FA',
'settings.mfa.disableHint':
'Inserisci la password del tuo account e un codice attuale dal tuo authenticator.',
'settings.mfa.disable': 'Disabilita 2FA',
'settings.mfa.toastEnabled': 'Autenticazione a due fattori abilitata',
'settings.mfa.toastDisabled': 'Autenticazione a due fattori disabilitata',
'settings.mfa.demoBlocked': 'Non disponibile in modalità demo',
'settings.mustChangePassword':
'Devi cambiare la password prima di continuare. Imposta una nuova password qui sotto.',
'settings.bookingLabels': 'Etichette percorsi prenotati',
'settings.bookingLabelsHint':
"Mostra i nomi di stazioni / aeroporti sulla mappa. Se disattivato, viene mostrata solo l'icona.",
'settings.notifyVersionAvailable': 'Nuova versione disponibile',
'settings.notificationPreferences.noChannels':
'Nessun canale di notifica configurato. Chiedi a un amministratore di configurare notifiche via e-mail o webhook.',
'settings.webhookUrl.label': 'URL webhook',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint':
'Inserisci il tuo URL webhook Discord, Slack o personalizzato per ricevere notifiche.',
'settings.webhookUrl.saved': 'URL webhook salvato',
'settings.webhookUrl.test': 'Test',
'settings.webhookUrl.testSuccess': 'Webhook di test inviato con successo',
'settings.webhookUrl.testFailed': 'Invio webhook di test fallito',
'settings.ntfyUrl.topicLabel': 'Argomento Ntfy',
'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts',
'settings.ntfyUrl.serverLabel': 'URL server Ntfy (opzionale)',
'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh',
'settings.ntfyUrl.hint':
"Inserisci il tuo argomento Ntfy per ricevere notifiche push. Lascia il server vuoto per usare il valore predefinito configurato dall'amministratore.",
'settings.ntfyUrl.tokenLabel': 'Token di accesso (opzionale)',
'settings.ntfyUrl.tokenHint':
'Richiesto per gli argomenti protetti da password.',
'settings.ntfyUrl.saved': 'Impostazioni Ntfy salvate',
'settings.ntfyUrl.test': 'Testa',
'settings.ntfyUrl.testSuccess': 'Notifica di test Ntfy inviata con successo',
'settings.ntfyUrl.testFailed': 'Notifica di test Ntfy fallita',
'settings.ntfyUrl.tokenCleared': 'Token di accesso rimosso',
'settings.notificationPreferences.inapp': 'In-App',
'settings.notificationPreferences.webhook': 'Webhook',
'settings.notificationPreferences.email': 'Email',
'settings.notificationPreferences.ntfy': 'Ntfy',
};
export default settings;
+16
View File
@@ -0,0 +1,16 @@
import type { TranslationStrings } from '../types';
const share: TranslationStrings = {
'share.linkTitle': 'Link pubblico',
'share.linkHint':
'Crea un link che chiunque può usare per visualizzare questo viaggio senza accedere. Solo lettura — nessuna modifica possibile.',
'share.createLink': 'Crea link',
'share.deleteLink': 'Elimina link',
'share.createError': 'Impossibile creare il link',
'share.permMap': 'Mappa e programma',
'share.permBookings': 'Prenotazioni',
'share.permPacking': 'Valigia',
'share.permBudget': 'Budget',
'share.permCollab': 'Chat',
};
export default share;
+21
View File
@@ -0,0 +1,21 @@
import type { TranslationStrings } from '../types';
const shared: TranslationStrings = {
'shared.expired': 'Link scaduto o non valido',
'shared.expiredHint': 'Questo link di viaggio condiviso non è più attivo.',
'shared.readOnly': 'Vista in sola lettura',
'shared.tabPlan': 'Programma',
'shared.tabBookings': 'Prenotazioni',
'shared.tabPacking': 'Valigia',
'shared.tabBudget': 'Budget',
'shared.tabChat': 'Chat',
'shared.days': 'giorni',
'shared.places': 'luoghi',
'shared.other': 'Altro',
'shared.totalBudget': 'Budget totale',
'shared.messages': 'messaggi',
'shared.sharedVia': 'Condiviso tramite',
'shared.confirmed': 'Confermato',
'shared.pending': 'In attesa',
};
export default shared;
+13
View File
@@ -0,0 +1,13 @@
import type { TranslationStrings } from '../types';
const stats: TranslationStrings = {
'stats.countries': 'Paesi',
'stats.cities': 'Città',
'stats.trips': 'Viaggi',
'stats.places': 'Luoghi',
'stats.worldProgress': 'Progresso nel mondo',
'stats.visited': 'visitati',
'stats.remaining': 'rimanenti',
'stats.visitedCountries': 'Paesi visitati',
};
export default stats;
+62
View File
@@ -0,0 +1,62 @@
import type { TranslationStrings } from '../types';
const system_notice: TranslationStrings = {
'system_notice.welcome_v1.title': 'Benvenuto su TREK',
'system_notice.welcome_v1.body':
'Il tuo pianificatore di viaggi tutto in uno. Crea itinerari, condividi viaggi con gli amici e rimani organizzato — online e offline.',
'system_notice.welcome_v1.cta_label': 'Pianifica un viaggio',
'system_notice.welcome_v1.hero_alt':
"Destinazione di viaggio panoramica con l'interfaccia TREK",
'system_notice.welcome_v1.highlight_plan': 'Itinerari giorno per giorno',
'system_notice.welcome_v1.highlight_share':
'Collabora con i tuoi compagni di viaggio',
'system_notice.welcome_v1.highlight_offline': 'Funziona offline su mobile',
'system_notice.dev_test_modal.title': '[Dev] Test notice',
'system_notice.dev_test_modal.body': 'This is a dev-only test notice.',
'system_notice.pager.prev': 'Avviso precedente',
'system_notice.pager.next': 'Avviso successivo',
'system_notice.pager.counter': '{current} / {total}',
'system_notice.pager.goto': "Vai all'avviso {n}",
'system_notice.pager.position': 'Avviso {current} di {total}',
'system_notice.v3_photos.title': 'Le foto sono spostate nella 3.0',
'system_notice.v3_photos.body':
'**Foto** nel Pianificatore di Viaggio sono state rimosse. Le tue foto sono al sicuro — TREK non ha mai modificato la tua libreria Immich o Synology.\n\nLe foto ora si trovano nel componente aggiuntivo **Journey**. Journey è opzionale — se non è ancora disponibile, chiedi al tuo admin di abilitarlo in Admin → Addon.',
'system_notice.v3_journey.title': 'Scopri Journey — diario di viaggio',
'system_notice.v3_journey.body':
'Documenta i tuoi viaggi come storie ricche con cronologie, gallerie fotografiche e mappe interattive.',
'system_notice.v3_journey.cta_label': 'Apri Journey',
'system_notice.v3_journey.highlight_timeline':
'Cronologia e galleria giornaliera',
'system_notice.v3_journey.highlight_photos': 'Importa da Immich o Synology',
'system_notice.v3_journey.highlight_share':
'Condividi pubblicamente — senza accesso',
'system_notice.v3_journey.highlight_export':
'Esporta come libro fotografico PDF',
'system_notice.v3_features.title': 'Altri punti salienti nel 3.0',
'system_notice.v3_features.body':
'Altre novità da conoscere in questa versione.',
'system_notice.v3_features.highlight_dashboard':
'Dashboard ridisegnata mobile-first',
'system_notice.v3_features.highlight_offline':
'Modalità offline completa come PWA',
'system_notice.v3_features.highlight_search':
'Completamento automatico luoghi in tempo reale',
'system_notice.v3_features.highlight_import':
'Importa luoghi da file KMZ/KML',
'system_notice.v3_mcp.title': 'MCP: aggiornamento OAuth 2.1',
'system_notice.v3_mcp.body':
"L'integrazione MCP è stata completamente rinnovata. OAuth 2.1 è ora il metodo di autenticazione consigliato. I token statici (trek_…) sono deprecati e verranno rimossi in una versione futura.",
'system_notice.v3_mcp.highlight_oauth': 'OAuth 2.1 consigliato (mcp-remote)',
'system_notice.v3_mcp.highlight_scopes':
'24 scope di autorizzazione granulari',
'system_notice.v3_mcp.highlight_deprecated': 'Token statici trek_ deprecati',
'system_notice.v3_mcp.highlight_tools': 'Strumenti e prompt estesi',
'system_notice.v3_thankyou.title': 'Una nota personale da parte mia',
'system_notice.v3_thankyou.body':
"Prima di andare avanti — voglio prendermi un momento.\n\nTREK è nato come un progetto secondario che ho costruito per i miei viaggi. Non avrei mai immaginato che sarebbe cresciuto fino a diventare qualcosa di cui 4.000 di voi si fidano per pianificare le proprie avventure. Ogni stella, ogni issue, ogni richiesta di funzionalità — le leggo tutte, e sono loro a tenermi in piedi nelle notti tarde tra un lavoro a tempo pieno e l'università.\n\nVoglio che sappiate: TREK sarà sempre open source, sempre self-hosted, sempre vostro. Nessun tracciamento, nessun abbonamento, nessuna fregatura. Solo uno strumento creato da qualcuno che ama viaggiare tanto quanto voi.\n\nUn ringraziamento speciale a [jubnl](https://github.com/jubnl) — sei diventato un collaboratore incredibile. Molto di ciò che rende la 3.0 fantastica porta la tua impronta. Grazie per aver creduto in questo progetto quando era ancora acerbo.\n\nE a ognuno di voi che ha segnalato un bug, tradotto una stringa, condiviso TREK con un amico o semplicemente lo ha usato per pianificare un viaggio — **grazie**. Voi siete il motivo per cui tutto questo esiste.\n\nA molte altre avventure insieme.\n\n— Maurice\n\n---\n\n[Unisciti alla community su Discord](https://discord.gg/7Q6M6jDwzf)\n\nSe TREK rende i tuoi viaggi migliori, un [piccolo caffè](https://ko-fi.com/mauriceboe) aiuta sempre a tenere le luci accese.",
'system_notice.v3014_whitespace_collision.title':
'Azione richiesta: conflitto di account utente',
'system_notice.v3014_whitespace_collision.body':
"L'aggiornamento 3.0.14 ha rilevato uno o più conflitti di nome utente o e-mail causati da spazi iniziali o finali nei valori memorizzati. Gli account interessati sono stati rinominati automaticamente. Controlla i log del server per le righe che iniziano con **[migration] WHITESPACE COLLISION** per identificare quali account richiedono revisione.",
};
export default system_notice;
+40
View File
@@ -0,0 +1,40 @@
import type { TranslationStrings } from '../types';
const todo: TranslationStrings = {
'todo.subtab.packing': 'Lista di imballaggio',
'todo.subtab.todo': 'Da fare',
'todo.completed': 'completato/i',
'todo.filter.all': 'Tutti',
'todo.filter.open': 'Aperto',
'todo.filter.done': 'Fatto',
'todo.uncategorized': 'Senza categoria',
'todo.namePlaceholder': 'Nome attività',
'todo.descriptionPlaceholder': 'Descrizione (facoltativa)',
'todo.unassigned': 'Non assegnato',
'todo.noCategory': 'Nessuna categoria',
'todo.hasDescription': 'Ha descrizione',
'todo.addItem': 'Nuova attività',
'todo.sidebar.sortBy': 'Ordina per',
'todo.priority': 'Priorità',
'todo.newCategoryLabel': 'nuova',
'todo.newCategory': 'Nome categoria',
'todo.addCategory': 'Aggiungi categoria',
'todo.newItem': 'Nuova attività',
'todo.empty': "Nessuna attività ancora. Aggiungi un'attività per iniziare!",
'todo.filter.my': 'Le mie attività',
'todo.filter.overdue': 'Scaduta',
'todo.sidebar.tasks': 'Attività',
'todo.sidebar.categories': 'Categorie',
'todo.detail.title': 'Attività',
'todo.detail.description': 'Descrizione',
'todo.detail.category': 'Categoria',
'todo.detail.dueDate': 'Scadenza',
'todo.detail.assignedTo': 'Assegnato a',
'todo.detail.delete': 'Elimina',
'todo.detail.save': 'Salva modifiche',
'todo.detail.create': 'Crea attività',
'todo.detail.priority': 'Priorità',
'todo.detail.noPriority': 'Nessuna',
'todo.sortByPrio': 'Priorità',
};
export default todo;
+10
View File
@@ -0,0 +1,10 @@
import type { TranslationStrings } from '../types';
const transport: TranslationStrings = {
'transport.addTransport': 'Aggiungi trasporto',
'transport.modalTitle.create': 'Aggiungi trasporto',
'transport.modalTitle.edit': 'Modifica trasporto',
'transport.title': 'Trasporti',
'transport.addManual': 'Trasporto manuale',
};
export default transport;
+31
View File
@@ -0,0 +1,31 @@
import type { TranslationStrings } from '../types';
const trip: TranslationStrings = {
'trip.tabs.plan': 'Programma',
'trip.tabs.transports': 'Trasporti',
'trip.tabs.reservations': 'Prenotazioni',
'trip.tabs.reservationsShort': 'Pren.',
'trip.tabs.packing': 'Lista valigia',
'trip.tabs.packingShort': 'Valigia',
'trip.tabs.lists': 'Liste',
'trip.tabs.listsShort': 'Liste',
'trip.tabs.budget': 'Budget',
'trip.tabs.files': 'File',
'trip.loading': 'Caricamento viaggio...',
'trip.mobilePlan': 'Programma',
'trip.mobilePlaces': 'Luoghi',
'trip.toast.placeUpdated': 'Luogo aggiornato',
'trip.toast.placeAdded': 'Luogo aggiunto',
'trip.toast.placeDeleted': 'Luogo eliminato',
'trip.toast.selectDay': 'Seleziona prima un giorno',
'trip.toast.assignedToDay': 'Luogo assegnato al giorno',
'trip.toast.reorderError': 'Impossibile riordinare',
'trip.toast.reservationUpdated': 'Prenotazione aggiornata',
'trip.toast.reservationAdded': 'Prenotazione aggiunta',
'trip.toast.deleted': 'Eliminato',
'trip.confirm.deletePlace': 'Sei sicuro di voler eliminare questo luogo?',
'trip.confirm.deletePlaces': 'Eliminare {count} luoghi?',
'trip.toast.placesDeleted': '{count} luoghi eliminati',
'trip.loadingPhotos': 'Caricamento foto dei luoghi...',
};
export default trip;
+17
View File
@@ -0,0 +1,17 @@
import type { TranslationStrings } from '../types';
const trips: TranslationStrings = {
'trips.memberRemoved': '{username} rimosso',
'trips.memberRemoveError': 'Rimozione non riuscita',
'trips.memberAdded': '{username} aggiunto',
'trips.memberAddError': 'Aggiunta non riuscita',
'trips.reminder': 'Promemoria',
'trips.reminderNone': 'Nessuno',
'trips.reminderDay': 'giorno',
'trips.reminderDays': 'giorni',
'trips.reminderCustom': 'Personalizzato',
'trips.reminderDaysBefore': 'giorni prima della partenza',
'trips.reminderDisabledHint':
'I promemoria dei viaggi sono disabilitati. Abilitali in Admin > Impostazioni > Notifiche.',
};
export default trips;
+21
View File
@@ -0,0 +1,21 @@
import type { TranslationStrings } from '../types';
const undo: TranslationStrings = {
'undo.button': 'Annulla',
'undo.tooltip': 'Annulla: {action}',
'undo.assignPlace': 'Luogo assegnato al giorno',
'undo.removeAssignment': 'Luogo rimosso dal giorno',
'undo.reorder': 'Luoghi riordinati',
'undo.optimize': 'Percorso ottimizzato',
'undo.deletePlace': 'Luogo eliminato',
'undo.deletePlaces': 'Luoghi eliminati',
'undo.moveDay': 'Luogo spostato in altro giorno',
'undo.lock': 'Blocco luogo modificato',
'undo.importGpx': 'Importazione GPX',
'undo.importKeyholeMarkup': 'Importazione KMZ/KML',
'undo.importGoogleList': 'Importazione Google Maps',
'undo.importNaverList': 'Importazione Naver Maps',
'undo.addPlace': 'Luogo aggiunto',
'undo.done': 'Annullato: {action}',
};
export default undo;
+105
View File
@@ -0,0 +1,105 @@
import type { TranslationStrings } from '../types';
const vacay: TranslationStrings = {
'vacay.subtitle': 'Pianifica e gestisci i giorni di ferie',
'vacay.settings': 'Impostazioni',
'vacay.year': 'Anno',
'vacay.addYear': 'Aggiungi anno successivo',
'vacay.addPrevYear': 'Aggiungi anno precedente',
'vacay.removeYear': 'Rimuovi anno',
'vacay.removeYearConfirm': 'Rimuovere {year}?',
'vacay.removeYearHint':
'Tutte le voci delle ferie e le ferie aziendali di questo anno verranno eliminate in modo permanente.',
'vacay.remove': 'Rimuovi',
'vacay.persons': 'Persone',
'vacay.noPersons': 'Nessuna persona aggiunta',
'vacay.addPerson': 'Aggiungi persona',
'vacay.editPerson': 'Modifica persona',
'vacay.removePerson': 'Rimuovi persona',
'vacay.removePersonConfirm': 'Rimuovere {name}?',
'vacay.removePersonHint':
'Tutte le voci delle ferie per questa persona verranno eliminate in modo permanente.',
'vacay.personName': 'Nome',
'vacay.personNamePlaceholder': 'Inserisci nome',
'vacay.color': 'Colore',
'vacay.add': 'Aggiungi',
'vacay.legend': 'Legenda',
'vacay.publicHoliday': 'Festività pubblica',
'vacay.companyHoliday': 'Ferie aziendali',
'vacay.weekend': 'Weekend',
'vacay.modeVacation': 'Ferie',
'vacay.modeCompany': 'Ferie aziendali',
'vacay.entitlement': 'Disponibilità',
'vacay.entitlementDays': 'Giorni',
'vacay.used': 'Usati',
'vacay.remaining': 'Rimanenti',
'vacay.carriedOver': 'dal {year}',
'vacay.blockWeekends': 'Blocca weekend',
'vacay.blockWeekendsHint': 'Impedisci le voci ferie nei giorni del weekend',
'vacay.weekendDays': 'Giorni del weekend',
'vacay.mon': 'Lun',
'vacay.tue': 'Mar',
'vacay.wed': 'Mer',
'vacay.thu': 'Gio',
'vacay.fri': 'Ven',
'vacay.sat': 'Sab',
'vacay.sun': 'Dom',
'vacay.publicHolidays': 'Festività pubbliche',
'vacay.publicHolidaysHint': 'Segna le festività pubbliche nel calendario',
'vacay.selectCountry': 'Seleziona paese',
'vacay.selectRegion': 'Seleziona regione (opzionale)',
'vacay.addCalendar': 'Aggiungi calendario',
'vacay.calendarLabel': 'Etichetta (opzionale)',
'vacay.calendarColor': 'Colore',
'vacay.noCalendars': 'Ancora nessun calendario delle festività aggiunto',
'vacay.companyHolidays': 'Ferie aziendali',
'vacay.companyHolidaysHint': 'Consenti di segnare giorni di ferie aziendali',
'vacay.companyHolidaysNoDeduct':
'Le ferie aziendali non vengono conteggiate nei giorni di ferie.',
'vacay.weekStart': 'La settimana inizia il',
'vacay.weekStartHint':
'Scegli se la settimana inizia il lunedì o la domenica',
'vacay.carryOver': 'Riporto',
'vacay.carryOverHint':
"Riporta automaticamente i giorni di ferie rimanenti all'anno successivo",
'vacay.sharing': 'Condivisione',
'vacay.sharingHint': 'Condividi il tuo piano ferie con altri utenti TREK',
'vacay.owner': 'Proprietario',
'vacay.shareEmailPlaceholder': "Email dell'utente TREK",
'vacay.shareSuccess': 'Piano condiviso con successo',
'vacay.shareError': 'Impossibile condividere il piano',
'vacay.dissolve': 'Sciogli unione',
'vacay.dissolveHint':
'Separa di nuovo i calendari. Le tue voci verranno mantenute.',
'vacay.dissolveAction': 'Sciogli',
'vacay.dissolved': 'Calendario separato',
'vacay.fusedWith': 'Unito con',
'vacay.you': 'tu',
'vacay.noData': 'Nessun dato',
'vacay.changeColor': 'Cambia colore',
'vacay.inviteUser': 'Invita utente',
'vacay.inviteHint':
'Invita un altro utente TREK a condividere un calendario ferie combinato.',
'vacay.selectUser': 'Seleziona utente',
'vacay.sendInvite': 'Invia invito',
'vacay.inviteSent': 'Invito inviato',
'vacay.inviteError': "Impossibile inviare l'invito",
'vacay.pending': 'in attesa',
'vacay.noUsersAvailable': 'Nessun utente disponibile',
'vacay.accept': 'Accetta',
'vacay.decline': 'Rifiuta',
'vacay.acceptFusion': 'Accetta e unisci',
'vacay.inviteTitle': 'Richiesta di unione',
'vacay.inviteWantsToFuse': 'vuole condividere con te un calendario ferie.',
'vacay.fuseInfo1':
'Entrambi vedrete tutte le voci ferie in un unico calendario condiviso.',
'vacay.fuseInfo2':
'Entrambe le parti possono creare e modificare le voci reciproche.',
'vacay.fuseInfo3':
'Entrambe le parti possono eliminare le voci e modificare le disponibilità ferie.',
'vacay.fuseInfo4':
'Le impostazioni come festività pubbliche e ferie aziendali sono condivise.',
'vacay.fuseInfo5':
"L'unione può essere sciolta in qualsiasi momento da una delle due parti. Le tue voci verranno preservate.",
};
export default vacay;