From 1f59d6a9e78cc6299a54094bbb73221652f6b571 Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Mon, 30 Mar 2026 14:16:24 +0200 Subject: [PATCH 01/28] feat: add Discogs music scraper plugin (#87) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New plugin that integrates with Discogs API for music metadata: - Search by barcode (EAN) or title+artist - Maps: Artist → Author, Label → Publisher, Tracklist → Description - Covers from Discogs images - Format detection: CD, Vinyl, Cassette - Optional API token for higher rate limits (60 vs 25 req/min) - Same hook pattern as OpenLibrary (scrape.sources/fetch/modify) --- .gitignore | 5 + storage/plugins/discogs/DiscogsPlugin.php | 719 ++++++++++++++++++++++ storage/plugins/discogs/README.md | 82 +++ storage/plugins/discogs/plugin.json | 57 ++ storage/plugins/discogs/wrapper.php | 105 ++++ 5 files changed, 968 insertions(+) create mode 100644 storage/plugins/discogs/DiscogsPlugin.php create mode 100644 storage/plugins/discogs/README.md create mode 100644 storage/plugins/discogs/plugin.json create mode 100644 storage/plugins/discogs/wrapper.php diff --git a/.gitignore b/.gitignore index 29892a41..bbea1256 100644 --- a/.gitignore +++ b/.gitignore @@ -138,6 +138,11 @@ storage/plugins/goodlib/* !storage/plugins/goodlib/*.md !storage/plugins/goodlib/views/ !storage/plugins/goodlib/views/*.php +!storage/plugins/discogs/ +storage/plugins/discogs/* +!storage/plugins/discogs/*.php +!storage/plugins/discogs/*.json +!storage/plugins/discogs/*.md # Premium plugin - never track (private/commercial) storage/plugins/scraping-pro/ diff --git a/storage/plugins/discogs/DiscogsPlugin.php b/storage/plugins/discogs/DiscogsPlugin.php new file mode 100644 index 00000000..95284807 --- /dev/null +++ b/storage/plugins/discogs/DiscogsPlugin.php @@ -0,0 +1,719 @@ +db = $db; + $this->hookManager = $hookManager; + } + + /** + * Activate the plugin and register all hooks + */ + public function activate(): void + { + Hooks::add('scrape.sources', [$this, 'addDiscogsSource'], 8); + Hooks::add('scrape.fetch.custom', [$this, 'fetchFromDiscogs'], 8); + Hooks::add('scrape.data.modify', [$this, 'enrichWithDiscogsData'], 15); + } + + /** + * Called when plugin is installed via PluginManager + */ + public function onInstall(): void + { + \App\Support\SecureLogger::debug('[Discogs] Plugin installed'); + $this->registerHooks(); + } + + /** + * Called when plugin is activated via PluginManager + */ + public function onActivate(): void + { + $this->registerHooks(); + \App\Support\SecureLogger::debug('[Discogs] Plugin activated'); + } + + /** + * Called when plugin is deactivated via PluginManager + */ + public function onDeactivate(): void + { + $this->deleteHooks(); + \App\Support\SecureLogger::debug('[Discogs] Plugin deactivated'); + } + + /** + * Called when plugin is uninstalled via PluginManager + */ + public function onUninstall(): void + { + $this->deleteHooks(); + \App\Support\SecureLogger::debug('[Discogs] Plugin uninstalled'); + } + + /** + * Set the plugin ID (called by PluginManager after installation) + */ + public function setPluginId(int $pluginId): void + { + $this->pluginId = $pluginId; + $this->ensureHooksRegistered(); + } + + /** + * Register hooks in the database for persistence + */ + private function registerHooks(): void + { + if ($this->db === null || $this->pluginId === null) { + \App\Support\SecureLogger::warning('[Discogs] Cannot register hooks: missing DB or plugin ID'); + return; + } + + $hooks = [ + ['scrape.sources', 'addDiscogsSource', 8], + ['scrape.fetch.custom', 'fetchFromDiscogs', 8], + ['scrape.data.modify', 'enrichWithDiscogsData', 15], + ]; + + // Delete existing hooks for this plugin + $this->deleteHooks(); + + foreach ($hooks as [$hookName, $method, $priority]) { + $stmt = $this->db->prepare( + "INSERT INTO plugin_hooks (plugin_id, hook_name, callback_class, callback_method, priority, is_active, created_at) + VALUES (?, ?, ?, ?, ?, 1, NOW())" + ); + + if ($stmt === false) { + \App\Support\SecureLogger::error("[Discogs] Failed to prepare statement: " . $this->db->error); + continue; + } + + $callbackClass = 'DiscogsPlugin'; + $stmt->bind_param('isssi', $this->pluginId, $hookName, $callbackClass, $method, $priority); + + if (!$stmt->execute()) { + \App\Support\SecureLogger::error("[Discogs] Failed to register hook {$hookName}: " . $stmt->error); + } + + $stmt->close(); + } + + \App\Support\SecureLogger::debug('[Discogs] Hooks registered'); + } + + /** + * Ensure hooks are registered in the database + */ + private function ensureHooksRegistered(): void + { + if ($this->db === null || $this->pluginId === null) { + return; + } + + $stmt = $this->db->prepare("SELECT COUNT(*) AS total FROM plugin_hooks WHERE plugin_id = ?"); + if ($stmt === false) { + return; + } + + $stmt->bind_param('i', $this->pluginId); + + if ($stmt->execute()) { + $result = $stmt->get_result(); + $row = $result ? $result->fetch_assoc() : null; + if ((int)($row['total'] ?? 0) === 0) { + $this->registerHooks(); + } + } + + $stmt->close(); + } + + /** + * Delete all hooks for this plugin + */ + private function deleteHooks(): void + { + if ($this->db === null || $this->pluginId === null) { + return; + } + + $stmt = $this->db->prepare("DELETE FROM plugin_hooks WHERE plugin_id = ?"); + if ($stmt) { + $stmt->bind_param('i', $this->pluginId); + $stmt->execute(); + $stmt->close(); + } + } + + // ─── Scraping Hooks ───────────────────────────────────────────────── + + /** + * Add Discogs as a scraping source + * + * @param array $sources Existing sources + * @param string $isbn ISBN/EAN being scraped + * @return array Modified sources + */ + public function addDiscogsSource(array $sources, string $isbn): array + { + $sources['discogs'] = [ + 'name' => 'Discogs', + 'url_pattern' => self::API_BASE . '/database/search?barcode={isbn}&type=release', + 'enabled' => true, + 'priority' => 8, + 'fields' => ['title', 'authors', 'publisher', 'year', 'description', 'image', 'format'], + ]; + + return $sources; + } + + /** + * Fetch music metadata from Discogs API + * + * Search strategy: + * 1. Barcode search (EAN/UPC) + * 2. Query search as fallback + * 3. Fetch full release details + * + * @param mixed $currentResult Previous accumulated result from other plugins + * @param array $sources Available sources + * @param string $isbn ISBN/EAN/barcode to search + * @return array|null Merged data or previous result + */ + public function fetchFromDiscogs($currentResult, array $sources, string $isbn): ?array + { + // Only proceed if Discogs source is enabled + if (!isset($sources['discogs']) || !$sources['discogs']['enabled']) { + return $currentResult; + } + + // If a higher-priority plugin already fetched a complete result, skip + if (is_array($currentResult) && !empty($currentResult['title']) && ($currentResult['source'] ?? '') !== 'discogs') { + return $currentResult; + } + + try { + $token = $this->getSetting('api_token'); + + // 1. Search by barcode + $searchUrl = self::API_BASE . '/database/search?barcode=' . urlencode($isbn) . '&type=release'; + $searchResult = $this->apiRequest($searchUrl, $token); + + // 2. Fallback: query search + if (empty($searchResult['results'])) { + $searchUrl = self::API_BASE . '/database/search?q=' . urlencode($isbn) . '&type=release'; + $searchResult = $this->apiRequest($searchUrl, $token); + + // Rate limit: pause between API calls + if (!empty($searchResult['results'])) { + usleep(1000000); // 1 second + } + } + + if (empty($searchResult['results'][0])) { + return $currentResult; + } + + $firstResult = $searchResult['results'][0]; + + // 3. Fetch full release details + $releaseId = $firstResult['id'] ?? null; + if ($releaseId === null) { + return $currentResult; + } + + // Rate limit between search and release fetch + usleep(1000000); + + $releaseUrl = self::API_BASE . '/releases/' . $releaseId; + $release = $this->apiRequest($releaseUrl, $token); + + if (empty($release) || empty($release['title'])) { + return $currentResult; + } + + // Map Discogs data to Pinakes format + $discogsData = $this->mapReleaseToPinakes($release, $firstResult, $isbn); + + // Merge with existing data + return $this->mergeBookData($currentResult, $discogsData); + + } catch (\Throwable $e) { + \App\Support\SecureLogger::error('[Discogs] Plugin Error: ' . $e->getMessage()); + return $currentResult; + } + } + + /** + * Enrich existing data with Discogs cover if missing + * + * @param array $data Current payload + * @param string $isbn ISBN/EAN + * @param array $source Source information + * @param array $originalPayload Original payload before modifications + * @return array Enriched payload + */ + public function enrichWithDiscogsData(array $data, string $isbn, array $source, array $originalPayload): array + { + // If data already has an image or didn't come from Discogs, skip + if (!empty($data['image'])) { + return $data; + } + + // Only enrich if the data was sourced from Discogs + if (($data['source'] ?? '') !== 'discogs') { + return $data; + } + + // Try to fetch cover from Discogs using discogs_id + $discogsId = $data['discogs_id'] ?? null; + if ($discogsId === null) { + return $data; + } + + try { + $token = $this->getSetting('api_token'); + $releaseUrl = self::API_BASE . '/releases/' . (int)$discogsId; + $release = $this->apiRequest($releaseUrl, $token); + + if (!empty($release['images'][0]['uri'])) { + $data['image'] = $release['images'][0]['uri']; + $data['cover_url'] = $release['images'][0]['uri']; + } elseif (!empty($release['thumb'])) { + $data['image'] = $release['thumb']; + $data['cover_url'] = $release['thumb']; + } + } catch (\Throwable $e) { + \App\Support\SecureLogger::warning('[Discogs] Cover enrichment error: ' . $e->getMessage()); + } + + return $data; + } + + // ─── Data Mapping ─────────────────────────────────────────────────── + + /** + * Map a Discogs release to Pinakes book data format + * + * @param array $release Full release data from /releases/{id} + * @param array $searchResult Search result entry (has thumb/cover_image) + * @param string $isbn Original barcode/EAN used for search + * @return array Pinakes-formatted data + */ + private function mapReleaseToPinakes(array $release, array $searchResult, string $isbn): array + { + // Extract album title — Discogs format is "Artist - Album Title" + $title = $this->extractAlbumTitle($release['title'] ?? ''); + + // Extract artists + $artists = $this->extractArtists($release['artists'] ?? []); + $firstArtist = $artists[0] ?? ''; + + // Build tracklist description + $description = $this->buildTracklistDescription($release['tracklist'] ?? []); + + // Get cover image: prefer full images (requires auth), fallback to search thumbnails + $coverUrl = null; + if (!empty($release['images'][0]['uri'])) { + $coverUrl = $release['images'][0]['uri']; + } elseif (!empty($searchResult['cover_image'])) { + $coverUrl = $searchResult['cover_image']; + } elseif (!empty($searchResult['thumb'])) { + $coverUrl = $searchResult['thumb']; + } + + // Extract publisher (label) + $publisher = ''; + if (!empty($release['labels'][0]['name'])) { + $publisher = trim($release['labels'][0]['name']); + } + + // Extract series + $series = null; + if (!empty($release['series'][0]['name'])) { + $series = trim($release['series'][0]['name']); + } + + // Map Discogs format to Pinakes format + $format = $this->mapDiscogsFormat($release['formats'] ?? []); + + // Extract first genre + $genre = ''; + if (!empty($release['genres'][0])) { + $genre = trim($release['genres'][0]); + } + + // Year + $year = isset($release['year']) && $release['year'] > 0 + ? (string)$release['year'] + : null; + + return [ + 'title' => $title, + 'author' => $firstArtist, + 'authors' => $artists, + 'description' => $description, + 'image' => $coverUrl, + 'cover_url' => $coverUrl, + 'year' => $year, + 'publisher' => $publisher, + 'series' => $series ?? '', + 'format' => $format, + 'genres' => $genre, + 'isbn10' => null, + 'isbn13' => null, + 'ean' => $isbn, + 'country' => $release['country'] ?? null, + 'source' => 'discogs', + 'discogs_id' => $release['id'] ?? null, + ]; + } + + /** + * Extract album title from Discogs "Artist - Album" format + * + * Discogs returns titles like "Pink Floyd - The Dark Side Of The Moon". + * We want just the album part: "The Dark Side Of The Moon". + * + * @param string $fullTitle Full Discogs title + * @return string Album title only + */ + private function extractAlbumTitle(string $fullTitle): string + { + $fullTitle = trim($fullTitle); + if ($fullTitle === '') { + return ''; + } + + // Split on " - " (with spaces) to separate artist from album + $parts = explode(' - ', $fullTitle, 2); + if (count($parts) === 2) { + $albumPart = trim($parts[1]); + if ($albumPart !== '') { + return $albumPart; + } + } + + // If no separator found or album part is empty, return full title + return $fullTitle; + } + + /** + * Extract artist names from Discogs artists array + * + * @param array $artists Discogs artists array + * @return array Artist name strings + */ + private function extractArtists(array $artists): array + { + $names = []; + foreach ($artists as $artist) { + $name = trim($artist['name'] ?? ''); + if ($name !== '') { + // Discogs appends " (2)" etc. for disambiguation — remove it + $name = (string)preg_replace('/\s*\(\d+\)$/', '', $name); + $names[] = $name; + } + } + return $names; + } + + /** + * Build a tracklist description from Discogs tracklist data + * + * Produces text like: + * Tracklist: + * 1. Speak to Me (1:30) + * 2. Breathe (2:43) + * + * @param array $tracklist Discogs tracklist array + * @return string Formatted tracklist + */ + private function buildTracklistDescription(array $tracklist): string + { + if (empty($tracklist)) { + return ''; + } + + $lines = ['Tracklist:']; + $trackNum = 0; + + foreach ($tracklist as $track) { + $trackTitle = trim($track['title'] ?? ''); + if ($trackTitle === '') { + continue; + } + + // Use the position from Discogs if available, otherwise auto-number + $position = trim($track['position'] ?? ''); + if ($position === '') { + $trackNum++; + $position = (string)$trackNum; + } + + $duration = trim($track['duration'] ?? ''); + if ($duration !== '') { + $lines[] = $position . '. ' . $trackTitle . ' (' . $duration . ')'; + } else { + $lines[] = $position . '. ' . $trackTitle; + } + } + + // Only return if we actually have tracks + if (count($lines) <= 1) { + return ''; + } + + return implode("\n", $lines); + } + + /** + * Map Discogs format names to Pinakes format identifiers + * + * @param array $formats Discogs formats array + * @return string Pinakes format string + */ + private function mapDiscogsFormat(array $formats): string + { + if (empty($formats[0]['name'])) { + return 'altro'; + } + + $discogsFormat = strtolower(trim($formats[0]['name'])); + + $formatMap = [ + 'cd' => 'cd_audio', + 'cdr' => 'cd_audio', + 'cds' => 'cd_audio', + 'sacd' => 'cd_audio', + 'vinyl' => 'vinile', + 'lp' => 'vinile', + 'cassette' => 'audiocassetta', + 'dvd' => 'dvd', + 'blu-ray' => 'blu_ray', + 'file' => 'digitale', + 'all media' => 'altro', + ]; + + foreach ($formatMap as $discogsKey => $pinakesValue) { + if (str_contains($discogsFormat, $discogsKey)) { + return $pinakesValue; + } + } + + return 'altro'; + } + + // ─── API Communication ────────────────────────────────────────────── + + /** + * Make an authenticated request to the Discogs API + * + * Discogs requires: + * - A descriptive User-Agent header (mandatory) + * - Optional: Authorization token for higher rate limits (60/min vs 25/min) + * + * @param string $url Full API URL + * @param string|null $token Optional Discogs personal access token + * @return array|null Decoded JSON response or null on failure + */ + private function apiRequest(string $url, ?string $token = null): ?array + { + $headers = [ + 'Accept: application/vnd.discogs.v2.discogs+json', + ]; + + if ($token !== null && $token !== '') { + $headers[] = 'Authorization: Discogs token=' . $token; + } + + $ch = curl_init(); + curl_setopt_array($ch, [ + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_TIMEOUT => self::TIMEOUT, + CURLOPT_USERAGENT => self::USER_AGENT, + CURLOPT_HTTPHEADER => $headers, + CURLOPT_SSL_VERIFYPEER => true, + ]); + + $response = curl_exec($ch); + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $curlError = curl_error($ch); + curl_close($ch); + + if ($curlError !== '') { + \App\Support\SecureLogger::warning('[Discogs] cURL error: ' . $curlError); + return null; + } + + if ($httpCode !== 200 || !is_string($response) || $response === '') { + if ($httpCode === 429) { + \App\Support\SecureLogger::warning('[Discogs] Rate limit exceeded (HTTP 429)'); + } + return null; + } + + $data = json_decode($response, true); + if (!is_array($data)) { + return null; + } + + return $data; + } + + // ─── Settings ─────────────────────────────────────────────────────── + + /** + * Read a plugin setting from plugin_settings table + * + * Settings are stored with the plugin's ID in the plugin_settings table, + * following the same pattern as OpenLibraryPlugin. + * + * @param string $key Setting key (e.g. 'api_token') + * @return string|null Setting value or null + */ + private function getSetting(string $key): ?string + { + if ($this->db === null) { + return null; + } + + // Resolve plugin ID if not set + $pluginId = $this->pluginId; + if ($pluginId === null) { + $stmt = $this->db->prepare("SELECT id FROM plugins WHERE name = ? LIMIT 1"); + if ($stmt === false) { + return null; + } + $pluginName = 'discogs'; + $stmt->bind_param('s', $pluginName); + $stmt->execute(); + $result = $stmt->get_result(); + if ($result) { + $row = $result->fetch_assoc(); + $pluginId = isset($row['id']) ? (int)$row['id'] : null; + $result->free(); + } + $stmt->close(); + } + + if ($pluginId === null) { + return null; + } + + $stmt = $this->db->prepare( + "SELECT setting_value FROM plugin_settings WHERE plugin_id = ? AND setting_key = ?" + ); + + if ($stmt === false) { + return null; + } + + $stmt->bind_param('is', $pluginId, $key); + $stmt->execute(); + $result = $stmt->get_result(); + $row = $result ? $result->fetch_assoc() : null; + $stmt->close(); + + return $row['setting_value'] ?? null; + } + + /** + * Get public settings info (for admin UI) + * + * @return array Settings map + */ + public function getSettings(): array + { + $token = $this->getSetting('api_token'); + return [ + 'api_token' => $token !== null && $token !== '' ? '********' : '', + ]; + } + + /** + * Get plugin info + * + * @return array Plugin metadata + */ + public function getInfo(): array + { + return [ + 'name' => 'discogs', + 'display_name' => 'Discogs Music Scraper', + 'version' => '1.0.0', + 'description' => 'Integrazione con le API di Discogs per lo scraping di metadati musicali.', + ]; + } + + // ─── Data Merge ───────────────────────────────────────────────────── + + /** + * Merge book data from a new source into existing data + * + * @param array|null $existing Existing accumulated data + * @param array|null $new New data from current source + * @return array|null Merged data + */ + private function mergeBookData(?array $existing, ?array $new): ?array + { + // Use BookDataMerger if available + if (class_exists('\\App\\Support\\BookDataMerger')) { + return \App\Support\BookDataMerger::merge($existing, $new, 'discogs'); + } + + // Fallback: simple merge + if ($new === null || empty($new)) { + return $existing; + } + + if ($existing === null || empty($existing)) { + return $new; + } + + // Fill empty fields in existing data with new data + foreach ($new as $key => $value) { + if (str_starts_with($key, '_')) { + continue; + } + if (!isset($existing[$key]) || $existing[$key] === '' || + (is_array($existing[$key]) && empty($existing[$key]))) { + $existing[$key] = $value; + } + } + + return $existing; + } +} diff --git a/storage/plugins/discogs/README.md b/storage/plugins/discogs/README.md new file mode 100644 index 00000000..22aed055 --- /dev/null +++ b/storage/plugins/discogs/README.md @@ -0,0 +1,82 @@ +# Discogs Music Scraper Plugin + +Plugin per l'integrazione delle API di Discogs nel sistema di scraping di Pinakes, pensato per catalogare supporti musicali (CD, LP, vinili, cassette). + +## Funzionamento + +Il plugin si aggancia al sistema di scraping tramite tre hook: + +- **scrape.sources** (priorita 8) -- Registra Discogs come fonte di scraping +- **scrape.fetch.custom** (priorita 8) -- Esegue la ricerca e il recupero dei metadati +- **scrape.data.modify** (priorita 15) -- Arricchisce i dati con copertine mancanti + +### Strategia di ricerca + +1. Ricerca per barcode (EAN/UPC) -- `GET /database/search?barcode={ean}&type=release` +2. Se nessun risultato, ricerca per query -- `GET /database/search?q={ean}&type=release` +3. Recupero dettagli completi della release -- `GET /releases/{id}` + +## Mappatura dati Discogs -> Pinakes + +| Discogs | Pinakes | Note | +|---------|---------|------| +| Artist | Autore | Rimossa disambiguazione "(2)" ecc. | +| Album title | Titolo | Estratto da formato "Artist - Album" | +| Label | Editore | Prima etichetta | +| Barcode | EAN | Il codice usato per la ricerca | +| Year | Anno | Anno di uscita della release | +| Tracklist | Descrizione | Formattata come "1. Titolo (3:45)" | +| Cover image | Copertina | Immagine primaria o thumbnail | +| Format | Formato | CD -> cd_audio, Vinyl -> vinile, ecc. | +| Genre | Genere | Primo genere della release | +| Series | Serie | Se presente nella release | +| Country | Paese | Paese di pubblicazione | + +### Formati supportati + +| Discogs | Pinakes | +|---------|---------| +| CD, CDr, CDs, SACD | cd_audio | +| Vinyl, LP | vinile | +| Cassette | audiocassetta | +| DVD | dvd | +| Blu-ray | blu_ray | +| File | digitale | +| Altro | altro | + +## Token API (opzionale) + +Senza token le API di Discogs permettono 25 richieste al minuto. Con un token personale il limite sale a 60 richieste al minuto. + +### Come ottenere un token + +1. Accedi a https://www.discogs.com/settings/developers +2. Clicca "Generate new token" +3. Copia il token generato +4. Inseriscilo nelle impostazioni del plugin in Pinakes (chiave: `api_token`) + +**Nota:** le immagini ad alta risoluzione (`images[].uri`) richiedono autenticazione. Senza token il plugin usa le thumbnail dalla ricerca. + +## Installazione + +1. Crea un file ZIP con tutti i file del plugin +2. Vai su **Admin -> Plugin** +3. Clicca **"Carica Plugin"** +4. Seleziona il file ZIP e clicca **"Installa"** +5. Attiva il plugin dalla lista + +## Rate Limiting + +Il plugin rispetta i limiti di Discogs inserendo una pausa di 1 secondo tra le chiamate API consecutive. In caso di errore 429 (rate limit exceeded) la risposta viene registrata nei log. + +## Link utili + +- [Discogs API Documentation](https://www.discogs.com/developers) +- [Discogs Database Search](https://www.discogs.com/developers#page:database,header:database-search) +- [Discogs Release](https://www.discogs.com/developers#page:database,header:database-release) + +## Licenza + +Questo plugin e parte del progetto Pinakes ed e rilasciato sotto la stessa licenza del progetto principale. + +I dati di Discogs sono soggetti ai [termini di utilizzo delle API Discogs](https://www.discogs.com/developers/#page:home,header:home-general-information). diff --git a/storage/plugins/discogs/plugin.json b/storage/plugins/discogs/plugin.json new file mode 100644 index 00000000..c1226d3b --- /dev/null +++ b/storage/plugins/discogs/plugin.json @@ -0,0 +1,57 @@ +{ + "name": "discogs", + "display_name": "Discogs Music Scraper", + "description": "Integrazione con le API di Discogs per lo scraping di metadati musicali (CD, LP, vinili). Cerca per barcode (EAN) o titolo+artista e popola copertina, tracklist, etichetta e anno.", + "version": "1.0.0", + "author": "Fabiodalez", + "author_url": "", + "plugin_url": "https://www.discogs.com", + "main_file": "wrapper.php", + "requires_php": "8.0", + "requires_app": "0.5.0", + "max_app_version": "1.0.0", + "metadata": { + "category": "scraping", + "tags": [ + "api", + "discogs", + "scraping", + "music", + "vinyl", + "cd" + ], + "priority": 8, + "api_endpoints": [ + "https://api.discogs.com/database/search", + "https://api.discogs.com/releases/{id}" + ], + "hooks": [ + { + "name": "scrape.sources", + "callback_method": "addDiscogsSource", + "description": "Adds Discogs as a scraping source for music media", + "priority": 8 + }, + { + "name": "scrape.fetch.custom", + "callback_method": "fetchFromDiscogs", + "description": "Fetches metadata from Discogs API", + "priority": 8 + }, + { + "name": "scrape.data.modify", + "callback_method": "enrichWithDiscogsData", + "description": "Enriches data with Discogs covers and tracklists", + "priority": 15 + } + ], + "features": [ + "Ricerca per barcode (EAN/UPC)", + "Ricerca per titolo/artista", + "Copertine album ad alta risoluzione", + "Tracklist completa nella descrizione", + "Mappatura etichetta su editore", + "Supporto CD, vinile, cassette" + ] + } +} diff --git a/storage/plugins/discogs/wrapper.php b/storage/plugins/discogs/wrapper.php new file mode 100644 index 00000000..f8e7d9d2 --- /dev/null +++ b/storage/plugins/discogs/wrapper.php @@ -0,0 +1,105 @@ +instance = new \App\Plugins\Discogs\DiscogsPlugin($db, $hookManager); + } + + /** + * Activate the plugin + */ + public function activate(): void + { + if (method_exists($this->instance, 'activate')) { + $this->instance->activate(); + } + } + + /** + * Deactivate the plugin (called by PluginManager) + */ + public function onDeactivate(): void + { + if (method_exists($this->instance, 'onDeactivate')) { + $this->instance->onDeactivate(); + } + \App\Support\SecureLogger::debug('[Discogs] Plugin deactivated'); + } + + /** + * Called when plugin is installed (by PluginManager) + */ + public function onInstall(): void + { + if (method_exists($this->instance, 'onInstall')) { + $this->instance->onInstall(); + } + \App\Support\SecureLogger::debug('[Discogs] Plugin installed'); + } + + /** + * Called when plugin is activated (by PluginManager) + */ + public function onActivate(): void + { + if (method_exists($this->instance, 'onActivate')) { + $this->instance->onActivate(); + } elseif (method_exists($this->instance, 'activate')) { + $this->instance->activate(); + } + \App\Support\SecureLogger::debug('[Discogs] Plugin activated'); + } + + /** + * Called when plugin is uninstalled (by PluginManager) + */ + public function onUninstall(): void + { + if (method_exists($this->instance, 'onUninstall')) { + $this->instance->onUninstall(); + } + \App\Support\SecureLogger::debug('[Discogs] Plugin uninstalled'); + } + + /** + * Set the plugin ID (called by PluginManager after installation) + */ + public function setPluginId(int $pluginId): void + { + $this->instance->setPluginId($pluginId); + } + + /** + * Forward all method calls to the namespaced instance + */ + public function __call($method, $args) + { + if (method_exists($this->instance, $method)) { + return call_user_func_array([$this->instance, $method], $args); + } + + throw new \BadMethodCallException("Method {$method} does not exist"); + } + } +} From 32f574a5e1414c0986123b298b3f48aad06d652b Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Mon, 30 Mar 2026 14:57:16 +0200 Subject: [PATCH 02/28] feat: music-aware labels, Discogs settings, CodeRabbit fixes - MediaLabels helper: dynamic field labels based on format (Artista, Etichetta, Tracce for music media) - Frontend book-detail: labels adapt for CD/vinyl/cassette - Admin scheda_libro: labels adapt for music - Discogs plugin settings page with API token input - Rate limiting centralized in apiRequest() (1s auth, 2.5s anon) - Removed unreliable generic q= search fallback - Translations: IT/EN/DE for all music labels --- .gitignore | 2 + app/Controllers/PluginController.php | 13 ++ app/Support/MediaLabels.php | 57 ++++++++ app/Views/frontend/book-detail.php | 15 +- app/Views/libri/scheda_libro.php | 9 +- locale/de_DE.json | 9 ++ locale/en_US.json | 9 ++ storage/plugins/discogs/DiscogsPlugin.php | 113 ++++++++++++--- storage/plugins/discogs/views/settings.php | 157 +++++++++++++++++++++ 9 files changed, 359 insertions(+), 25 deletions(-) create mode 100644 app/Support/MediaLabels.php create mode 100644 storage/plugins/discogs/views/settings.php diff --git a/.gitignore b/.gitignore index bbea1256..0f5cc3b8 100644 --- a/.gitignore +++ b/.gitignore @@ -143,6 +143,8 @@ storage/plugins/discogs/* !storage/plugins/discogs/*.php !storage/plugins/discogs/*.json !storage/plugins/discogs/*.md +!storage/plugins/discogs/views/ +!storage/plugins/discogs/views/*.php # Premium plugin - never track (private/commercial) storage/plugins/scraping-pro/ diff --git a/app/Controllers/PluginController.php b/app/Controllers/PluginController.php index 98620e0c..39e445ca 100644 --- a/app/Controllers/PluginController.php +++ b/app/Controllers/PluginController.php @@ -391,6 +391,19 @@ public function updateSettings(Request $request, Response $response, array $args 'message' => __('Impostazioni GoodLib salvate correttamente.'), 'data' => $normalizedDomains, ])); + } elseif ($plugin['name'] === 'discogs') { + // Discogs: personal access token + $apiToken = trim((string) ($settings['api_token'] ?? '')); + + $this->pluginManager->setSetting($pluginId, 'api_token', $apiToken, true); + + $response->getBody()->write(json_encode([ + 'success' => true, + 'message' => __('Impostazioni Discogs salvate correttamente.'), + 'data' => [ + 'has_token' => $apiToken !== '' + ] + ])); } else { // Plugin not supported error_log('[PluginController] Plugin does not support settings: ' . $plugin['name']); diff --git a/app/Support/MediaLabels.php b/app/Support/MediaLabels.php new file mode 100644 index 00000000..55594d2b --- /dev/null +++ b/app/Support/MediaLabels.php @@ -0,0 +1,57 @@ + */ + private static array $musicFormats = [ + 'cd_audio', 'vinile', 'cassetta', 'vinyl', 'lp', 'cd', 'cassette', 'audio', 'musik', 'music' + ]; + + /** + * Check if a format string indicates music media. + */ + public static function isMusic(?string $formato): bool + { + if ($formato === null || $formato === '') { + return false; + } + $lower = strtolower(trim($formato)); + foreach (self::$musicFormats as $musicFormat) { + if (str_contains($lower, $musicFormat)) { + return true; + } + } + return false; + } + + /** + * Get the appropriate label for a field based on format. + * Returns the music label if format is music, otherwise the default. + */ + public static function label(string $field, ?string $formato = null): string + { + $isMusic = self::isMusic($formato); + + return match ($field) { + 'autore', 'author' => $isMusic ? __('Artista') : __('Autore'), + 'autori', 'authors' => $isMusic ? __('Artisti') : __('Autori'), + 'editore', 'publisher' => $isMusic ? __('Etichetta') : __('Editore'), + 'anno_pubblicazione', 'year' => $isMusic ? __('Anno di Uscita') : __('Anno di Pubblicazione'), + 'numero_pagine', 'pages' => $isMusic ? __('Tracce') : __('Numero di Pagine'), + 'isbn13' => $isMusic ? __('Barcode') : 'ISBN-13', + 'ean' => $isMusic ? __('Barcode') : 'EAN', + 'descrizione', 'description' => $isMusic ? __('Tracklist') : __('Descrizione'), + 'collana', 'series' => $isMusic ? __('Discografia') : __('Collana'), + 'formato', 'format' => __('Formato'), + default => __($field), + }; + } +} diff --git a/app/Views/frontend/book-detail.php b/app/Views/frontend/book-detail.php index ddeceda7..aa3aac6f 100644 --- a/app/Views/frontend/book-detail.php +++ b/app/Views/frontend/book-detail.php @@ -24,6 +24,9 @@ // Check if catalogue-only mode is enabled (hides loans, reservations, wishlist) $isCatalogueMode = ConfigStore::isCatalogueMode(); +// Detect music media for dynamic labels +$isMusic = \App\Support\MediaLabels::isMusic($book['formato'] ?? null); + // SEO ottimizzato $bookTitle = html_entity_decode($book['titolo'] ?? '', ENT_QUOTES, 'UTF-8'); $bookAuthor = !empty($authors) ? html_entity_decode($authors[0]['nome'] ?? '', ENT_QUOTES, 'UTF-8') : ''; @@ -1695,12 +1698,12 @@ class="book-cover-large img-fluid"
-
ISBN-13
+
- +
ISBN-10
@@ -1745,7 +1748,7 @@ class="book-cover-large img-fluid"
-
+
@@ -1759,7 +1762,7 @@ class="book-cover-large img-fluid"
-
+
@@ -2054,7 +2057,7 @@ class="badge bg-light text-dark border px-3 py-2 text-decoration-none keyword-ch
-
+
@@ -2173,7 +2176,7 @@ class="related-book-image"> - +

- - + +

-
+ +
+ +
+

@@ -1770,7 +1774,7 @@ class="book-cover-large img-fluid"
-
+
diff --git a/app/Views/libri/scheda_libro.php b/app/Views/libri/scheda_libro.php index 04d3ab24..08187a74 100644 --- a/app/Views/libri/scheda_libro.php +++ b/app/Views/libri/scheda_libro.php @@ -376,7 +376,7 @@ class="text-gray-700 hover:text-gray-900 hover:underline transition-colors">
-
+
diff --git a/locale/de_DE.json b/locale/de_DE.json index 26ebc919..6bc1517f 100644 --- a/locale/de_DE.json +++ b/locale/de_DE.json @@ -3514,6 +3514,17 @@ "Opera \"%s\" creata con %d volumi": "Werk \"%s\" erstellt mit %d Bänden", "Errore nella creazione dell'opera": "Fehler beim Erstellen des Werks", "Aggiungi volume": "Band hinzufügen", + "Cartaceo": "Taschenbuch", + "eBook": "eBook", + "Audiolibro": "Hörbuch", + "CD Audio": "Audio-CD", + "Vinile": "Schallplatte", + "LP": "LP", + "Cassetta": "Kassette", + "DVD": "DVD", + "Blu-ray": "Blu-ray", + "Digitale": "Digital", + "Altro": "Sonstiges", "Cerca libro": "Buch suchen", "Titolo o ISBN...": "Titel oder ISBN...", "Numero volume": "Bandnummer", diff --git a/locale/en_US.json b/locale/en_US.json index 2559081b..f3848d5c 100644 --- a/locale/en_US.json +++ b/locale/en_US.json @@ -2835,6 +2835,17 @@ "Opera \"%s\" creata con %d volumi": "Work \"%s\" created with %d volumes", "Errore nella creazione dell'opera": "Error creating the work", "Aggiungi volume": "Add volume", + "Cartaceo": "Paperback", + "eBook": "eBook", + "Audiolibro": "Audiobook", + "CD Audio": "Audio CD", + "Vinile": "Vinyl", + "LP": "LP", + "Cassetta": "Cassette", + "DVD": "DVD", + "Blu-ray": "Blu-ray", + "Digitale": "Digital", + "Altro": "Other", "Cerca libro": "Search for a book", "Titolo o ISBN...": "Title or ISBN...", "Numero volume": "Volume number", diff --git a/storage/plugins/discogs/DiscogsPlugin.php b/storage/plugins/discogs/DiscogsPlugin.php index 3e5c5b76..cf16e319 100644 --- a/storage/plugins/discogs/DiscogsPlugin.php +++ b/storage/plugins/discogs/DiscogsPlugin.php @@ -451,36 +451,25 @@ private function buildTracklistDescription(array $tracklist): string return ''; } - $lines = ['Tracklist:']; - $trackNum = 0; - + $items = []; foreach ($tracklist as $track) { $trackTitle = trim($track['title'] ?? ''); if ($trackTitle === '') { continue; } - - // Use the position from Discogs if available, otherwise auto-number - $position = trim($track['position'] ?? ''); - if ($position === '') { - $trackNum++; - $position = (string)$trackNum; - } - $duration = trim($track['duration'] ?? ''); + $text = htmlspecialchars($trackTitle, ENT_QUOTES, 'UTF-8'); if ($duration !== '') { - $lines[] = $position . '. ' . $trackTitle . ' (' . $duration . ')'; - } else { - $lines[] = $position . '. ' . $trackTitle; + $text .= ' (' . htmlspecialchars($duration, ENT_QUOTES, 'UTF-8') . ')'; } + $items[] = $text; } - // Only return if we actually have tracks - if (count($lines) <= 1) { + if (empty($items)) { return ''; } - return implode("\n", $lines); + return '
    ' . implode('', array_map(static fn(string $item): string => '
  1. ' . $item . '
  2. ', $items)) . '
'; } /** From f1786b084e5cbd99f6a702da24a2f0872103107c Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Mon, 30 Mar 2026 17:01:26 +0200 Subject: [PATCH 08/28] feat: add tipo_media column for media type filtering (#87) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Database: - New ENUM column tipo_media (libro/disco/audiolibro/dvd/altro) - Migration auto-populates from existing formato values - Index idx_libri_tipo_media for efficient filtering Backend: - MediaLabels: allTypes(), icon(), schemaOrgType(), inferTipoMedia() - All 7 controllers updated: filter, import/export, scraping - BookRepository: hasColumn guard for backward compat - Discogs plugin auto-sets tipo_media='disco' Admin UI: - Book form: tipo_media dropdown selector - Book list: icon column + filter dropdown - Book detail: media type badge Frontend: - Catalog: tipo_media filter in sidebar - Book detail: Schema.org dynamic type (Book/MusicAlbum/Audiobook/Movie) - Catalog grid: media type badge on non-book cards - Format display names: cd_audio → "CD Audio" (translated) Translations: IT/EN/DE for all media types and labels --- app/Controllers/CsvImportController.php | 15 +- app/Controllers/FrontendController.php | 7 + .../LibraryThingImportController.php | 19 +- app/Controllers/LibriApiController.php | 6 + app/Controllers/LibriController.php | 4 + app/Controllers/PublicApiController.php | 2 + app/Controllers/ScrapeController.php | 10 + app/Models/BookRepository.php | 13 +- app/Support/MediaLabels.php | 66 +- app/Views/frontend/book-detail.php | 19 +- app/Views/frontend/catalog-grid.php | 24 + app/Views/frontend/catalog.php | 28 + app/Views/libri/index.php | 38 +- app/Views/libri/partials/book_form.php | 21 + app/Views/libri/scheda_libro.php | 12 +- .../database/migrations/migrate_0.5.4.sql | 38 + installer/database/schema.sql | 2 + locale/de_DE.json | 8384 +++++++++-------- locale/en_US.json | 8384 +++++++++-------- locale/it_IT.json | 286 +- storage/plugins/discogs/DiscogsPlugin.php | 1 + test-results/.last-run.json | 4 + 22 files changed, 8834 insertions(+), 8549 deletions(-) create mode 100644 installer/database/migrations/migrate_0.5.4.sql create mode 100644 test-results/.last-run.json diff --git a/app/Controllers/CsvImportController.php b/app/Controllers/CsvImportController.php index 4b3625f1..1d00e798 100644 --- a/app/Controllers/CsvImportController.php +++ b/app/Controllers/CsvImportController.php @@ -770,6 +770,7 @@ private function parseCsvRow(array $row): array 'genere' => !empty($row['genere']) ? trim($row['genere']) : null, 'descrizione' => !empty($row['descrizione']) ? trim($row['descrizione']) : null, 'formato' => !empty($row['formato']) ? trim($row['formato']) : 'cartaceo', + 'tipo_media' => !empty($row['tipo_media']) ? trim($row['tipo_media']) : \App\Support\MediaLabels::inferTipoMedia($row['formato'] ?? ''), 'prezzo' => $this->validatePrice($row['prezzo'] ?? ''), 'copie_totali' => !empty($row['copie_totali']) ? (int)$row['copie_totali'] : 1, 'collana' => !empty($row['collana']) ? trim($row['collana']) : null, @@ -1022,6 +1023,7 @@ private function mapColumnHeaders(array $headers): array 'genere' => ['genere', 'genre', 'género', 'category', 'categoria'], 'descrizione' => ['descrizione', 'description', 'descripción', 'summary', 'riassunto', 'abstract'], 'formato' => ['formato', 'format', 'media', 'binding', 'physical description'], + 'tipo_media' => ['tipo_media', 'media_type', 'type', 'medientyp'], 'prezzo' => ['prezzo', 'price', 'precio', 'prix', 'preis', 'list price', 'purchase price'], 'copie_totali' => ['copie_totali', 'copie', 'copies', 'quantity', 'quantità', 'cantidad'], 'collana' => ['collana', 'series', 'collection', 'collections', 'colección', 'reihe'], @@ -1238,6 +1240,7 @@ private function updateBook(\mysqli $db, int $bookId, array $data, ?int $editorI genere_id = ?, descrizione = ?, formato = ?, + tipo_media = ?, prezzo = ?, editore_id = ?, collana = ?, @@ -1261,6 +1264,7 @@ classificazione_dewey = ?, $pagine = !empty($data['numero_pagine']) ? (int) $data['numero_pagine'] : null; $descrizione = !empty($data['descrizione']) ? $data['descrizione'] : null; $formato = !empty($data['formato']) ? $data['formato'] : 'cartaceo'; + $tipoMedia = !empty($data['tipo_media']) ? $data['tipo_media'] : \App\Support\MediaLabels::inferTipoMedia($formato); $prezzo = $data['prezzo'] ?? null; $collana = !empty($data['collana']) ? $data['collana'] : null; $numeroSerie = !empty($data['numero_serie']) ? $data['numero_serie'] : null; @@ -1270,7 +1274,7 @@ classificazione_dewey = ?, $dewey = !empty($data['classificazione_dewey'] ?? null) ? $data['classificazione_dewey'] : null; $stmt->bind_param( - 'sssssissiissdissssssi', + 'sssssissiisssdissssssi', $isbn10, $isbn13, $ean, @@ -1283,6 +1287,7 @@ classificazione_dewey = ?, $genreId, $descrizione, $formato, + $tipoMedia, $prezzo, $editorId, $collana, @@ -1327,13 +1332,13 @@ private function insertBook(\mysqli $db, array $data, ?int $editorId, ?int $genr INSERT INTO libri ( isbn10, isbn13, ean, titolo, sottotitolo, anno_pubblicazione, lingua, edizione, numero_pagine, genere_id, - descrizione, formato, prezzo, copie_totali, copie_disponibili, + descrizione, formato, tipo_media, prezzo, copie_totali, copie_disponibili, editore_id, collana, numero_serie, traduttore, illustratore, parole_chiave, classificazione_dewey, stato, created_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, - ?, ?, ?, ?, ?, + ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'disponibile', NOW() ) @@ -1350,6 +1355,7 @@ classificazione_dewey, stato, created_at $pagine = !empty($data['numero_pagine']) ? (int) $data['numero_pagine'] : null; $descrizione = !empty($data['descrizione']) ? $data['descrizione'] : null; $formato = !empty($data['formato']) ? $data['formato'] : 'cartaceo'; + $tipoMedia = !empty($data['tipo_media']) ? $data['tipo_media'] : \App\Support\MediaLabels::inferTipoMedia($formato); $prezzo = $data['prezzo'] ?? null; $copie = !empty($data['copie_totali']) ? (int) $data['copie_totali'] : 1; // Add bounds checking to prevent DoS attacks @@ -1366,7 +1372,7 @@ classificazione_dewey, stato, created_at $dewey = !empty($data['classificazione_dewey'] ?? null) ? $data['classificazione_dewey'] : null; $stmt->bind_param( - 'sssssissiissdiiissssss', + 'sssssissiisssdiiissssss', $isbn10, $isbn13, $ean, @@ -1379,6 +1385,7 @@ classificazione_dewey, stato, created_at $genreId, $descrizione, $formato, + $tipoMedia, $prezzo, $copie, $copie, diff --git a/app/Controllers/FrontendController.php b/app/Controllers/FrontendController.php index ec2e9b7f..d5b3c81c 100644 --- a/app/Controllers/FrontendController.php +++ b/app/Controllers/FrontendController.php @@ -742,6 +742,7 @@ private function getFilters(array $params): array 'editore' => $params['editore'] ?? '', 'anno_min' => $params['anno_min'] ?? '', 'anno_max' => $params['anno_max'] ?? '', + 'tipo_media' => $params['tipo_media'] ?? '', 'sort' => $params['sort'] ?? 'newest' ]; } @@ -896,6 +897,12 @@ private function buildWhereConditions(array $filters, mysqli $db): array $types .= 'i'; } + if (!empty($filters['tipo_media'])) { + $conditions[] = "l.tipo_media = ?"; + $params[] = $filters['tipo_media']; + $types .= 's'; + } + return [ 'conditions' => $conditions, 'params' => $params, diff --git a/app/Controllers/LibraryThingImportController.php b/app/Controllers/LibraryThingImportController.php index d760c8fc..45b3857d 100644 --- a/app/Controllers/LibraryThingImportController.php +++ b/app/Controllers/LibraryThingImportController.php @@ -911,6 +911,9 @@ private function parseLibraryThingRow(array $data): array } } + // Infer tipo_media from formato + $result['tipo_media'] = \App\Support\MediaLabels::inferTipoMedia($result['formato'] ?? ''); + // Genre/Subjects $result['genere'] = !empty($data['Subjects']) ? trim(explode(',', $data['Subjects'])[0]) : ''; @@ -1282,7 +1285,7 @@ private function updateBook(\mysqli $db, int $bookId, array $data, ?int $editorI UPDATE libri SET isbn10 = ?, isbn13 = ?, ean = ?, titolo = ?, sottotitolo = ?, anno_pubblicazione = ?, lingua = ?, edizione = ?, numero_pagine = ?, - genere_id = ?, descrizione = ?{$descPlainSet}, formato = ?, prezzo = ?, editore_id = ?, + genere_id = ?, descrizione = ?{$descPlainSet}, formato = ?, tipo_media = ?, prezzo = ?, editore_id = ?, collana = ?, numero_serie = ?, traduttore = ?, parole_chiave = ?, classificazione_dewey = ?, peso = ?, dimensioni = ?, data_acquisizione = ?, review = ?, rating = ?, comment = ?, private_comment = ?, @@ -1317,6 +1320,7 @@ classificazione_dewey = ?, peso = ?, dimensioni = ?, data_acquisizione = ?, } $params = array_merge($params, [ !empty($data['formato']) ? $data['formato'] : 'cartaceo', + !empty($data['tipo_media']) ? $data['tipo_media'] : \App\Support\MediaLabels::inferTipoMedia($data['formato'] ?? ''), !empty($data['prezzo']) ? (float) str_replace(',', '.', $data['prezzo']) : null, $editorId, !empty($data['collana']) ? $data['collana'] : null, @@ -1363,7 +1367,7 @@ classificazione_dewey = ?, peso = ?, dimensioni = ?, data_acquisizione = ?, UPDATE libri SET isbn10 = ?, isbn13 = ?, ean = ?, titolo = ?, sottotitolo = ?, anno_pubblicazione = ?, lingua = ?, edizione = ?, numero_pagine = ?, - genere_id = ?, descrizione = ?{$descPlainSet}, formato = ?, prezzo = ?, editore_id = ?, + genere_id = ?, descrizione = ?{$descPlainSet}, formato = ?, tipo_media = ?, prezzo = ?, editore_id = ?, collana = ?, numero_serie = ?, traduttore = ?, parole_chiave = ?, classificazione_dewey = ?, updated_at = NOW() WHERE id = ? AND deleted_at IS NULL @@ -1389,6 +1393,7 @@ classificazione_dewey = ?, updated_at = NOW() } $params = array_merge($params, [ !empty($data['formato']) ? $data['formato'] : 'cartaceo', + !empty($data['tipo_media']) ? $data['tipo_media'] : \App\Support\MediaLabels::inferTipoMedia($data['formato'] ?? ''), !empty($data['prezzo']) ? (float) str_replace(',', '.', $data['prezzo']) : null, $editorId, !empty($data['collana']) ? $data['collana'] : null, @@ -1446,7 +1451,7 @@ private function insertBook(\mysqli $db, array $data, ?int $editorId, ?int $genr $stmt = $db->prepare(" INSERT INTO libri ( isbn10, isbn13, ean, titolo, sottotitolo, anno_pubblicazione, - lingua, edizione, numero_pagine, genere_id, descrizione{$descPlainCol}, formato, + lingua, edizione, numero_pagine, genere_id, descrizione{$descPlainCol}, formato, tipo_media, prezzo, copie_totali, copie_disponibili, editore_id, collana, numero_serie, traduttore, parole_chiave, classificazione_dewey, peso, dimensioni, data_acquisizione, @@ -1460,7 +1465,7 @@ private function insertBook(\mysqli $db, array $data, ?int $editorId, ?int $genr value, condition_lt, entry_date, stato, created_at ) VALUES ( - ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?{$descPlainVal}, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, + ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?{$descPlainVal}, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, @@ -1494,6 +1499,7 @@ private function insertBook(\mysqli $db, array $data, ?int $editorId, ?int $genr } $params = array_merge($params, [ !empty($data['formato']) ? $data['formato'] : 'cartaceo', + !empty($data['tipo_media']) ? $data['tipo_media'] : \App\Support\MediaLabels::inferTipoMedia($data['formato'] ?? ''), !empty($data['prezzo']) ? (float) str_replace(',', '.', $data['prezzo']) : null, $copie, $copie, @@ -1540,12 +1546,12 @@ private function insertBook(\mysqli $db, array $data, ?int $editorId, ?int $genr $stmt = $db->prepare(" INSERT INTO libri ( isbn10, isbn13, ean, titolo, sottotitolo, anno_pubblicazione, - lingua, edizione, numero_pagine, genere_id, descrizione{$descPlainCol}, formato, + lingua, edizione, numero_pagine, genere_id, descrizione{$descPlainCol}, formato, tipo_media, prezzo, copie_totali, copie_disponibili, editore_id, collana, numero_serie, traduttore, parole_chiave, classificazione_dewey, stato, created_at ) VALUES ( - ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?{$descPlainVal}, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'disponibile', NOW() + ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?{$descPlainVal}, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'disponibile', NOW() ) "); @@ -1569,6 +1575,7 @@ private function insertBook(\mysqli $db, array $data, ?int $editorId, ?int $genr } $params = array_merge($params, [ !empty($data['formato']) ? $data['formato'] : 'cartaceo', + !empty($data['tipo_media']) ? $data['tipo_media'] : \App\Support\MediaLabels::inferTipoMedia($data['formato'] ?? ''), !empty($data['prezzo']) ? (float) str_replace(',', '.', $data['prezzo']) : null, $copie, $copie, diff --git a/app/Controllers/LibriApiController.php b/app/Controllers/LibriApiController.php index e15a1c65..2c1e119b 100644 --- a/app/Controllers/LibriApiController.php +++ b/app/Controllers/LibriApiController.php @@ -32,6 +32,7 @@ public function list(Request $request, Response $response, mysqli $db): Response $anno_from = trim((string) ($q['anno_from'] ?? '')); $anno_to = trim((string) ($q['anno_to'] ?? '')); $collana = trim((string) ($q['collana'] ?? '')); + $tipo_media = trim((string) ($q['tipo_media'] ?? '')); // Build WHERE clause with prepared statement parameters $where = 'WHERE l.deleted_at IS NULL '; @@ -137,6 +138,11 @@ public function list(Request $request, Response $response, mysqli $db): Response $params[] = '%' . $collana . '%'; $types .= 's'; } + if ($tipo_media !== '' && $this->hasColumn($db, 'tipo_media')) { + $where .= " AND l.tipo_media = ?"; + $params[] = $tipo_media; + $types .= 's'; + } // Parse DataTables sorting parameters (with robust null checks to avoid notices) $order = $q['order'][0] ?? null; diff --git a/app/Controllers/LibriController.php b/app/Controllers/LibriController.php index 59d0de22..5ef673ee 100644 --- a/app/Controllers/LibriController.php +++ b/app/Controllers/LibriController.php @@ -649,6 +649,7 @@ public function store(Request $request, Response $response, mysqli $db): Respons 'descrizione' => '', 'parole_chiave' => '', 'formato' => '', + 'tipo_media' => 'libro', 'peso' => null, 'dimensioni' => '', 'prezzo' => null, @@ -1189,6 +1190,7 @@ public function update(Request $request, Response $response, mysqli $db, int $id 'descrizione' => '', 'parole_chiave' => '', 'formato' => '', + 'tipo_media' => 'libro', 'peso' => null, 'dimensioni' => '', 'prezzo' => null, @@ -2998,6 +3000,7 @@ public function exportCsv(Request $request, Response $response, mysqli $db): Res 'numero_pagine', 'genere', 'formato', + 'tipo_media', 'prezzo', 'copie_totali', 'collana', @@ -3035,6 +3038,7 @@ public function exportCsv(Request $request, Response $response, mysqli $db): Res $libro['numero_pagine'] ?? '', $libro['genere_nome'] ?? '', $libro['formato'] ?? '', + $libro['tipo_media'] ?? 'libro', $libro['prezzo'] ?? '', $libro['copie_totali'] ?? '1', $libro['collana'] ?? '', diff --git a/app/Controllers/PublicApiController.php b/app/Controllers/PublicApiController.php index 40fa6114..f81308c1 100644 --- a/app/Controllers/PublicApiController.php +++ b/app/Controllers/PublicApiController.php @@ -114,6 +114,7 @@ private function findBooks(mysqli $db, ?string $ean, ?string $isbn13, ?string $i l.descrizione, l.parole_chiave, l.formato, + l.tipo_media, l.peso, l.dimensioni, l.prezzo, @@ -191,6 +192,7 @@ private function findBooks(mysqli $db, ?string $ean, ?string $isbn13, ?string $i 'descrizione' => $row['descrizione'], 'parole_chiave' => $row['parole_chiave'], 'formato' => $row['formato'], + 'tipo_media' => $row['tipo_media'] ?? 'libro', 'peso' => $row['peso'] !== null ? (float)$row['peso'] : null, 'dimensioni' => $row['dimensioni'], 'prezzo' => $row['prezzo'] !== null ? (float)$row['prezzo'] : null, diff --git a/app/Controllers/ScrapeController.php b/app/Controllers/ScrapeController.php index 1a5d8ebd..8f0e5a73 100644 --- a/app/Controllers/ScrapeController.php +++ b/app/Controllers/ScrapeController.php @@ -148,6 +148,11 @@ public function byIsbn(Request $request, Response $response): Response // Normalize ISBN fields (auto-calculate missing isbn10/isbn13) $payload = $this->normalizeIsbnFields($payload, $cleanIsbn); + // Infer tipo_media from formato/source if not already set + if (!isset($payload['tipo_media'])) { + $payload['tipo_media'] = \App\Support\MediaLabels::inferTipoMedia($payload['format'] ?? $payload['formato'] ?? ''); + } + // Hook: scrape.response - Modify final JSON response $payload = \App\Support\Hooks::apply('scrape.response', $payload, [$cleanIsbn, $sources, ['timestamp' => time()]]); @@ -216,6 +221,11 @@ public function byIsbn(Request $request, Response $response): Response // Normalize ISBN fields (auto-calculate missing isbn10/isbn13) $fallbackData = $this->normalizeIsbnFields($fallbackData, $cleanIsbn); + // Infer tipo_media from formato/source if not already set + if (!isset($fallbackData['tipo_media'])) { + $fallbackData['tipo_media'] = \App\Support\MediaLabels::inferTipoMedia($fallbackData['format'] ?? $fallbackData['formato'] ?? ''); + } + // Ensure plugins can still modify/log the final payload just like regular results $fallbackData = \App\Support\Hooks::apply('scrape.response', $fallbackData, [$cleanIsbn, $sources, ['timestamp' => time()]]); diff --git a/app/Models/BookRepository.php b/app/Models/BookRepository.php index 22262b9b..a064abb6 100644 --- a/app/Models/BookRepository.php +++ b/app/Models/BookRepository.php @@ -300,6 +300,10 @@ public function createBasic(array $data): int if ($this->hasColumn('formato')) { $addField('formato', 's', $data['formato'] ?? null); } + if ($this->hasColumn('tipo_media')) { + $val = $data['tipo_media'] ?? null; + $addField('tipo_media', 's', $this->normalizeEnumValue($val, 'tipo_media', 'libro')); + } if ($this->hasColumn('peso')) { $addField('peso', 'd', $peso); } @@ -639,6 +643,10 @@ public function updateBasic(int $id, array $data): bool if ($this->hasColumn('formato')) { $addSet('formato', 's', $data['formato'] ?? null); } + if ($this->hasColumn('tipo_media')) { + $val = $data['tipo_media'] ?? null; + $addSet('tipo_media', 's', $this->normalizeEnumValue($val, 'tipo_media', 'libro')); + } if ($this->hasColumn('peso')) { $addSet('peso', 'd', $peso); } @@ -989,7 +997,7 @@ public function delete(int $id): bool public function updateOptionals(int $bookId, array $data): void { $cols = []; - foreach (['numero_pagine', 'ean', 'data_pubblicazione', 'anno_pubblicazione', 'traduttore', 'illustratore', 'curatore', 'collana', 'edizione'] as $c) { + foreach (['numero_pagine', 'ean', 'data_pubblicazione', 'anno_pubblicazione', 'traduttore', 'illustratore', 'curatore', 'collana', 'edizione', 'tipo_media'] as $c) { if ($this->hasColumn($c) && array_key_exists($c, $data) && $data[$c] !== '' && $data[$c] !== null) { if ($c === 'numero_pagine') { $validated = filter_var($data[$c], FILTER_VALIDATE_INT, ['options' => ['min_range' => 1]]); @@ -1044,6 +1052,9 @@ public function updateOptionals(int $bookId, array $data): void if ($this->hasColumn('illustratore') && !isset($cols['illustratore']) && !empty($data['scraped_illustrator'])) { $cols['illustratore'] = \App\Support\AuthorNormalizer::normalize((string) $data['scraped_illustrator']); } + if ($this->hasColumn('tipo_media') && !array_key_exists('tipo_media', $cols) && !empty($data['scraped_tipo_media'])) { + $cols['tipo_media'] = (string) $data['scraped_tipo_media']; + } if (!$cols) return; $set = []; diff --git a/app/Support/MediaLabels.php b/app/Support/MediaLabels.php index ebd724d8..1eb507ee 100644 --- a/app/Support/MediaLabels.php +++ b/app/Support/MediaLabels.php @@ -18,8 +18,11 @@ class MediaLabels /** * Check if a format string indicates music media. */ - public static function isMusic(?string $formato): bool + public static function isMusic(?string $formato, ?string $tipoMedia = null): bool { + if ($tipoMedia === 'disco') { + return true; + } if ($formato === null || $formato === '') { return false; } @@ -113,13 +116,70 @@ public static function formatTracklist(string $text): string return $html; } + /** + * All valid tipo_media values with their metadata. + * @return array + */ + public static function allTypes(): array + { + return [ + 'libro' => ['icon' => 'fa-book', 'schema' => 'Book', 'label' => 'Libro'], + 'disco' => ['icon' => 'fa-compact-disc', 'schema' => 'MusicAlbum', 'label' => 'Disco'], + 'audiolibro' => ['icon' => 'fa-headphones', 'schema' => 'Audiobook', 'label' => 'Audiolibro'], + 'dvd' => ['icon' => 'fa-film', 'schema' => 'Movie', 'label' => 'DVD'], + 'altro' => ['icon' => 'fa-box', 'schema' => 'CreativeWork', 'label' => 'Altro'], + ]; + } + + public static function icon(?string $tipoMedia): string + { + $types = self::allTypes(); + return $types[$tipoMedia ?? 'libro']['icon'] ?? 'fa-book'; + } + + public static function schemaOrgType(?string $tipoMedia): string + { + $types = self::allTypes(); + return $types[$tipoMedia ?? 'libro']['schema'] ?? 'Book'; + } + + public static function tipoMediaDisplayName(?string $tipoMedia): string + { + $types = self::allTypes(); + $label = $types[$tipoMedia ?? 'libro']['label'] ?? 'Libro'; + return __($label); + } + + /** + * Infer tipo_media from formato field (for backward compat / migration). + */ + public static function inferTipoMedia(?string $formato): string + { + if ($formato === null || $formato === '') { + return 'libro'; + } + $lower = strtolower(trim($formato)); + foreach (['cd_audio', 'vinile', 'lp', 'cd', 'vinyl', 'cassetta', 'cassette'] as $m) { + if (str_contains($lower, $m)) { + return 'disco'; + } + } + if (str_contains($lower, 'audiolibro') || str_contains($lower, 'audiobook')) { + return 'audiolibro'; + } + if (str_contains($lower, 'dvd') || str_contains($lower, 'blu-ray') || str_contains($lower, 'blu_ray')) { + return 'dvd'; + } + return 'libro'; + } + /** * Get the appropriate label for a field based on format. * Returns the music label if format is music, otherwise the default. */ - public static function label(string $field, ?string $formato = null): string + public static function label(string $field, ?string $formato = null, ?string $tipoMedia = null): string { - $isMusic = self::isMusic($formato); + $isMusic = self::isMusic($formato, $tipoMedia); return match ($field) { 'autore', 'author' => $isMusic ? __('Artista') : __('Autore'), diff --git a/app/Views/frontend/book-detail.php b/app/Views/frontend/book-detail.php index 0424f0b9..4dbc1151 100644 --- a/app/Views/frontend/book-detail.php +++ b/app/Views/frontend/book-detail.php @@ -25,7 +25,7 @@ $isCatalogueMode = ConfigStore::isCatalogueMode(); // Detect music media for dynamic labels -$isMusic = \App\Support\MediaLabels::isMusic($book['formato'] ?? null); +$isMusic = ($book['tipo_media'] ?? '') === 'disco' || \App\Support\MediaLabels::isMusic($book['formato'] ?? null, $book['tipo_media'] ?? null); // SEO ottimizzato $bookTitle = html_entity_decode($book['titolo'] ?? '', ENT_QUOTES, 'UTF-8'); @@ -158,7 +158,7 @@ // Book Schema.org $bookSchema = [ "@context" => "https://schema.org", - "@type" => "Book", + "@type" => \App\Support\MediaLabels::schemaOrgType($book['tipo_media'] ?? 'libro'), "name" => $bookTitle, "url" => $canonicalUrl, ]; @@ -1525,7 +1525,12 @@ class="book-cover-large img-fluid"

-

+

+ + + + +

@@ -1658,7 +1663,7 @@ class="book-cover-large img-fluid"

- +

@@ -1752,7 +1757,7 @@ class="book-cover-large img-fluid"
-
+
@@ -1766,7 +1771,7 @@ class="book-cover-large img-fluid"
-
+
@@ -2061,7 +2066,7 @@ class="badge bg-light text-dark border px-3 py-2 text-decoration-none keyword-ch
-
+
diff --git a/app/Views/frontend/catalog-grid.php b/app/Views/frontend/catalog-grid.php index d2ba6913..2ec5b411 100644 --- a/app/Views/frontend/catalog-grid.php +++ b/app/Views/frontend/catalog-grid.php @@ -38,6 +38,11 @@ onerror="this.onerror=null;this.src="> + + + + +

@@ -256,4 +261,23 @@ .empty-state .btn-cta { justify-content: center; } + +.book-media-badge { + position: absolute; + top: 0.75rem; + left: 0.75rem; + background: rgba(255, 255, 255, 0.85); + border-radius: 9999px; + padding: 0.375rem; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); + line-height: 1; + display: flex; + align-items: center; + justify-content: center; +} + +.book-media-badge i { + color: var(--text-secondary, #6b7280); + font-size: 0.75rem; +} diff --git a/app/Views/frontend/catalog.php b/app/Views/frontend/catalog.php index 908498a1..ec76c3e2 100644 --- a/app/Views/frontend/catalog.php +++ b/app/Views/frontend/catalog.php @@ -1299,6 +1299,32 @@ class="filter-option count

+ +
+
+ + +
+
+ ['icon' => 'fa-th-large', 'label' => __('Tutti i media')]]; + foreach (\App\Support\MediaLabels::allTypes() as $tmValue => $tmMeta) { + $tipoFilters[$tmValue] = ['icon' => $tmMeta['icon'], 'label' => __($tmMeta['label'])]; + } + foreach ($tipoFilters as $tmValue => $tmInfo): + $isActive = $currentTipo === (string)$tmValue; + ?> + + + + + +
+
+
@@ -1431,6 +1457,7 @@ class="year-slider" 'anno_min' => __('Anno min'), 'anno_max' => __('Anno max'), 'sort' => __('Ordinamento'), + 'tipo_media' => __('Tipo Media'), // Sort labels 'newest' => __('Più recenti'), @@ -1592,6 +1619,7 @@ function updateActiveFiltersDisplay() { anno_min: i18n.anno_min, anno_max: i18n.anno_max, sort: i18n.sort, + tipo_media: i18n.tipo_media, }; const sortLabels = { diff --git a/app/Views/libri/index.php b/app/Views/libri/index.php index d7075a4d..37d46bc1 100644 --- a/app/Views/libri/index.php +++ b/app/Views/libri/index.php @@ -189,6 +189,21 @@ class="w-full px-3 py-2 bg-white border border-gray-300 rounded-lg text-gray-900
+ +
+ + +
+
+
+ + +
@@ -3602,6 +3612,17 @@ function initializeIsbnImport() { } catch (err) { } + // Auto-set tipo_media from scraped data + try { + if (data.tipo_media) { + const tipoMediaSelect = document.getElementById('tipo_media'); + if (tipoMediaSelect) { + tipoMediaSelect.value = data.tipo_media; + } + } + } catch (err) { + } + // Handle series (collana) try { if (data.series) { diff --git a/app/Views/libri/scheda_libro.php b/app/Views/libri/scheda_libro.php index 08187a74..b18da05b 100644 --- a/app/Views/libri/scheda_libro.php +++ b/app/Views/libri/scheda_libro.php @@ -6,7 +6,7 @@ $isCatalogueMode = ConfigStore::isCatalogueMode(); // Detect music media for dynamic labels -$isMusic = \App\Support\MediaLabels::isMusic($libro['formato'] ?? null); +$isMusic = ($libro['tipo_media'] ?? '') === 'disco' || \App\Support\MediaLabels::isMusic($libro['formato'] ?? null, $libro['tipo_media'] ?? null); $status = strtolower((string)($libro['stato'] ?? '')); $statusClasses = [ @@ -69,6 +69,10 @@

+ + + +

@@ -144,7 +148,7 @@ class="max-h-80 object-contain rounded-lg shadow" />
- : + :
@@ -334,7 +338,7 @@ class="text-gray-900 hover:text-gray-600 hover:underline font-semibold">
-
+
@@ -363,7 +367,7 @@ class="text-gray-700 hover:text-gray-900 hover:underline transition-colors">
-
+
diff --git a/installer/database/migrations/migrate_0.5.4.sql b/installer/database/migrations/migrate_0.5.4.sql new file mode 100644 index 00000000..76cb12f7 --- /dev/null +++ b/installer/database/migrations/migrate_0.5.4.sql @@ -0,0 +1,38 @@ +-- Add tipo_media column to libri table +-- FULLY IDEMPOTENT + +SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'libri' + AND COLUMN_NAME = 'tipo_media'); +SET @sql = IF(@col_exists = 0, + "ALTER TABLE libri ADD COLUMN tipo_media ENUM('libro','disco','audiolibro','dvd','altro') NOT NULL DEFAULT 'libro' AFTER formato", + 'SELECT 1'); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +-- Index for filtering +SET @idx_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'libri' + AND INDEX_NAME = 'idx_libri_tipo_media'); +SET @sql = IF(@idx_exists = 0, + 'ALTER TABLE libri ADD INDEX idx_libri_tipo_media (tipo_media)', + 'SELECT 1'); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +-- Auto-populate from existing formato values +UPDATE libri SET tipo_media = 'disco' +WHERE tipo_media = 'libro' + AND LOWER(formato) IN ('cd_audio','vinile','lp','cassetta','vinyl','cd','cassette','audiocassetta'); + +UPDATE libri SET tipo_media = 'audiolibro' +WHERE tipo_media = 'libro' + AND LOWER(formato) IN ('audiolibro','audiobook'); + +UPDATE libri SET tipo_media = 'dvd' +WHERE tipo_media = 'libro' + AND LOWER(formato) IN ('dvd','blu-ray','blu_ray'); diff --git a/installer/database/schema.sql b/installer/database/schema.sql index 465d4948..eb9dc655 100755 --- a/installer/database/schema.sql +++ b/installer/database/schema.sql @@ -368,6 +368,7 @@ CREATE TABLE `libri` ( `private_comment` text COLLATE utf8mb4_unicode_ci COMMENT 'Private comment (LibraryThing)', `parole_chiave` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, `formato` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'cartaceo', + `tipo_media` enum('libro','disco','audiolibro','dvd','altro') NOT NULL DEFAULT 'libro', `peso` float DEFAULT NULL, `dimensioni` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `physical_description` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Physical description (LibraryThing)', @@ -417,6 +418,7 @@ CREATE TABLE `libri` ( KEY `idx_libri_titolo_sottotitolo` (`titolo`,`sottotitolo`), KEY `editore_id` (`editore_id`), KEY `idx_libri_stato` (`stato`), + KEY `idx_libri_tipo_media` (`tipo_media`), KEY `fk_libri_mensola` (`mensola_id`), KEY `idx_libri_scaffale_mensola` (`scaffale_id`,`mensola_id`), KEY `idx_libri_posizione_progressiva` (`posizione_progressiva`), diff --git a/locale/de_DE.json b/locale/de_DE.json index 6bc1517f..d367d3fc 100644 --- a/locale/de_DE.json +++ b/locale/de_DE.json @@ -1,4192 +1,4194 @@ { - "\"%s\" prestato a %s è in ritardo di %d giorni": "\"%s\" ausgeliehen an %s ist %d Tage überfällig", - "$1": "$1", - "$2": "$2", - "%d Indici Mancanti": "%d fehlende Indizes", - "%d Problemi": "%d Probleme", - "%d Tabelle Mancanti": "%d fehlende Tabellen", - "%d autori eliminati": "%d Autoren gelöscht", - "%d copie disponibili su %d": "%d Exemplare von %d verfügbar", - "%d editori eliminati": "%d Verlage gelöscht", - "%d file sensibili protetti": "%d sensible Dateien geschützt", - "%d giorni": "%d Tage", - "%d import logs eliminati (più vecchi di %d giorni)": "%d Importprotokolle gelöscht (älter als %d Tage)", - "%d import registrati": "%d Importe aufgezeichnet", - "%d import registrato": "%d Import aufgezeichnet", - "%d indici creati con successo": "%d Indizes erfolgreich erstellt", - "%d indici mancanti trovati": "%d fehlende Indizes gefunden", - "%d libri eliminati": "%d Bücher gelöscht", - "%d minuti fa": "vor %d Minuten", - "%d minuto fa": "vor %d Minute", - "%d notifica non letta": "%d ungelesene Benachrichtigung", - "%d notifiche non lette": "%d ungelesene Benachrichtigungen", - "%d ora fa": "vor %d Stunde", - "%d ore fa": "vor %d Stunden", - "%d prenotazione attiva": "%d aktive Vormerkung", - "%d prenotazioni attive": "%d aktive Vormerkungen", - "%d prestiti attivi": "%d aktive Ausleihen", - "%d prestiti in ritardo": "%d überfällige Ausleihen", - "%d prestiti passati": "%d vergangene Ausleihen", - "%d prestito attivo": "%d aktive Ausleihe", - "%d prestito in ritardo": "%d überfällige Ausleihe", - "%d prestito passato": "%d vergangene Ausleihe", - "%d problemi rilevati": "%d Probleme erkannt", - "%d recensione": "%d Rezension", - "%d recensioni": "%d Rezensionen", - "%d richiesta in sospeso": "%d ausstehende Anfrage", - "%d richieste in sospeso": "%d ausstehende Anfragen", - "%d tabelle create con successo": "%d Tabellen erfolgreich erstellt", - "%d titoli": "%d Titel", - "%s ha prenotato \"%s\"": "%s hat \"%s\" vorgemerkt", - "%s non è valido": "%s ist ungültig", - "%s è richiesto": "%s ist erforderlich", - "%s è richiesta": "%s ist erforderlich", - "%s deve essere di almeno 8 caratteri": "%s muss mindestens 8 Zeichen lang sein", - "%s non può superare i 72 caratteri": "%s darf nicht länger als 72 Zeichen sein", - "(codici ISO e nomi inglesi accettati)": "(ISO-Codes und englische Namen akzeptiert)", - "(filtrati da _MAX_ libri totali)": "(gefiltert von insgesamt _MAX_ Büchern)", - "(opzionale - URL completo)": "(optional – vollständige URL)", - "(opzionale - max 160 caratteri)": "(optional – max. 160 Zeichen)", - "(opzionale - max 200 caratteri)": "(optional - max. 200 Zeichen)", - "(opzionale - max 60 caratteri)": "(optional – max. 60 Zeichen)", - "(opzionale - max 70 caratteri)": "(optional - max. 70 Zeichen)", - "(opzionale - separate da virgola)": "(optional – kommagetrennt)", - "(opzionale)": "(optional)", - "(percorso legacy)": "(Legacy-Pfad)", - "+ 15 campi aggiuntivi disponibili (vedi CSV di esempio)": "+ 15 zusätzliche Felder verfügbar (siehe Beispiel-CSV)", - "+ Aggiungi da preset...": "+ Aus Vorlage hinzufügen...", - "+39 02 1234567": "+49 30 1234567", - "+39 123 456 7890": "+49 123 456 7890", - ", %d errori": ", %d Fehler", - ", %d libri arricchiti con scraping": ", %d Bücher per Scraping angereichert", - "-- Seleziona --": "-- Auswählen --", - "-- Seleziona un template --": "-- Vorlage auswählen --", - "... e altri %d errori": "... und %d weitere Fehler", - ".env caricato OK": ".env erfolgreich geladen", - "/* Inserisci il tuo codice CSS qui */\n/* Esempio: */\n/* body { font-size: 16px; } */": "/* Geben Sie hier Ihren CSS-Code ein */\n/* Beispiel: */\n/* body { font-size: 16px; } */", - "// Script analytics (es. Google Analytics)\n// Esempio Google Analytics 4:\n// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n// ga('create', 'UA-XXXXX-Y', 'auto');\n// ga('send', 'pageview');": "// Analytics-Skripte (z. B. Google Analytics)\n// Google Analytics 4 Beispiel:\n// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n// ga('create', 'UA-XXXXX-Y', 'auto');\n// ga('send', 'pageview');", - "// Script essenziali (es. chat, accessibility)\n// Esempio:\n// console.log('Essential JS loaded');": "// Essentielle Skripte (z. B. Chat, Barrierefreiheit)\n// Beispiel:\n// console.log('Essential JS loaded');", - "// Script marketing (es. Facebook Pixel)\n// Esempio Facebook Pixel:\n// !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n// n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n// n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n// t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n// document,'script','https://connect.facebook.net/en_US/fbevents.js');\n// fbq('init', 'YOUR_PIXEL_ID');\n// fbq('track', 'PageView');": "// Marketing-Skripte (z. B. Facebook Pixel)\n// Facebook Pixel Beispiel:\n// !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n// n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n// n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n// t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n// document,'script','https://connect.facebook.net/en_US/fbevents.js');\n// fbq('init', 'YOUR_PIXEL_ID');\n// fbq('track', 'PageView');", - "/catalogo": "/catalog", - "0-10 libri": "0–10 Bücher", - "1 copia disponibile su %d": "1 Exemplar von %d verfügbar", - "1 evento": "1 Veranstaltung", - "1. Accesso al server": "1. Serverzugang", - "1. Collegati al server via SSH:": "1. Verbinden Sie sich per SSH mit dem Server:", - "101-500 libri": "101–500 Bücher", - "11-50 libri": "11–50 Bücher", - "2. Aggiungi una delle configurazioni seguenti:": "2. Fügen Sie eine der folgenden Konfigurationen hinzu:", - "2. Vai nella directory dell'applicazione:": "2. Wechseln Sie in das Anwendungsverzeichnis:", - "3. Installa le dipendenze con Composer:": "3. Installieren Sie die Abhängigkeiten mit Composer:", - "4. Verifica che le dipendenze siano state installate:": "4. Überprüfen Sie, ob die Abhängigkeiten installiert wurden:", - "51-100 libri": "51–100 Bücher", - ": attiva per ordinare la colonna in ordine crescente": ": aktivieren, um die Spalte aufsteigend zu sortieren", - ": attiva per ordinare la colonna in ordine decrescente": ": aktivieren, um die Spalte absteigend zu sortieren", - "A": "A", - "AA Testo Grande": "AA Großer Text", - "API": "API", - "API Key": "API-Schlüssel", - "API Key già configurata": "API-Schlüssel bereits konfiguriert", - "API Keys": "API-Schlüssel", - "API Pubblica": "Öffentliche API", - "API abilitata con successo.": "API erfolgreich aktiviert.", - "API configurata": "API konfiguriert", - "API disabilitata con successo.": "API erfolgreich deaktiviert.", - "API key creata con successo.": "API-Schlüssel erfolgreich erstellt.", - "API key eliminata con successo.": "API-Schlüssel erfolgreich gelöscht.", - "APP_CANONICAL_URL configurato con valore non valido: '%s'. Link nelle email potrebbero non funzionare. Valore suggerito: %s": "APP_CANONICAL_URL mit ungültigem Wert konfiguriert: '%s'. E-Mail-Links funktionieren möglicherweise nicht. Empfohlener Wert: %s", - "APP_CANONICAL_URL configurato ma vuoto nel file .env. Link nelle email useranno fallback a HTTP_HOST. Valore suggerito: %s": "APP_CANONICAL_URL konfiguriert, aber leer in der .env-Datei. E-Mail-Links verwenden HTTP_HOST als Fallback. Empfohlener Wert: %s", - "APP_CANONICAL_URL non configurato nel file .env. Link nelle email potrebbero non funzionare correttamente. Valore suggerito: %s": "APP_CANONICAL_URL nicht in der .env-Datei konfiguriert. Links in E-Mails funktionieren möglicherweise nicht korrekt. Empfohlener Wert: %s", - "ATTENZIONE: Disinstallazione Irreversibile": "ACHTUNG: Unwiderrufliche Deinstallation", - "AVVISO Trigger:": "Trigger-WARNUNG:", - "Abilita": "Aktivieren", - "Abilita Client SRU": "SRU-Client aktivieren", - "Abilita Cookie Banner": "Cookie-Banner aktivieren", - "Abilita HSTS": "HSTS aktivieren", - "Abilita Modalità Catalogo": "Katalogmodus aktivieren", - "Abilita Modalità Solo Catalogo": "Reinen Katalogmodus aktivieren", - "Abilita Plugin": "Plugin aktivieren", - "Abilita Server SRU": "SRU-Server aktivieren", - "Abilita o disabilita l'accesso all'API pubblica": "Öffentlichen API-Zugang aktivieren oder deaktivieren", - "Abilitata": "Aktiviert", - "Abilitata - Visibile nel frontend": "Aktiviert – Im Frontend sichtbar", - "Abilitato": "Aktiviert", - "Accedi": "Anmelden", - "Accedi a /installer/?force=1 per forzare una reinstallazione": "Rufen Sie /installer/?force=1 auf, um eine Neuinstallation zu erzwingen", - "Accedi al server tramite SSH e modifica il crontab:": "Greifen Sie per SSH auf den Server zu und bearbeiten Sie den Crontab:", - "Accedi al tuo account": "Melden Sie sich bei Ihrem Konto an", - "Accedi all'area admin con le credenziali sopra indicate": "Melden Sie sich mit den oben angegebenen Zugangsdaten im Adminbereich an", - "Accedi e Procedi": "Anmelden und fortfahren", - "Accedi per Prenotare": "Anmelden zum Vormerken", - "Accedi per aggiungere ai Preferiti": "Melden Sie sich an, um zu den Favoriten hinzuzufügen", - "Accento": "Akzent", - "Accesso": "Anmeldung", - "Accesso Richiesto": "Anmeldung erforderlich", - "Accesso in corso...": "Anmeldung läuft...", - "Accesso negato. Permessi insufficienti.": "Zugriff verweigert. Unzureichende Berechtigungen.", - "Accesso non autorizzato": "Unbefugter Zugriff", - "Accetta selezionati": "Ausgewählte akzeptieren", - "Accetta tutti": "Alle akzeptieren", - "Accetto la": "Ich akzeptiere die", - "Account": "Konto", - "Account In Attesa": "Konto ausstehend", - "Account Sospeso": "Konto gesperrt", - "Account attivato": "Konto aktiviert", - "Account creato con successo! Verifica la tua email.": "Konto erfolgreich erstellt! Überprüfen Sie Ihre E-Mail.", - "Account creato! In attesa di approvazione da parte dell'amministratore.": "Konto erstellt! Warten auf Genehmigung durch den Administrator.", - "Acquisito a": "Erworben um", - "Acquisito da": "Erworben von", - "Acquisto": "Kauf", - "Adesso": "Gerade eben", - "Admin": "Admin", - "Admin Dewey": "Dewey-Verwaltung", - "Aggiorna": "Aktualisieren", - "Aggiorna Dati": "Daten aktualisieren", - "Aggiorna Evento": "Veranstaltung aktualisieren", - "Aggiorna Ora": "Jetzt aktualisieren", - "Aggiorna Statistiche": "Statistiken aktualisieren", - "Aggiorna da ISBN": "Von ISBN aktualisieren", - "Aggiorna i dettagli del libro:": "Buchdetails aktualisieren:", - "Aggiorna i dettagli dell'autore: %s": "Autorendetails aktualisieren: %s", - "Aggiorna i dettagli dell'editore:": "Verlagsdetails aktualisieren:", - "Aggiorna il conteggio delle copie disponibili": "Anzahl der verfügbaren Exemplare aktualisieren", - "Aggiorna le informazioni del profilo selezionato.": "Ausgewählte Profilinformationen aktualisieren.", - "Aggiorna password": "Passwort aktualisieren", - "Aggiornamenti": "Aktualisierungen", - "Aggiornamento alla versione %s completato": "Aktualisierung auf Version %s abgeschlossen", - "Aggiornamento completato con successo": "Aktualisierung erfolgreich abgeschlossen", - "Aggiornamento completato!": "Aktualisierung abgeschlossen!", - "Aggiornamento disponibile!": "Aktualisierung verfügbar!", - "Aggiornamento fallito": "Aktualisierung fehlgeschlagen", - "Aggiornamento già in corso": "Aktualisierung läuft bereits", - "Aggiornamento in corso. Riprova tra qualche minuto.": "Aktualisierung läuft. Bitte versuchen Sie es in einigen Minuten erneut.", - "Aggiornamento in corso...": "Aktualisierung läuft...", - "Aggiornamento...": "Aktualisierung...", - "Aggiornata in base a scaffale, mensola e posizione.": "Aktualisiert basierend auf Regal, Regalboden und Position.", - "Aggiornate %d righe": "%d Zeilen aktualisiert", - "Aggiornati": "Aktualisiert", - "Aggiungere una Nuova Lingua": "Eine neue Sprache hinzufügen", - "Aggiungi": "Hinzufügen", - "Aggiungi Genere Rapido": "Genre schnell hinzufügen", - "Aggiungi Lingua": "Sprache hinzufügen", - "Aggiungi Nuova Lingua": "Neue Sprache hinzufügen", - "Aggiungi Nuovo Autore": "Neuen Autor hinzufügen", - "Aggiungi Nuovo Editore": "Neuen Verlag hinzufügen", - "Aggiungi Nuovo Libro": "Neues Buch hinzufügen", - "Aggiungi Prima Lingua": "Erste Sprache hinzufügen", - "Aggiungi Sottogenere": "Untergenre hinzufügen", - "Aggiungi ai Preferiti": "Zu Favoriten hinzufügen", - "Aggiungi al file .env: APP_CANONICAL_URL=%s": "In der .env-Datei hinzufügen: APP_CANONICAL_URL=%s", - "Aggiungi alla collezione": "Zur Sammlung hinzufügen", - "Aggiungi decimale": "Dezimalstelle hinzufügen", - "Aggiungi eventuali note sul prestito": "Fügen Sie eventuelle Anmerkungen zur Ausleihe hinzu", - "Aggiungi eventuali note...": "Anmerkungen hinzufügen...", - "Aggiungi i libri che ti interessano dalla scheda di dettaglio per ricevere un promemoria quando tornano disponibili.": "Fügen Sie Bücher, die Sie interessieren, über die Detailseite hinzu, um eine Erinnerung zu erhalten, wenn sie wieder verfügbar sind.", - "Aggiungi la tua API key per interrogare Google Books quando importi un ISBN. Google viene utilizzato prima di Open Library, ma dopo Scraping Pro.": "Fügen Sie Ihren API-Schlüssel hinzu, um Google Books bei ISBN-Importen abzufragen. Google wird vor Open Library, aber nach Scraping Pro verwendet.", - "Aggiungi le mensole (livelli) a ogni scaffale": "Fügen Sie jedem Regal Regalböden (Ebenen) hinzu", - "Aggiungi nuovo libro": "Neues Buch hinzufügen", - "Aggiungi primo libro": "Erstes Buch hinzufügen", - "Aggiungi scaffali e mensole per la tua biblioteca": "Fügen Sie Regale und Regalböden für Ihre Bibliothek hinzu", - "Aggiungi un motivo (opzionale)": "Grund hinzufügen (optional)", - "Aggiungi un nuovo titolo per arricchire il catalogo di questo editore.": "Fügen Sie einen neuen Titel hinzu, um den Katalog dieses Verlags zu erweitern.", - "Aggiunti di recente al catalogo": "Kürzlich zum Katalog hinzugefügt", - "Aggiunto il": "Hinzugefügt am", - "Aiuto": "Hilfe", - "Al": "Bis", - "Al momento non ci sono eventi attivi. Continua a seguirci per restare aggiornato sui prossimi appuntamenti.": "Derzeit gibt es keine aktiven Veranstaltungen. Folgen Sie uns weiterhin, um über kommende Termine informiert zu bleiben.", - "Al momento non ci sono eventi programmati. Torna a visitare questa pagina per scoprire i prossimi appuntamenti.": "Derzeit sind keine Veranstaltungen geplant. Besuchen Sie diese Seite erneut, um kommende Termine zu entdecken.", - "Al:": "Bis:", - "Alcune date richieste non sono disponibili": "Einige angeforderte Termine sind nicht verfügbar", - "Alcuni mancanti": "Einige fehlen", - "Alcuni requisiti non sono soddisfatti. Risolvi i problemi prima di continuare.": "Einige Anforderungen sind nicht erfüllt. Beheben Sie die Probleme, bevor Sie fortfahren.", - "Alert prestito in ritardo (Admin)": "Überfällige Ausleihe – Warnung (Admin)", - "Allegato": "Anhang", - "Almeno uno dei seguenti parametri è richiesto:": "Mindestens einer der folgenden Parameter ist erforderlich:", - "Altri eventi in programma": "Weitere geplante Veranstaltungen", - "Altri filtri": "Weitere Filter", - "Altro": "Sonstiges", - "Amministratore": "Administrator", - "Analitici:": "Analyse:", - "Anni di Vita": "Lebensjahre", - "Anno": "Jahr", - "Anno (YYYY)": "Jahr (JJJJ)", - "Anno a": "Jahr bis", - "Anno da": "Jahr von", - "Anno di Pubblicazione": "Erscheinungsjahr", - "Anno di pubblicazione": "Erscheinungsjahr", - "Anno di Uscita": "Erscheinungsjahr", - "Anno max": "Jahr max.", - "Anno min": "Jahr min.", - "Anno numerico (usato per filtri e ordinamento)": "Numerisches Jahr (wird für Filter und Sortierung verwendet)", - "Anno pubblicazione": "Erscheinungsjahr", - "Anno pubblicazione a": "Erscheinungsjahr bis", - "Anno pubblicazione da": "Erscheinungsjahr von", - "Anno:": "Jahr:", - "Annulla": "Abbrechen", - "Annulla Prestito": "Ausleihe stornieren", - "Annulla Prestito Scaduto": "Überfällige Ausleihe stornieren", - "Annulla prenotazione": "Vormerkung stornieren", - "Annullare il prestito scaduto?": "Die überfällige Ausleihe stornieren?", - "Annullare questa prenotazione?": "Diese Vormerkung stornieren?", - "Annullata": "Storniert", - "Annullato": "Storniert", - "Anteprima": "Vorschau", - "Anteprima Banner": "Banner-Vorschau", - "Anteprima copertina": "Covervorschau", - "Anteprima immagine caricata": "Vorschau des hochgeladenen Bildes", - "Anteprima logo": "Logo-Vorschau", - "Anteprima non disponibile": "Vorschau nicht verfügbar", - "Anteprima:": "Vorschau:", - "Apparirà nei risultati di ricerca Google. Se vuoto, usa il titolo hero o il nome dell'app.": "Erscheint in den Google-Suchergebnissen. Wenn leer, wird der Hero-Titel oder der App-Name verwendet.", - "Apparirà sotto il titolo nei risultati di ricerca. Se vuoto, usa il sottotitolo hero o una descrizione generica.": "Erscheint unter dem Titel in den Suchergebnissen. Wenn leer, wird der Hero-Untertitel oder eine allgemeine Beschreibung verwendet.", - "Applica": "Anwenden", - "Applica Filtri": "Filter anwenden", - "Applica Fix": "Fix anwenden", - "Applicazione Già Installata": "Anwendung bereits installiert", - "Applicazione configurata:": "Anwendung konfiguriert:", - "Applicazione del fix...": "Fix wird angewendet...", - "Applicazione già installata": "Anwendung bereits installiert", - "Approva": "Genehmigen", - "Approva Prestiti": "Ausleihen genehmigen", - "Approva Prestito?": "Ausleihe genehmigen?", - "Approva e Invia Email Attivazione": "Genehmigen und Aktivierungs-E-Mail senden", - "Approva o rifiuta le recensioni degli utenti": "Benutzerrezensionen genehmigen oder ablehnen", - "Approva o rifiuta le richieste degli utenti": "Benutzeranfragen genehmigen oder ablehnen", - "Approva prestito?": "Ausleihe genehmigen?", - "Approva recensione": "Rezension genehmigen", - "Approvata": "Genehmigt", - "Approvata il": "Genehmigt am", - "Approvato": "Genehmigt", - "Approvato il %s": "Genehmigt am %s", - "Approvato!": "Genehmigt!", - "Approverai questa richiesta di prestito?": "Möchten Sie diese Ausleihanfrage genehmigen?", - "Apri": "Öffnen", - "Apri Editor": "Editor öffnen", - "Apri Google Cloud Console": "Google Cloud Console öffnen", - "Apri file": "Datei öffnen", - "Apri menu": "Menü öffnen", - "Archivia": "Archivieren", - "Archiviato": "Archiviert", - "Archivio": "Archiv", - "Arricchimento automatico dati": "Automatische Datenanreicherung", - "Arricchisci dati con scraping web (copertine, descrizioni, etc.)": "Daten mit Web-Scraping anreichern (Cover, Beschreibungen usw.)", - "Article (Articolo/Blog)": "Article (Artikel/Blog)", - "Articolo": "Artikel", - "Artista": "Künstler", - "Artista sconosciuto": "Unbekannter Künstler", - "Artisti": "Künstler", - "Ascolta Audiobook": "Hörbuch anhören", - "Ascolta l'audiobook": "Hörbuch anhören", - "Assicurati che corrisponda al tipo di carta per etichette che utilizzi.": "Stellen Sie sicher, dass es mit dem von Ihnen verwendeten Etikettenpapier übereinstimmt.", - "Assicurati che il path assoluto dello script sia corretto": "Stellen Sie sicher, dass der absolute Pfad zum Skript korrekt ist", - "Assicurati che sia configurato correttamente per evitare URL duplicati.": "Stellen Sie sicher, dass die Konfiguration korrekt ist, um doppelte URLs zu vermeiden.", - "At least one search parameter is required (ean, isbn13, isbn10, or author)": "At least one search parameter is required (ean, isbn13, isbn10, or author)", - "Attendere prego": "Bitte warten", - "Attendere prego...": "Bitte warten...", - "Attenzione": "Achtung", - "Attenzione!": "Achtung!", - "Attenzione:": "Achtung:", - "Attenzione: %d prestiti in ritardo": "Achtung: %d überfällige Ausleihen", - "Attenzione: %d prestito in ritardo": "Achtung: %d überfällige Ausleihe", - "Attenzione: Azione Manuale Richiesta": "Achtung: Manueller Eingriff erforderlich", - "Attenzione: Non è stato possibile rimuovere tutte le copie richieste. Alcune copie sono attualmente in prestito.": "Achtung: Es konnten nicht alle angeforderten Exemplare entfernt werden. Einige Exemplare sind derzeit ausgeliehen.", - "Attiva": "Aktiv", - "Attiva Direttamente": "Direkt aktivieren", - "Attiva HTTP Strict Transport Security (max-age: 1 anno, include sottodomini)": "HTTP Strict Transport Security aktivieren (max-age: 1 Jahr, einschließlich Subdomains)", - "Attiva HTTPS solo se hai un certificato SSL valido installato. Attivare HSTS rende permanente il reindirizzamento HTTPS nel browser.": "Aktivieren Sie HTTPS nur, wenn ein gültiges SSL-Zertifikat installiert ist. Die Aktivierung von HSTS macht die HTTPS-Weiterleitung im Browser dauerhaft.", - "Attiva questa opzione solo se il tuo server supporta HTTPS. Se il tuo hosting forza già HTTPS automaticamente, non è necessario abilitarla (potrebbe causare redirect loop).": "Aktivieren Sie diese Option nur, wenn Ihr Server HTTPS unterstützt. Falls Ihr Hosting bereits automatisch HTTPS erzwingt, müssen Sie sie nicht aktivieren (könnte eine Weiterleitungsschleife verursachen).", - "Attivando questa modalità verranno disabilitati completamente i prestiti, le prenotazioni e la wishlist. Gli utenti potranno solo consultare il catalogo.": "Durch Aktivierung dieses Modus werden Ausleihen, Vormerkungen und Wunschliste vollständig deaktiviert. Benutzer können nur den Katalog einsehen.", - "Attivare questo tema?": "Dieses Theme aktivieren?", - "Attivato:": "Aktiviert:", - "Attivi": "Aktiv", - "Attività": "Aktivität", - "Attivo": "Aktiv", - "Attivo:": "Aktiv:", - "Attuale": "Aktuell", - "Attualmente prestati": "Derzeit ausgeliehen", - "Audio": "Audio", - "Audio URL": "Audio-URL", - "Audiobook": "Hörbuch", - "Audiobook (MP3/M4A/OGG)": "Hörbuch (MP3/M4A/OGG)", - "Audiobook caricato!": "Hörbuch hochgeladen!", - "Audiobook disponibile": "Hörbuch verfügbar", - "Aumenta Copie": "Exemplare erhöhen", - "Autenticazione": "Authentifizierung", - "Autenticazione Admin Richiesta": "Admin-Authentifizierung erforderlich", - "Autenticazione Richiesta": "Authentifizierung erforderlich", - "Autenticazione richiesta.": "Authentifizierung erforderlich.", - "Auto": "Auto", - "Auto-attivazione:": "Auto-Aktivierung:", - "Auto-attivazione: Se compili questo campo, il toggle \"Mostra Cookie Analitici\" in Privacy verrà attivato automaticamente.": "Automatische Aktivierung: Wenn Sie dieses Feld ausfüllen, wird der Schalter \"Analyse-Cookies anzeigen\" unter Datenschutz automatisch aktiviert.", - "Auto-attivazione: Se compili questo campo, il toggle \"Mostra Cookie Marketing\" in Privacy verrà attivato automaticamente.": "Automatische Aktivierung: Wenn Sie dieses Feld ausfüllen, wird der Schalter \"Marketing-Cookies anzeigen\" unter Datenschutz automatisch aktiviert.", - "Auto-detect se vuoto": "Automatische Erkennung wenn leer", - "Automatismi": "Automatisierungen", - "Autore": "Autor", - "Autore \"${normalizedLabel}\" pronto per essere creato": "Autor \"${normalizedLabel}\" bereit zur Erstellung", - "Autore \"${normalizedLabel}\" è già selezionato": "Autor \"${normalizedLabel}\" ist bereits ausgewählt", - "Autore \"%s\" pronto per essere creato": "Autor \"%s\" bereit zur Erstellung", - "Autore \"%s\" è già selezionato": "Autor \"%s\" ist bereits ausgewählt", - "Autore A-Z": "Autor A–Z", - "Autore Z-A": "Autor Z–A", - "Autore eliminato con successo.": "Autor erfolgreich gelöscht.", - "Autore non specificato": "Autor nicht angegeben", - "Autore principale": "Hauptautor", - "Autore sconosciuto": "Unbekannter Autor", - "Autore/i:": "Autor(en):", - "Autore:": "Autor:", - "Autori": "Autoren", - "Autori con biografie": "Autoren mit Biografien", - "Autori ed editori vengono creati automaticamente": "Autoren und Verlage werden automatisch erstellt", - "Autori multipli separati da %s": "Mehrere Autoren getrennt durch %s", - "Autori multipli separati da %s o %s": "Mehrere Autoren getrennt durch %s oder %s", - "Autori pubblicati": "Veröffentlichte Autoren", - "Autori uniti": "Autoren zusammengeführt", - "Autori uniti con successo": "Autoren erfolgreich zusammengeführt", - "Autori:": "Autoren:", - "Avanti": "Weiter", - "Avanzate": "Erweitert", - "Avvio aggiornamento": "Aktualisierung wird gestartet", - "Avvio backup database": "Datenbank-Backup wird gestartet", - "Avvisa gli amministratori quando un prestito entra in ritardo.": "Warnt Administratoren, wenn eine Ausleihe überfällig wird.", - "Avvisi scadenza prestiti (configurabile in Impostazioni → Avanzate, default 3 giorni prima)": "Erinnerungen zum Ablauf der Ausleihe (konfigurierbar unter Einstellungen → Erweitert, Standard 3 Tage vorher)", - "Avviso": "Warnung", - "Azione richiesta:": "Erforderliche Aktion:", - "Azioni": "Aktionen", - "Azioni Rapide": "Schnellaktionen", - "Azioni Veloci": "Schnellaktionen", - "Azioni di Approvazione": "Genehmigungsaktionen", - "Azioni di Manutenzione": "Wartungsaktionen", - "Azzera": "Zurücksetzen", - "Backup": "Backup", - "Backup Automatico": "Automatisches Backup", - "Backup Salvati": "Gespeicherte Backups", - "Backup completato": "Backup abgeschlossen", - "Backup creato con successo": "Backup erfolgreich erstellt", - "Backup creato!": "Sicherung erstellt!", - "Backup database completato": "Datenbank-Backup abgeschlossen", - "Backup disponibili": "Verfügbare Backups", - "Backup e Sicurezza": "Backup und Sicherheit", - "Backup eliminato": "Backup gelöscht", - "Backup eliminato con successo": "Sicherung erfolgreich gelöscht", - "Backup fallito": "Backup fehlgeschlagen", - "Backup non trovato": "Backup nicht gefunden", - "Backup non trovato.": "Sicherung nicht gefunden.", - "Backup ripristinato con successo.": "Sicherung erfolgreich wiederhergestellt.", - "Backup tabella": "Tabelle wird gesichert", - "Barcode": "Barcode", - "Barra laterale": "Seitenleiste", - "Benvenuto": "Willkommen", - "Benvenuto nell'Installer": "Willkommen beim Installer", - "Benvenuto, %s!": "Willkommen, %s!", - "Biblioteca": "Bibliothek", - "Biblioteca Digitale": "Digitale Bibliothek", - "Biblioteca Digitale - La tua biblioteca online": "Digitale Bibliothek – Ihre Online-Bibliothek", - "Biblioteca Digitale - Scopri e Prenota i Tuoi Libri Preferiti": "Digitale Bibliothek – Entdecken und reservieren Sie Ihre Lieblingsbücher", - "Biblioteca digitale con catalogo completo di libri disponibili per il prestito": "Digitale Bibliothek mit vollständigem Katalog ausleihbarer Bücher", - "Biografia": "Biografie", - "Biografia dell'autore": "Autorenbiografie", - "Bluesky": "Bluesky", - "Books": "Books", - "Bottone": "Schaltfläche", - "Bottone CTA": "CTA-Schaltfläche", - "Bottone Primario": "Primäre Schaltfläche", - "Breadcrumb": "Breadcrumb", - "Breve descrizione per i motori di ricerca": "Kurzbeschreibung für Suchmaschinen", - "Breve descrizione per i motori di ricerca (max 160 caratteri)": "Kurzbeschreibung für Suchmaschinen (max. 160 Zeichen)", - "Buono": "Gut", - "CAP": "PLZ", - "CMS": "CMS", - "CSRF": "CSRF", - "CSRF Fallito": "CSRF fehlgeschlagen", - "CSRF non valido.": "Ungültiges CSRF-Token.", - "CSS Personalizzato": "Benutzerdefiniertes CSS", - "CSV": "CSV", - "Calendario Disponibilità": "Verfügbarkeitskalender", - "Calendario Prestiti e Prenotazioni": "Kalender für Ausleihen und Vormerkungen", - "Calendario eventi": "Veranstaltungskalender", - "Calendario non disponibile": "Kalender nicht verfügbar", - "Call to Action": "Call to Action", - "Call to Action (CTA)": "Call to Action (CTA)", - "Cambia lingua": "Sprache ändern", - "Cambia password": "Passwort ändern", - "Cambia vista": "Ansicht wechseln", - "Campi Database": "Datenbankfelder", - "Campi Supportati": "Unterstützte Felder", - "Campo": "Feld", - "Campo %s obbligatorio": "Feld %s ist erforderlich", - "Campo Obbligatorio": "Pflichtfeld", - "Campo obbligatorio": "Pflichtfeld", - "Campo obbligatorio mancante: %s": "Fehlendes Pflichtfeld: %s", - "Cancel": "Abbrechen", - "Cancella": "Löschen", - "Cancella filtri": "Filter löschen", - "Cancella tutti i filtri": "Alle Filter löschen", - "Caratteristica": "Eigenschaft", - "Carica": "Hochladen", - "Carica %{smart_count} file": "%{smart_count} Datei hochladen", - "Carica Altri": "Mehr laden", - "Carica File CSV": "CSV-Datei hochladen", - "Carica File JSON": "JSON-Datei hochladen", - "Carica File LibraryThing": "LibraryThing-Datei hochladen", - "Carica Nuovo File JSON": "Neue JSON-Datei hochladen", - "Carica Plugin": "Plugin hochladen", - "Carica il file JSON di traduzione (opzionale)": "Übersetzungs-JSON-Datei hochladen (optional)", - "Carica il file usando l'uploader": "Laden Sie die Datei mit dem Uploader hoch", - "Carica logo (PNG, JPG, SVG)": "Logo hochladen (PNG, JPG, SVG)", - "Carica o collega eBook (PDF/ePub) e audiobook (MP3/M4A) per renderli disponibili agli utenti.": "Laden Sie E-Books (PDF/ePub) und Hörbücher (MP3/M4A) hoch oder verknüpfen Sie diese, um sie den Benutzern zur Verfügung zu stellen.", - "Carica un file CSV per importare più libri contemporaneamente": "Laden Sie eine CSV-Datei hoch, um mehrere Bücher gleichzeitig zu importieren", - "Carica un file ZIP contenente il plugin. Il file deve includere un %s con le informazioni del plugin.": "Laden Sie eine ZIP-Datei mit dem Plugin hoch. Die Datei muss eine %s mit den Plugin-Informationen enthalten.", - "Carica un nuovo file per aggiornare le traduzioni (opzionale). Verrà creato un backup del file precedente.": "Laden Sie eine neue Datei hoch, um die Übersetzungen zu aktualisieren (optional). Ein Backup der vorherigen Datei wird erstellt.", - "Caricamento .env...": ".env wird geladen...", - "Caricamento automatico:": "Automatisches Laden:", - "Caricamento backup...": "Backups werden geladen...", - "Caricamento categorie...": "Kategorien werden geladen...", - "Caricamento completato": "Upload abgeschlossen", - "Caricamento condizionale:": "Bedingtes Laden:", - "Caricamento del logo non riuscito. Verifica le dimensioni e il formato del file.": "Logo-Upload fehlgeschlagen. Überprüfen Sie Dateigröße und Format.", - "Caricamento fallito": "Upload fehlgeschlagen", - "Caricamento file...": "Datei wird hochgeladen...", - "Caricamento in corso...": "Wird hochgeladen...", - "Caricamento libri...": "Bücher werden geladen...", - "Caricamento non riuscito. Riprova.": "Upload fehlgeschlagen. Bitte versuchen Sie es erneut.", - "Caricamento sessioni...": "Sitzungen werden geladen...", - "Caricamento...": "Wird geladen...", - "Caroselli Generi": "Genre-Karussells", - "Casa Editrice": "Verlag", - "Case editrici": "Verlage", - "Catalogo": "Katalog", - "Catalogo Completo Libri - Biblioteca Digitale": "Vollständiger Buchkatalog – Digitale Bibliothek", - "Catalogo Libri": "Buchkatalog", - "Catalogo Libri - Biblioteca": "Buchkatalog – Bibliothek", - "Catalogo libri": "Buchkatalog", - "Català (CA)": "Katalanisch (CA)", - "Categoria": "Kategorie", - "Categorie": "Kategorien", - "Categorie Cookie": "Cookie-Kategorien", - "Centro Impostazioni": "Einstellungscenter", - "Cerca": "Suchen", - "Cerca IP...": "IP suchen...", - "Cerca Libri": "Bücher suchen", - "Cerca Libro": "Buch suchen", - "Cerca Utente": "Benutzer suchen", - "Cerca autore...": "Autor suchen...", - "Cerca autori esistenti o aggiungine di nuovi...": "Vorhandene Autoren suchen oder neue hinzufügen...", - "Cerca codice o nome...": "Code oder Name suchen...", - "Cerca editore esistente o inserisci nuovo...": "Vorhandenen Verlag suchen oder neuen eingeben...", - "Cerca editore...": "Verlag suchen...", - "Cerca email...": "E-Mail suchen...", - "Cerca genere...": "Genre suchen...", - "Cerca icona... (es. user, home, book)": "Symbol suchen... (z. B. user, home, book)", - "Cerca libri, autori, ISBN...": "Bücher, Autoren, ISBN suchen...", - "Cerca libri, autori, editori, utenti...": "Bücher, Autoren, Verlage, Benutzer suchen...", - "Cerca libri, autori, editori...": "Bücher, Autoren, Verlage suchen...", - "Cerca libri, autori...": "Bücher, Autoren suchen...", - "Cerca libri...": "Bücher suchen...", - "Cerca nella biblioteca": "In der Bibliothek suchen", - "Cerca per ISBN-10": "Nach ISBN-10 suchen", - "Cerca per ISBN-13": "Nach ISBN-13 suchen", - "Cerca per codice EAN": "Nach EAN-Code suchen", - "Cerca per nome autore (corrispondenza parziale)": "Nach Autorenname suchen (Teilübereinstimmung)", - "Cerca per nome, cognome, telefono, email o tessera": "Nach Name, Nachname, Telefon, E-Mail oder Ausweis suchen", - "Cerca per nome...": "Nach Name suchen...", - "Cerca per pseudonimo...": "Nach Pseudonym suchen...", - "Cerca per titolo o sottotitolo": "Nach Titel oder Untertitel suchen", - "Cerca per titolo o stato (es. disponibile)": "Nach Titel oder Status suchen (z. B. verfügbar)", - "Cerca per titolo, ISBN o EAN": "Nach Titel, ISBN oder EAN suchen", - "Cerca posizione...": "Standort suchen...", - "Cerca pseudonimo...": "Pseudonym suchen...", - "Cerca rapido...": "Schnellsuche...", - "Cerca testo": "Text suchen", - "Cerca titoli": "Titel suchen", - "Cerca titoli, autori, ISBN...": "Titel, Autoren, ISBN suchen...", - "Cerca...": "Suchen...", - "Cerca:": "Suchen:", - "Certificato SSL/TLS valido": "Gültiges SSL/TLS-Zertifikat", - "Chi Siamo": "Über uns", - "Chiave": "Schlüssel", - "Chiave API Google Books": "Google Books API-Schlüssel", - "Chiave Google Books aggiornata.": "Google Books-Schlüssel aktualisiert.", - "Chiave Google Books rimossa.": "Google Books-Schlüssel entfernt.", - "Chiave Google Books salvata correttamente.": "Google Books-Schlüssel erfolgreich gespeichert.", - "Chiave Route": "Routen-Schlüssel", - "Chiedi al tuo amministratore di database di eseguire i comandi contenuti nel file": "Bitten Sie Ihren Datenbankadministrator, die in der Datei enthaltenen Befehle auszuführen", - "Chiudi": "Schließen", - "Chiudi Player": "Player schließen", - "Chiudi alternative": "Alternativen schließen", - "Chiudi menu": "Menü schließen", - "Citazione": "Zitat", - "Città": "Stadt", - "Classe (000-900)": "Klasse (000–900)", - "Classe principale mancante: %s.": "Fehlende Hauptklasse: %s.", - "Classi principali": "Hauptklassen", - "Classificazione Dewey": "Dewey-Klassifikation", - "Classificazione selezionata:": "Ausgewählte Klassifikation:", - "Clicca o trascina per caricare un logo": "Klicken oder ziehen Sie, um ein Logo hochzuladen", - "Clicca per selezionare": "Zum Auswählen klicken", - "Clicca su \"Esegui Manutenzione\" per correggere automaticamente i problemi riparabili.": "Klicken Sie auf \"Wartung ausführen\", um behebbare Probleme automatisch zu korrigieren.", - "Clicca su 'Aggiungi Lingua'": "Klicken Sie auf 'Sprache hinzufügen'", - "Clicca su \\": "Klicken Sie auf \\", - "Clicca su \\\"Esegui Manutenzione\\\" per correggere automaticamente i problemi riparabili.": "Klicken Sie auf \\\"Wartung ausführen\\\", um behebbare Probleme automatisch zu korrigieren.", - "Clicca su un'icona per selezionarla": "Klicken Sie auf ein Symbol, um es auszuwählen", - "Close menu": "Menü schließen", - "Coda": "Warteschlange", - "Codice": "Code", - "Codice *": "Code *", - "Codice CSS": "CSS-Code", - "Codice CSS da applicare a tutte le pagine del frontend": "CSS-Code, der auf alle Frontend-Seiten angewendet wird", - "Codice Dewey": "Dewey-Code", - "Codice Dewey non trovato": "Dewey-Code nicht gefunden", - "Codice Dewey selezionato:": "Ausgewählter Dewey-Code:", - "Codice Dewey trovato e impostato": "Dewey-Code gefunden und gesetzt", - "Codice Fiscale": "Steuernummer", - "Codice ISBN o EAN": "ISBN- oder EAN-Code", - "Codice ISO 2 lettere (es: IT, FR, GB)": "ISO-2-Buchstaben-Code (z. B. IT, FR, GB)", - "Codice JavaScript": "JavaScript-Code", - "Codice JavaScript Analytics": "Analytics-JavaScript-Code", - "Codice Lingua": "Sprachcode", - "Codice Tessera": "Ausweisnummer", - "Codice Tessera:": "Ausweisnummer:", - "Codice embed completo": "Vollständiger Einbettungscode", - "Codice fiscale": "Steuernummer", - "Codice fiscale dell'editore (opzionale)": "Steuernummer des Verlags (optional)", - "Codice fiscale italiano (opzionale)": "Italienische Steuernummer (optional)", - "Codice parent non trovato.": "Übergeordneter Code nicht gefunden.", - "Codice postale...": "Postleitzahl...", - "Codice scaffale obbligatorio": "Regalcode erforderlich", - "Codice tessera": "Ausweisnummer", - "Cognome": "Nachname", - "Collana": "Reihe", - "Collocazione": "Standort", - "Collocazione calcolata": "Berechneter Standort", - "Collocazione suggerita": "Vorgeschlagener Standort", - "Collocazione:": "Standort:", - "Colonne": "Spalten", - "Colore Bottoni CTA": "CTA-Schaltflächenfarbe", - "Colore Primario": "Primärfarbe", - "Colore Secondario": "Sekundärfarbe", - "Colore Testo Bottoni": "Schaltflächen-Textfarbe", - "Colore non valido": "Ungültige Farbe", - "Colori Tema": "Theme-Farben", - "Colori ripristinati ai valori predefiniti": "Farben auf Standardwerte zurückgesetzt", - "Come Esportare da LibraryThing": "So exportieren Sie aus LibraryThing", - "Come Funziona": "So funktioniert es", - "Come ottenere il codice": "So erhalten Sie den Code", - "Commento": "Kommentar", - "Communication error with the server": "Kommunikationsfehler mit dem Server", - "Compila con i dati dei tuoi libri": "Füllen Sie die Daten Ihrer Bücher aus", - "Compila i dettagli del libro per aggiungerlo alla biblioteca": "Füllen Sie die Buchdetails aus, um es zur Bibliothek hinzuzufügen", - "Compila i dettagli dell'autore per aggiungerlo alla biblioteca": "Füllen Sie die Autorendetails aus, um ihn zur Bibliothek hinzuzufügen", - "Compila i dettagli della casa editrice per aggiungerla alla biblioteca": "Füllen Sie die Verlagsdetails aus, um ihn zur Bibliothek hinzuzufügen", - "Compila nome e URL per tutti i server.": "Füllen Sie Name und URL für alle Server aus.", - "Compila tutti i campi obbligatori prima di salvare.": "Füllen Sie alle Pflichtfelder aus, bevor Sie speichern.", - "Compila tutti i campi obbligatori.": "Füllen Sie alle Pflichtfelder aus.", - "Compila tutti i campi per creare una nuova prenotazione": "Füllen Sie alle Felder aus, um eine neue Vormerkung zu erstellen", - "Compila tutti i campi richiesti": "Füllen Sie alle erforderlichen Felder aus", - "Completamento": "Fertigstellung", - "Completata": "Abgeschlossen", - "Completati": "Abgeschlossen", - "Completato": "Abgeschlossen", - "Completato!": "Abgeschlossen!", - "Complete": "Vollständig", - "Completo": "Vollständig", - "Complimenti!": "Herzlichen Glückwunsch!", - "Componente": "Komponente", - "Con valore 3, un prestito che scade il 15 Gennaio riceverà l'avviso il 12 Gennaio": "Bei Wert 3 erhält eine Ausleihe, die am 15. Januar abläuft, die Benachrichtigung am 12. Januar", - "Condividi": "Teilen", - "Condividi la tua opinione su questo libro...": "Teilen Sie Ihre Meinung zu diesem Buch...", - "Condividi su Facebook": "Auf Facebook teilen", - "Condividi su Twitter": "Auf Twitter teilen", - "Condividi su WhatsApp": "Auf WhatsApp teilen", - "Condiviso": "Geteilt", - "Condizioni": "Bedingungen", - "Conferma": "Bestätigen", - "Conferma Aggiornamento": "Aktualisierung bestätigen", - "Conferma Annullamento": "Stornierung bestätigen", - "Conferma Disinstallazione": "Deinstallation bestätigen", - "Conferma Password": "Passwort bestätigen", - "Conferma Ritiro": "Abholung bestätigen", - "Conferma Salvataggio": "Speichern bestätigen", - "Conferma aggiornamento": "Aktualisierung bestätigen", - "Conferma eliminazione": "Löschung bestätigen", - "Conferma la tua email": "Bestätigen Sie Ihre E-Mail", - "Conferma modifica": "Änderung bestätigen", - "Conferma password": "Passwort bestätigen", - "Conferma restituzione": "Rückgabe bestätigen", - "Confermare il ritiro?": "Abholung bestätigen?", - "Confermi di voler attivare direttamente questo utente senza richiedere verifica email?": "Möchten Sie diesen Benutzer wirklich direkt aktivieren, ohne eine E-Mail-Verifizierung zu verlangen?", - "Confermi di voler attivare direttamente questo utente?": "Sind Sie sicher, dass Sie diesen Benutzer direkt aktivieren möchten?", - "Confermi l'eliminazione dell'editore?": "Verlag wirklich löschen?", - "Confermi l'operazione?": "Vorgang bestätigen?", - "Confermi?": "Bestätigen?", - "Confermo di voler disinstallare il plugin e di aver effettuato un backup dei dati": "Ich bestätige, dass ich das Plugin deinstallieren möchte und eine Datensicherung durchgeführt habe", - "Configura API": "API konfigurieren", - "Configura Google Books": "Google Books konfigurieren", - "Configura Z39.50": "Z39.50 konfigurieren", - "Configura i testi mostrati all'interno del pannello delle preferenze dei cookie.": "Konfigurieren Sie die Texte, die im Cookie-Einstellungen-Panel angezeigt werden.", - "Configura i testi visualizzati agli utenti in ogni parte del cookie banner.": "Konfigurieren Sie die Texte, die den Benutzern in jedem Teil des Cookie-Banners angezeigt werden.", - "Configura i testi visualizzati agli utenti nel banner iniziale.": "Konfigurieren Sie die Texte, die den Benutzern im anfänglichen Banner angezeigt werden.", - "Configura l'identità dell'applicazione, i metodi di invio email e personalizza i template delle notifiche automatiche.": "Konfigurieren Sie die Anwendungsidentität, E-Mail-Versandmethoden und passen Sie die Vorlagen für automatische Benachrichtigungen an.", - "Configura le date della prenotazione": "Vormerkungsdaten konfigurieren", - "Configura le impostazioni di sicurezza per le connessioni HTTPS": "Sicherheitseinstellungen für HTTPS-Verbindungen konfigurieren", - "Configura le impostazioni email per l'invio di notifiche agli utenti.": "Konfigurieren Sie die E-Mail-Einstellungen für den Versand von Benachrichtigungen an Benutzer.", - "Configura le impostazioni rimanenti (privacy, contatti, etc.)": "Konfigurieren Sie die verbleibenden Einstellungen (Datenschutz, Kontakte usw.)", - "Configura quando inviare l'avviso di scadenza prestiti agli utenti": "Konfigurieren Sie, wann die Fälligkeitserinnerung für Ausleihen an die Benutzer gesendet werden soll", - "Configurazione": "Konfiguration", - "Configurazione Cron Job": "Cron-Job-Konfiguration", - "Configurazione Database": "Datenbank-Konfiguration", - "Configurazione Email": "E-Mail-Konfiguration", - "Configurazione Etichette Libri": "Buchetiketten-Konfiguration", - "Configurazione SMTP": "SMTP-Konfiguration", - "Configurazione aggiornata con successo!": "Konfiguration erfolgreich aktualisiert!", - "Configurazione del banner cookie": "Cookie-Banner-Konfiguration", - "Configurazione guidata in pochi passaggi.": "Geführte Konfiguration in wenigen Schritten.", - "Configurazione invio": "Versandkonfiguration", - "Configurazione sistema": "Systemkonfiguration", - "Confirm?": "Bestätigen?", - "Connessione al database fallita": "Datenbankverbindung fehlgeschlagen", - "Connessione database non disponibile": "Datenbankverbindung nicht verfügbar", - "Connessione fallita": "Verbindung fehlgeschlagen", - "Connesso": "Verbunden", - "Consegna immediata": "Sofortige Übergabe", - "Conserva queste informazioni in un luogo sicuro!": "Bewahren Sie diese Informationen an einem sicheren Ort auf!", - "Consigliato": "Empfohlen", - "Consigliato JPG o PNG ad alta risoluzione (min 1920x1080px). Max 5MB.": "Empfohlen: hochauflösendes JPG oder PNG (min. 1920x1080px). Max. 5MB.", - "Consigliato JPG, PNG o WebP (min 800x600px). Max 5MB.": "Empfohlen: JPG, PNG oder WebP (min. 800x600px). Max. 5MB.", - "Consigliato PNG o SVG con sfondo trasparente. Dimensione massima 2MB.": "Empfohlen: PNG oder SVG mit transparentem Hintergrund. Maximale Größe 2MB.", - "Consigliato: 150-160 caratteri": "Empfohlen: 150-160 Zeichen", - "Consigliato: 50-60 caratteri": "Empfohlen: 50-60 Zeichen", - "Consigliato: PHP mail() per semplicità, SMTP per maggiore controllo": "Empfohlen: PHP mail() für Einfachheit, SMTP für mehr Kontrolle", - "Consigliato: Summary Large Image per homepage.": "Empfohlen: Summary Large Image für die Startseite.", - "Contatta il tuo provider di hosting e chiedi di eseguire": "Kontaktieren Sie Ihren Hosting-Anbieter und bitten Sie ihn, Folgendes auszuführen", - "Contattaci": "Kontaktieren Sie uns", - "Contatti": "Kontakt", - "Contatti e accesso": "Kontakt und Zugang", - "Contenuti Digitali": "Digitale Inhalte", - "Contenuti homepage aggiornati con successo!": "Homepage-Inhalte erfolgreich aktualisiert!", - "Contenuto": "Inhalt", - "Contenuto Cookie Policy": "Cookie-Richtlinie Inhalt", - "Contenuto Pagina": "Seiteninhalt", - "Contenuto Privacy Policy": "Datenschutzrichtlinie Inhalt", - "Contenuto Testuale": "Textinhalt", - "Contenuto della pagina": "Seiteninhalt", - "Contenuto della pagina /cookies accessibile dal banner": "Inhalt der Seite /cookies, erreichbar über das Banner", - "Contenuto pagina": "Seiteninhalt", - "Contenuto testuale HTML con editor avanzato": "HTML-Textinhalt mit erweitertem Editor", - "Continua": "Weiter", - "Contrasto": "Kontrast", - "Contrasto insufficiente tra bottone e testo (minimo 3:1). Attuale": "Unzureichender Kontrast zwischen Schaltfläche und Text (Minimum 3:1). Aktuell", - "Controlla Aggiornamenti": "Auf Updates prüfen", - "Controlla la tua casella di posta e clicca sul link per resettare la password. Il link sarà valido per 2 ore.": "Überprüfen Sie Ihren Posteingang und klicken Sie auf den Link, um Ihr Passwort zurückzusetzen. Der Link ist 2 Stunden gültig.", - "Controllo aggiornamenti": "Suche nach Updates", - "Controllo pre-aggiornamento fallito": "Vorab-Aktualisierungsprüfung fehlgeschlagen", - "Cookie Analitici": "Analyse-Cookies", - "Cookie Banner": "Cookie-Banner", - "Cookie Essenziali": "Essentielle Cookies", - "Cookie di Marketing": "Marketing-Cookies", - "Cookies": "Cookies", - "Copertina": "Cover", - "Copertina Attuale": "Aktuelles Cover", - "Copertina applicata": "Cover übernommen", - "Copertina attuale": "Aktuelles Cover", - "Copertina del Libro": "Buchcover", - "Copertina del libro": "Buchcover", - "Copertina del libro \"%s\"": "Buchcover von \"%s\"", - "Copertina non trovata online:": "Cover online nicht gefunden:", - "Copertina recuperata automaticamente": "Cover automatisch abgerufen", - "Copertina:": "Cover:", - "Copertine già presenti: %s": "Bereits vorhandene Cover: %s", - "Copertine scaricate (LibraryThing):": "Heruntergeladene Cover (LibraryThing):", - "Copertine scaricate:": "Cover abgerufen:", - "Copertine sincronizzate: %s": "Synchronisierte Cover: %s", - "Copia": "Kopieren", - "Copia %d di %d": "Exemplar %d von %d", - "Copia Link": "Link kopieren", - "Copia eliminata con successo.": "Exemplar erfolgreich gelöscht.", - "Copia link negli appunti": "Link in die Zwischenablage kopieren", - "Copia non trovata.": "Exemplar nicht gefunden.", - "Copiato!": "Kopiert!", - "Copie": "Exemplare", - "Copie Aggiunte!": "Exemplare hinzugefügt!", - "Copie Disponibili": "Verfügbare Exemplare", - "Copie Eccessive": "Überschüssige Exemplare", - "Copie Fisiche": "Physische Exemplare", - "Copie Negative": "Negative Exemplare", - "Copie Totali": "Exemplare gesamt", - "Copie disponibili": "Verfügbare Exemplare", - "Copie disponibili:": "Verfügbare Exemplare:", - "Copie totali": "Exemplare gesamt", - "Copie totali:": "Exemplare gesamt:", - "Copyright": "Copyright", - "Corpo Email": "E-Mail-Text", - "Corpo email": "E-Mail-Text", - "Correggi Permessi Automaticamente": "Berechtigungen automatisch korrigieren", - "Correggi Problemi": "Probleme beheben", - "Correggi nel file .env: APP_CANONICAL_URL=%s": "In der .env-Datei korrigieren: APP_CANONICAL_URL=%s", - "Corrente": "Aktuell", - "Correzione Automatica Permessi": "Automatische Berechtigungskorrektur", - "Correzione Manuale via SSH (se automatica fallisce)": "Manuelle Korrektur per SSH (falls automatisch fehlschlägt)", - "Correzione parziale:": "Teilweise Korrektur:", - "Correzioni applicate: %d record aggiornati": "Korrekturen angewendet: %d Datensätze aktualisiert", - "Cos'è la Collocazione?": "Was ist die Standortbezeichnung?", - "Cosa fare:": "Was zu tun ist:", - "Cosa ne pensi di questo libro?": "Was denken Sie über dieses Buch?", - "Cosa sono le Route?": "Was sind Routen?", - "Cosa viene nascosto:": "Was ausgeblendet wird:", - "Cover": "Cover", - "Crea": "Erstellen", - "Crea API Key": "API-Key erstellen", - "Crea Admin": "Admin erstellen", - "Crea Backup": "Sicherung erstellen", - "Crea Backup Manuale": "Manuelles Backup erstellen", - "Crea Evento": "Veranstaltung erstellen", - "Crea Indici Automaticamente": "Indizes automatisch erstellen", - "Crea Nuova API Key": "Neuen API-Key erstellen", - "Crea Nuova Prenotazione": "Neue Vormerkung erstellen", - "Crea Nuovo Evento": "Neue Veranstaltung erstellen", - "Crea Nuovo Genere": "Neues Genre erstellen", - "Crea Nuovo Prestito": "Neue Ausleihe erstellen", - "Crea Prenotazione": "Vormerkung erstellen", - "Crea Prestito": "Ausleihe erstellen", - "Crea Prima API Key": "Ersten API-Key erstellen", - "Crea Primo Genere": "Erstes Genre erstellen", - "Crea Tabelle Mancanti": "Fehlende Tabellen erstellen", - "Crea Utente Admin": "Admin-Benutzer erstellen", - "Crea Utente Amministratore": "Administratorbenutzer erstellen", - "Crea e gestisci gli eventi della biblioteca": "Erstellen und verwalten Sie Bibliotheksveranstaltungen", - "Crea gli scaffali (es: A, B, C)": "Erstellen Sie Regale (z.B.: A, B, C)", - "Crea il primo utente amministratore. Questo account avrà accesso completo a tutte le funzionalità del sistema.": "Erstellen Sie den ersten Administratorbenutzer. Dieses Konto hat vollen Zugriff auf alle Systemfunktionen.", - "Crea il tuo primo evento": "Erstellen Sie Ihre erste Veranstaltung", - "Crea la cartella logs se non esiste: mkdir -p logs": "Erstellen Sie den Ordner logs, falls er nicht existiert: mkdir -p logs", - "Crea nuovo": "Neu erstellen", - "Crea nuovo \"${item.label}\"": "Neu erstellen \"${item.label}\"", - "Crea un backup manuale o attendi il prossimo aggiornamento.": "Erstellen Sie ein manuelles Backup oder warten Sie auf die nächste Aktualisierung.", - "Crea un nuovo account": "Neues Konto erstellen", - "Crea un nuovo profilo amministratore o lettore.": "Erstellen Sie ein neues Administrator- oder Leserprofil.", - "Creare backup?": "Backup erstellen?", - "Creata": "Erstellt", - "Creata il": "Erstellt am", - "Creata:": "Erstellt:", - "Creato il": "Erstellt am", - "Creazione backup database": "Datenbank-Backup wird erstellt", - "Creazione backup...": "Backup wird erstellt...", - "Creazione indici di ottimizzazione...": "Optimierungsindizes werden erstellt...", - "Creazione indici...": "Indizes werden erstellt...", - "Creazione tabelle...": "Tabellen werden erstellt...", - "Credenziali": "Zugangsdaten", - "Credenziali Admin:": "Admin-Zugangsdaten:", - "Credenziali Errate": "Ungültige Zugangsdaten", - "Credenziali non valide o utente non admin": "Ungültige Zugangsdaten oder Benutzer ist kein Administrator", - "Crediti": "Danksagungen", - "Crescente": "Aufsteigend", - "Crittografia": "Verschlüsselung", - "Cronologia": "Verlauf", - "Cronologia Aggiornamenti": "Update-Verlauf", - "Cronologia Import": "Importverlauf", - "Cronologia degli aggiornamenti eseguiti": "Verlauf der durchgeführten Aktualisierungen", - "Da": "Von", - "Da %s (%s)": "Von %s (%s)", - "Da Inventariare": "Zu inventarisieren", - "Da Ritirare": "Zur Abholung bereit", - "Da approvare": "Zu genehmigen", - "Da approvare o rifiutare": "Zu genehmigen oder abzulehnen", - "Da consegnare": "Auszuliefern", - "Da creare": "Zu erstellen", - "Da prenotazione": "Aus Vormerkung", - "Da prenotazioni": "Aus Vormerkungen", - "Da qui puoi gestire tutte le lingue disponibili nell'applicazione. Carica file JSON di traduzione e abilita/disabilita lingue.": "Von hier aus können Sie alle verfügbaren Sprachen in der Anwendung verwalten. Laden Sie JSON-Übersetzungsdateien hoch und aktivieren/deaktivieren Sie Sprachen.", - "Da ritirare": "Zur Abholung bereit", - "Dal": "Vom", - "Dal %s al %s": "Vom %s bis %s", - "Dal:": "Vom:", - "Danneggiato": "Beschädigt", - "Dansk (DA)": "Dänisch (DA)", - "Dashboard": "Dashboard", - "Data": "Datum", - "Data Acq.": "Erw.-Datum", - "Data Acquisizione": "Erwerbungsdatum", - "Data Evento": "Veranstaltungsdatum", - "Data Fine": "Enddatum", - "Data Inizio": "Startdatum", - "Data Prenotazione": "Vormerkungsdatum", - "Data Prestito": "Ausleihdatum", - "Data Prestito:": "Ausleihdatum:", - "Data Pubblicazione": "Erscheinungsdatum", - "Data Restituzione": "Rückgabedatum", - "Data Restituzione:": "Rückgabedatum:", - "Data Scadenza": "Fälligkeitsdatum", - "Data Scadenza:": "Fälligkeitsdatum:", - "Data acquisizione": "Erwerbungsdatum", - "Data acquisizione a": "Erwerbungsdatum bis", - "Data acquisizione da": "Erwerbungsdatum von", - "Data creazione": "Erstellt am", - "Data di Pubblicazione": "Erscheinungsdatum", - "Data di inizio della prenotazione (default: oggi)": "Startdatum der Vormerkung (Standard: heute)", - "Data di morte": "Sterbedatum", - "Data di nascita": "Geburtsdatum", - "Data di pubblicazione": "Erscheinungsdatum", - "Data di scadenza della prenotazione (default: +30 giorni)": "Ablaufdatum der Vormerkung (Standard: +30 Tage)", - "Data fine": "Enddatum", - "Data inizio": "Startdatum", - "Data inizio richiesta mancante": "Angefordertes Startdatum fehlt", - "Data morte a": "Sterbedatum bis", - "Data morte da": "Sterbedatum von", - "Data nascita a": "Geburtsdatum bis", - "Data nascita da": "Geburtsdatum von", - "Data non valida.": "Ungültiges Datum.", - "Data originale di pubblicazione (formato italiano)": "Ursprüngliches Erscheinungsdatum (italienisches Format)", - "Data prestito": "Ausleihdatum", - "Data prestito (A)": "Ausleihdatum (Bis)", - "Data prestito (Da)": "Ausleihdatum (Von)", - "Data pubblicazione da": "Erscheinungsdatum von", - "Data scadenza prevista": "Voraussichtliches Fälligkeitsdatum", - "Data/Ora": "Datum/Uhrzeit", - "Data:": "Datum:", - "DataIntegrity warning (store loan)": "DataIntegrity-Warnung (Ausleihe speichern)", - "Database": "Datenbank", - "Database '%s' non esiste. Crealo prima di procedere.": "Datenbank '%s' existiert nicht. Bitte erstellen Sie sie, bevor Sie fortfahren.", - "Database installato (30 tabelle)": "Datenbank installiert (30 Tabellen)", - "Database installato (41 tabelle)": "Datenbank installiert (41 Tabellen)", - "Database installato (46 tabelle)": "Datenbank installiert (46 Tabellen)", - "Database:": "Datenbank:", - "Date": "Termine", - "Date Non Valide": "Ungültige Daten", - "Dati Account": "Kontodaten", - "Dati Utente": "Benutzerdetails", - "Dati alternativi disponibili": "Alternative Daten verfügbar", - "Dati bibliografici completi (titolo, sottotitolo, ISBN, EAN, ecc.)": "Vollständige bibliografische Daten (Titel, Untertitel, ISBN, EAN usw.)", - "Dati della Prenotazione": "Vormerkungsdetails", - "Dati di classificazione mancanti": "Klassifikationsdaten fehlen", - "Dati essenziali caricati": "Wesentliche Daten geladen", - "Dati generi mancanti": "Genre-Daten fehlen", - "Dati iniziali importati OK": "Anfangsdaten erfolgreich importiert", - "Dati libro recuperati con successo da Open Library": "Buchdaten erfolgreich von Open Library abgerufen", - "Dati mancanti": "Fehlende Daten", - "Dati personali": "Persönliche Daten", - "Dati validi.": "Gültige Daten.", - "Debug": "Debug", - "Debug Log:": "Debug-Log:", - "Deceduto il %s": "Verstorben am %s", - "Decimali": "Dezimalstellen", - "Decrescente": "Absteigend", - "Default: un mese dopo la data inizio": "Standard: ein Monat nach dem Startdatum", - "Definisce i privilegi dell'utente.": "Definiert die Berechtigungen des Benutzers.", - "Demo": "Demo", - "Descrivi l'utilizzo di questa API key...": "Beschreiben Sie die Verwendung dieses API-Keys...", - "Descrizione": "Beschreibung", - "Descrizione Banner": "Banner-Beschreibung", - "Descrizione Evento": "Veranstaltungsbeschreibung", - "Descrizione Modale": "Modal-Beschreibung", - "Descrizione OG": "OG-Beschreibung", - "Descrizione Open Graph": "Open-Graph-Beschreibung", - "Descrizione SEO": "SEO-Beschreibung", - "Descrizione Twitter": "Twitter-Beschreibung", - "Descrizione banner": "Banner-Beschreibung", - "Descrizione breve": "Kurzbeschreibung", - "Descrizione completa dell'evento con possibilità di formattazione HTML": "Vollständige Veranstaltungsbeschreibung mit HTML-Formatierungsmöglichkeiten", - "Descrizione cookie analitici": "Beschreibung der Analyse-Cookies", - "Descrizione cookie essenziali": "Beschreibung der essentiellen Cookies", - "Descrizione cookie marketing": "Beschreibung der Marketing-Cookies", - "Descrizione del libro...": "Buchbeschreibung...", - "Descrizione footer": "Footer-Beschreibung", - "Descrizione modale": "Modal-Beschreibung", - "Descrizione nella modale preferenze. Puoi usare HTML.": "Beschreibung im Einstellungen-Modal. Sie können HTML verwenden.", - "Descrizione per Twitter/X. Se vuoto, usa la descrizione Open Graph.": "Beschreibung für Twitter/X. Wenn leer, wird die Open Graph-Beschreibung verwendet.", - "Descrizione per anteprima social. Se vuoto, usa la descrizione SEO.": "Beschreibung für die Social-Media-Vorschau. Wenn leer, wird die SEO-Beschreibung verwendet.", - "Descrizione troppo lunga (max 2000 caratteri)": "Beschreibung zu lang (max. 2000 Zeichen)", - "Descrizione:": "Beschreibung:", - "Deseleziona tutti": "Alle abwählen", - "Dettagli": "Details", - "Dettagli Acquisizione": "Erwerbungsdetails", - "Dettagli Fisici": "Physische Details", - "Dettagli Libro": "Buchdetails", - "Dettagli Messaggio": "Nachrichtendetails", - "Dettagli del Prestito": "Ausleihdetails", - "Dettagli evento": "Veranstaltungsdetails", - "Dettagli principali dell'evento": "Wichtigste Veranstaltungsdetails", - "Dettagli restituzione": "Rückgabedetails", - "Deutsch (DE)": "Deutsch (DE)", - "Deve contenere maiuscole, minuscole e numeri": "Muss Groß-, Kleinbuchstaben und Zahlen enthalten", - "Deve iniziare con": "Muss beginnen mit", - "Devi accettare la Privacy Policy per procedere": "Sie müssen die Datenschutzrichtlinie akzeptieren, um fortzufahren", - "Devi elencare manualmente i cookie tracciati da questi script nella": "Sie müssen die von diesen Skripten erfassten Cookies manuell auflisten in der", - "Devi eseguire": "Sie müssen ausführen", - "Dewey": "Dewey", - "Dimensione": "Größe", - "Dimensioni": "Abmessungen", - "Dipendenze": "Abhängigkeiten", - "Directory Upload Pubblici": "Verzeichnis für öffentliche Uploads", - "Directory non scrivibile: %s": "Verzeichnis nicht beschreibbar: %s", - "Directory plugin già esistente.": "Plugin-Verzeichnis existiert bereits.", - "Directory sorgente non trovata": "Quellverzeichnis nicht gefunden", - "Disabilita": "Deaktivieren", - "Disabilita prestiti, prenotazioni e wishlist. Gli utenti potranno solo consultare il catalogo.": "Deaktiviert Ausleihen, Vormerkungen und Wunschliste. Die Benutzer können nur den Katalog durchsuchen.", - "Disabilita se il tuo sito non usa cookie analitici (es. Google Analytics)": "Deaktivieren, wenn Ihre Website keine Analyse-Cookies verwendet (z.B. Google Analytics)", - "Disabilita se il tuo sito non usa cookie di marketing/advertising": "Deaktivieren, wenn Ihre Website keine Marketing-/Werbe-Cookies verwendet", - "Disabilita tutte le funzionalità di prestito e prenotazione": "Alle Ausleih- und Vormerkungsfunktionen deaktivieren", - "Disabilitata": "Deaktiviert", - "Disabilitata - Nascosta nel frontend": "Deaktiviert – Im Frontend ausgeblendet", - "Disabilitato": "Deaktiviert", - "Disattiva": "Deaktivieren", - "Disattiva modalità manutenzione": "Wartungsmodus deaktivieren", - "Disattivata": "Inaktiv", - "Discografia": "Diskografie", - "Disconnesso": "Getrennt", - "Disconnetti": "Abmelden", - "Disconnetti tutti": "Alle abmelden", - "Disinstalla": "Deinstallieren", - "Disinstalla Plugin": "Plugin deinstallieren", - "Disponibile": "Verfügbar", - "Disponibile dal:": "Verfügbar ab:", - "Disponibile nella data selezionata": "Am gewählten Datum verfügbar", - "Disponibile ora": "Jetzt verfügbar", - "Disponibile per il prestito.": "Zur Ausleihe verfügbar.", - "Disponibile solo con driver SMTP": "Nur mit SMTP-Treiber verfügbar", - "Disponibili": "Verfügbar", - "Disponibili e in prestito": "Verfügbar und ausgeliehen", - "Disponibilità": "Verfügbarkeit", - "Disponibilità copie": "Exemplarverfügbarkeit", - "Dispositivo sconosciuto": "Unbekanntes Gerät", - "Divisione (010-990)": "Abteilung (010-990)", - "Divisioni": "Abteilungen", - "Do you want to automatically fix the detected integrity issues?": "Möchten Sie die erkannten Integritätsprobleme automatisch beheben?", - "Do you want to run full system maintenance? This may take a few minutes.": "Möchten Sie die vollständige Systemwartung ausführen? Dies kann einige Minuten dauern.", - "Documentazione": "Dokumentation", - "Documentazione API": "API-Dokumentation", - "Documento": "Dokument", - "Documento generato il %s alle %s": "Dokument erstellt am %s um %s", - "Donazione": "Spende", - "Dopo la conferma, un amministratore approverà la tua iscrizione.": "Nach der Bestätigung wird ein Administrator Ihre Registrierung genehmigen.", - "Dopo la rigenerazione, invia l'URL della sitemap a Google Search Console e Bing Webmaster Tools": "Senden Sie nach der Neugenerierung die Sitemap-URL an Google Search Console und Bing Webmaster Tools", - "Download aggiornamento": "Update wird heruntergeladen", - "Download completato": "Download abgeschlossen", - "Download copertina fallito": "Cover-Download fehlgeschlagen", - "Download fallito": "Download fehlgeschlagen", - "Driver": "Treiber", - "Driver Email": "E-Mail-Treiber", - "Durata": "Dauer", - "EAN": "EAN", - "EAN:": "EAN:", - "ERRORE:": "FEHLER:", - "Eccellente": "Ausgezeichnet", - "Eccezione creazione %s su %s:": "Ausnahme beim Erstellen von %s auf %s:", - "Eccezione creazione tabella %s:": "Ausnahme beim Erstellen der Tabelle %s:", - "Editor Classificazione Dewey": "Dewey-Klassifikationseditor", - "Editore": "Verlag", - "Editore \"${item.label}\" selezionato": "Verlag \"${item.label}\" ausgewählt", - "Editore \"${value}\" pronto per essere creato": "Verlag \"${value}\" bereit zur Erstellung", - "Editore \"%s\" pronto per essere creato": "Verlag \"%s\" bereit zur Erstellung", - "Editore \"%s\" selezionato": "Verlag \"%s\" ausgewählt", - "Editore %s": "Verlag %s", - "Editore applicato": "Verlag übernommen", - "Editore eliminato con successo.": "Verlag erfolgreich gelöscht.", - "Editore principale": "Hauptverlag", - "Editore sconosciuto": "Unbekannter Verlag", - "Editore selezionato:": "Ausgewählter Verlag:", - "Editore trovato:": "Verlag gefunden:", - "Editore:": "Verlag:", - "Editore: %s": "Verlag: %s", - "Editori": "Verlage", - "Editori uniti": "Verlage zusammengeführt", - "Editori uniti con successo": "Verlage erfolgreich zusammengeführt", - "Edizione": "Ausgabe", - "Elaborato da": "Bearbeitet von", - "Elaborazione lista attesa fallita": "Wartelistenverarbeitung fehlgeschlagen", - "Elaborazione...": "Verarbeitung...", - "Elementi": "Elemente", - "Elenco Autori": "Autorenliste", - "Elenco Autori - Biblioteca": "Autorenliste – Bibliothek", - "Elenco Editori": "Verlagsliste", - "Elenco Editori - Biblioteca": "Verlagsliste – Bibliothek", - "Elenco Libri": "Bücherliste", - "Elenco Libri - Biblioteca": "Bücherliste – Bibliothek", - "Elenco Prestiti": "Ausleihliste", - "Elenco Utenti": "Benutzerliste", - "Elenco Utenti - Biblioteca": "Benutzerliste – Bibliothek", - "Elimina": "Löschen", - "Elimina Installer": "Installer löschen", - "Elimina Installer (Richiede Composer)": "Installer löschen (erfordert Composer)", - "Elimina Lingua": "Sprache löschen", - "Elimina copia": "Exemplar löschen", - "Elimina il file .installed dalla root del progetto e riprova": "Löschen Sie die Datei .installed aus dem Projektstammverzeichnis und versuchen Sie es erneut", - "Elimina questa lingua. Questa azione non può essere annullata.": "Diese Sprache löschen. Diese Aktion kann nicht rückgängig gemacht werden.", - "Elimina recensione": "Rezension löschen", - "Eliminare i libri selezionati?": "Ausgewählte Bücher löschen?", - "Eliminare il file .installed dalla root del progetto e rieseguire l'installer": "Löschen Sie die Datei .installed aus dem Projektstammverzeichnis und führen Sie den Installer erneut aus", - "Eliminare il libro?": "Buch löschen?", - "Eliminare l'utente?": "Benutzer löschen?", - "Eliminare questa mensola? (Solo se vuota)": "Dieses Regalbrett löschen? (Nur wenn leer)", - "Eliminare questo backup?": "Dieses Backup löschen?", - "Eliminare questo scaffale? (Solo se vuoto)": "Dieses Regal löschen? (Nur wenn leer)", - "Eliminati": "Gelöscht", - "Eliminato!": "Gelöscht!", - "Eliminazione in corso...": "Wird gelöscht...", - "Email": "E-Mail", - "Email *": "E-Mail *", - "Email Admin": "Admin-E-Mail", - "Email Contatto": "Kontakt-E-Mail", - "Email Non Valida": "Ungültige E-Mail", - "Email Non Verificata": "Nicht verifizierte E-Mail", - "Email Referente": "E-Mail der Kontaktperson", - "Email associata al tuo account": "Mit Ihrem Konto verknüpfte E-Mail", - "Email configurata": "E-Mail konfiguriert", - "Email di contatto": "Kontakt-E-Mail", - "Email di recupero inviata con successo!": "Wiederherstellungs-E-Mail erfolgreich gesendet!", - "Email dove ricevere i messaggi dal form contatti": "E-Mail-Adresse für den Empfang von Nachrichten aus dem Kontaktformular", - "Email e telefono visibili sulla pagina contatti": "E-Mail und Telefon sichtbar auf der Kontaktseite", - "Email già registrata": "E-Mail bereits registriert", - "Email non trovata nel nostro sistema": "E-Mail in unserem System nicht gefunden", - "Email non valida. Verifica il formato": "Ungültige E-Mail. Überprüfen Sie das Format", - "Email non verificata. Controlla la tua casella di posta e clicca sul link di verifica": "E-Mail nicht verifiziert. Überprüfen Sie Ihren Posteingang und klicken Sie auf den Bestätigungslink", - "Email o password non corretti. Verifica le credenziali e riprova": "E-Mail oder Passwort falsch. Überprüfen Sie Ihre Zugangsdaten und versuchen Sie es erneut", - "Email per notifiche": "E-Mail für Benachrichtigungen", - "Email troppo lunga (massimo 255 caratteri)": "E-Mail zu lang (maximal 255 Zeichen)", - "Email utente": "Benutzer-E-Mail", - "Email verificata con successo! Il tuo account è ora in attesa di approvazione da parte dell'amministratore. Riceverai un'email quando sarà attivato.": "E-Mail erfolgreich verifiziert! Ihr Konto wartet nun auf die Genehmigung durch den Administrator. Sie erhalten eine E-Mail, wenn es aktiviert wird.", - "Email:": "E-Mail:", - "Embed della mappa (Google Maps o OpenStreetMap). Puoi inserire l'URL o il codice iframe completo.": "Karteneinbettung (Google Maps oder OpenStreetMap). Sie können die URL oder den vollständigen iframe-Code einfügen.", - "Emoji Bandiera": "Flaggen-Emoji", - "Emoji della bandiera del paese (opzionale)": "Landesflaggen-Emoji (optional)", - "Emoji della bandiera del paese (opzionale, default: 🌐)": "Landesflaggen-Emoji (optional, Standard: 🌐)", - "Encryption": "Encryption", - "Endpoint": "Endpoint", - "Endpoint SRU:": "SRU-Endpoint:", - "English (EN)": "Englisch (EN)", - "Errore": "Fehler", - "Errore Installazione": "Installationsfehler", - "Errore SQL durante migrazione %s: %s": "SQL-Fehler bei Migration %s: %s", - "Errore Upload": "Upload-Fehler", - "Errore aggiornamento log": "Fehler beim Aktualisieren des Protokolls", - "Errore annullamento prenotazione": "Fehler bei der Stornierung der Vormerkung", - "Errore annullamento prestito": "Fehler bei der Stornierung der Ausleihe", - "Errore attivazione prestito schedulato": "Fehler bei der Aktivierung der geplanten Ausleihe", - "Errore backup database": "Fehler beim Datenbank-Backup", - "Errore caricamento Audiobook": "Fehler beim Laden des Hörbuchs", - "Errore caricamento classificazione Dewey": "Fehler beim Laden der Dewey-Klassifikation", - "Errore caricamento eBook": "Fehler beim Laden des E-Books", - "Errore connessione database": "Datenbankverbindungsfehler", - "Errore correzione dati:": "Fehler bei der Datenkorrektur:", - "Errore creazione %s su %s:": "Fehler beim Erstellen von %s auf %s:", - "Errore creazione indici:": "Fehler bei der Indexerstellung:", - "Errore creazione tabella %s:": "Fehler beim Erstellen der Tabelle %s:", - "Errore creazione tabella migrazioni": "Fehler beim Erstellen der Migrationstabelle", - "Errore creazione tabella update_logs": "Fehler beim Erstellen der Tabelle update_logs", - "Errore database:": "Datenbankfehler:", - "Errore del Server": "Serverfehler", - "Errore del database": "Datenbankfehler", - "Errore del database durante la registrazione. Riprova più tardi": "Datenbankfehler bei der Registrierung. Bitte versuchen Sie es später erneut", - "Errore del server": "Serverfehler", - "Errore del server. Riprova più tardi.": "Serverfehler. Bitte versuchen Sie es später erneut.", - "Errore di comunicazione con il server": "Kommunikationsfehler mit dem Server", - "Errore di configurazione del server.": "Serverkonfigurationsfehler.", - "Errore di configurazione.": "Konfigurationsfehler.", - "Errore di connessione": "Verbindungsfehler", - "Errore di connessione durante l'importazione": "Verbindungsfehler während des Imports", - "Errore di connessione:": "Verbindungsfehler:", - "Errore di rete": "Netzwerkfehler", - "Errore di salvataggio": "Speicherfehler", - "Errore di salvataggio. Riprova più tardi.": "Fehler beim Speichern. Bitte versuchen Sie es später erneut.", - "Errore di sicurezza": "Sicherheitsfehler", - "Errore di sicurezza, riprova": "Sicherheitsfehler, versuchen Sie es erneut", - "Errore di sicurezza. Aggiorna la pagina e riprova": "Sicherheitsfehler. Aktualisieren Sie die Seite und versuchen Sie es erneut", - "Errore di sicurezza. Ricarica la pagina e riprova": "Sicherheitsfehler. Laden Sie die Seite neu und versuchen Sie es erneut", - "Errore di sicurezza. Ricarica la pagina e riprova.": "Sicherheitsfehler. Laden Sie die Seite neu und versuchen Sie es erneut.", - "Errore di sicurezza. Riprova.": "Sicherheitsfehler. Bitte versuchen Sie es erneut.", - "Errore di sistema.": "Systemfehler.", - "Errore durante il caricamento dei dettagli del plugin.": "Fehler beim Laden der Plugin-Details.", - "Errore durante il caricamento del file (code: %s).": "Fehler beim Hochladen der Datei (Code: %s).", - "Errore durante il caricamento del file.": "Fehler beim Hochladen der Datei.", - "Errore durante il controllo": "Fehler bei der Überprüfung", - "Errore durante il recupero dei dati": "Fehler beim Abrufen der Daten", - "Errore durante il recupero delle sessioni": "Fehler beim Abrufen der Sitzungen", - "Errore durante il ricalcolo:": "Fehler bei der Neuberechnung:", - "Errore durante il rifiuto": "Fehler bei der Ablehnung", - "Errore durante il salvataggio": "Fehler beim Speichern", - "Errore durante il salvataggio delle impostazioni.": "Fehler beim Speichern der Einstellungen.", - "Errore durante il salvataggio delle impostazioni:": "Fehler beim Speichern der Einstellungen:", - "Errore durante il salvataggio nel database.": "Fehler beim Speichern in der Datenbank.", - "Errore durante il salvataggio.": "Fehler beim Speichern.", - "Errore durante il salvataggio:": "Fehler beim Speichern:", - "Errore durante il seed": "Fehler beim Seeding", - "Errore durante l'aggiornamento": "Fehler bei der Aktualisierung", - "Errore durante l'aggiornamento dell'evento.": "Fehler beim Aktualisieren der Veranstaltung.", - "Errore durante l'aggiornamento della chiave Google Books.": "Fehler beim Aktualisieren des Google-Books-Schlüssels.", - "Errore durante l'annullamento del ritiro": "Fehler beim Stornieren der Abholung", - "Errore durante l'applicazione del fix:": "Fehler beim Anwenden des Fixes:", - "Errore durante l'approvazione": "Fehler bei der Genehmigung", - "Errore durante l'attivazione": "Fehler bei der Aktivierung", - "Errore durante l'attivazione del plugin.": "Fehler beim Aktivieren des Plugins.", - "Errore durante l'attivazione del tema": "Fehler bei der Aktivierung des Themes", - "Errore durante l'attivazione: %s": "Fehler bei der Aktivierung: %s", - "Errore durante l'eliminazione dell'evento.": "Fehler beim Löschen der Veranstaltung.", - "Errore durante l'estrazione del plugin.": "Fehler beim Entpacken des Plugins.", - "Errore durante l'import: %s": "Importfehler: %s", - "Errore durante l'importazione (HTTP": "Fehler beim Import (HTTP", - "Errore durante l'importazione (HTTP %d)": "Importfehler (HTTP %d)", - "Errore durante l'importazione dati": "Fehler beim Datenimport", - "Errore durante l'installazione del plugin.": "Fehler bei der Plugin-Installation.", - "Errore durante l'installazione:": "Fehler bei der Installation:", - "Errore durante l'installazione: %s": "Fehler bei der Installation: %s", - "Errore durante l'invio dell'email. Riprova più tardi": "Fehler beim Senden der E-Mail. Bitte versuchen Sie es später erneut", - "Errore durante l'unione degli autori": "Fehler beim Zusammenführen der Autoren", - "Errore durante l'unione degli editori": "Fehler beim Zusammenführen der Verlage", - "Errore durante l'upload.": "Upload-Fehler.", - "Errore durante la conferma del ritiro": "Fehler bei der Abholungsbestätigung", - "Errore durante la correzione:": "Fehler bei der Korrektur:", - "Errore durante la creazione degli indici": "Fehler beim Erstellen der Indizes", - "Errore durante la creazione degli indici:": "Fehler beim Erstellen der Indizes:", - "Errore durante la creazione del prestito.": "Fehler beim Erstellen der Ausleihe.", - "Errore durante la creazione dell'evento.": "Fehler beim Erstellen der Veranstaltung.", - "Errore durante la creazione dell'utente:": "Fehler beim Erstellen des Benutzers:", - "Errore durante la creazione delle tabelle:": "Fehler beim Erstellen der Tabellen:", - "Errore durante la disattivazione del plugin.": "Fehler beim Deaktivieren des Plugins.", - "Errore durante la disattivazione: %s": "Fehler bei der Deaktivierung: %s", - "Errore durante la disinstallazione del plugin.": "Fehler bei der Deinstallation des Plugins.", - "Errore durante la finalizzazione:": "Fehler bei der Fertigstellung:", - "Errore durante la manutenzione:": "Fehler bei der Wartung:", - "Errore durante la prenotazione": "Fehler bei der Vormerkung", - "Errore durante la registrazione": "Registrierungsfehler", - "Errore durante la revoca della sessione": "Fehler beim Widerrufen der Sitzung", - "Errore durante la revoca delle sessioni": "Fehler beim Widerrufen der Sitzungen", - "Errore durante la ricerca": "Fehler bei der Suche", - "Errore durante la ricerca su": "Fehler bei der Suche auf", - "Errore durante la rimozione dal database.": "Fehler beim Entfernen aus der Datenbank.", - "Errore durante la verifica dei libri associati": "Fehler bei der Überprüfung der zugehörigen Bücher", - "Errore durante la verifica dei prestiti attivi": "Fehler bei der Überprüfung der aktiven Ausleihen", - "Errore elaborazione restituzione": "Fehler bei der Rückgabeverarbeitung", - "Errore elaborazione ritiro scaduto": "Fehler bei der Verarbeitung der abgelaufenen Abholung", - "Errore export CSV": "CSV-Export-Fehler", - "Errore fatale durante aggiornamento": "Schwerwiegender Fehler bei der Aktualisierung", - "Errore generazione PDF prestito": "Fehler bei der Erstellung des Ausleih-PDF", - "Errore generazione calendario": "Fehler bei der Kalendererstellung", - "Errore gestione cambio stato copia": "Fehler bei der Verarbeitung der Exemplar-Statusänderung", - "Errore gestione copia non disponibile": "Fehler bei der Behandlung des nicht verfügbaren Exemplars", - "Errore imprevisto durante l'unione degli autori": "Unerwarteter Fehler beim Zusammenführen der Autoren", - "Errore imprevisto durante l'unione degli editori": "Unerwarteter Fehler beim Zusammenführen der Verlage", - "Errore interno del database": "Interner Datenbankfehler", - "Errore interno del database durante la verifica": "Interner Datenbankfehler während der Überprüfung", - "Errore interno del database. Riprova più tardi.": "Interner Datenbankfehler. Bitte versuchen Sie es später erneut.", - "Errore interno durante l'approvazione": "Interner Fehler bei der Genehmigung", - "Errore interno: %s": "Interner Fehler: %s", - "Errore invio notifica differita": "Fehler beim Senden der verzögerten Benachrichtigung", - "Errore invio notifica ritiro pronto": "Fehler beim Senden der Abholbereitschafts-Benachrichtigung", - "Errore invio notifica ritiro scaduto": "Fehler beim Senden der Benachrichtigung über abgelaufene Abholung", - "Errore lettura calendario": "Fehler beim Lesen des Kalenders", - "Errore modifica data prenotazione": "Fehler bei der Änderung des Vormerkungsdatums", - "Errore nel caricamento dei backup.": "Fehler beim Laden der Sicherungen.", - "Errore nel caricamento dei libri": "Fehler beim Laden der Bücher", - "Errore nel caricamento del file": "Fehler beim Hochladen der Datei", - "Aggiunge badge cliccabili alla scheda libro per cercare su Anna's Archive, Z-Library e Project Gutenberg con un click. Ispirato all'estensione browser GoodLib.": "Fügt anklickbare Badges zur Buchdetailseite hinzu, um mit einem Klick auf Anna's Archive, Z-Library und Project Gutenberg zu suchen. Inspiriert von der GoodLib-Browsererweiterung.", - "Anna's Archive": "Anna's Archive", - "Catalogo pubblico": "Öffentlicher Katalog", - "Configura Fonti": "Quellen konfigurieren", - "Domini mirror": "Mirror-Domains", - "Dominio non valido. Inserisci solo host o host:porta, senza percorsi.": "Ungültige Domain. Geben Sie nur Host oder Host:Port ohne Pfade ein.", - "Dominio personalizzato...": "Benutzerdefinierte Domain...", - "Errore durante l'aggiornamento del profilo.": "Fehler beim Aktualisieren des Profils.", - "Cerca su:": "Suche auf:", - "Predefinita del sito": "Website-Standard", - "Cerca \"%s\" su %s": "Suche \"%s\" auf %s", - "Fonti attive": "Aktive Quellen", - "GoodLib — External Sources": "GoodLib — Externe Quellen", - "GoodLib — Fonti Esterne": "GoodLib — Externe Quellen", - "Impostazioni GoodLib salvate correttamente.": "GoodLib-Einstellungen erfolgreich gespeichert.", - "Mostra badge nella pagina dettaglio libro": "Badge auf der Buchdetailseite anzeigen", - "Mostra badge nell'area amministrazione": "Badge im Administrationsbereich anzeigen", - "Mostra i badge nella pagina dettaglio libro del catalogo": "Badges auf der Buchdetailseite im Katalog anzeigen", - "Mostra i badge nella scheda libro dell'area amministrazione": "Badges auf der Buchseite im Administrationsbereich anzeigen", - "Project Gutenberg": "Project Gutenberg", - "Puoi scegliere un mirror suggerito oppure selezionare dominio personalizzato.": "Sie können einen vorgeschlagenen Mirror auswählen oder eine benutzerdefinierte Domain wählen.", - "Puoi usare i mirror suggeriti oppure inserire un dominio custom.": "Sie können die vorgeschlagenen Mirror verwenden oder eine benutzerdefinierte Domain eingeben.", - "Questi siti cambiano dominio spesso. Seleziona un mirror funzionante.": "Diese Seiten ändern ihre Domain häufig. Wählen Sie einen funktionierenden Mirror aus.", - "Scheda libro admin": "Admin-Buchseite", - "Sono accettati anche domini personalizzati; se incolli un URL completo verrà salvato solo l'host.": "Benutzerdefinierte Domains werden ebenfalls akzeptiert; wenn Sie eine vollständige URL einfügen, wird nur der Host gespeichert.", - "Visibilita": "Sichtbarkeit", - "Visibilità": "Sichtbarkeit", - "Z-Library": "Z-Library", - "Errore nel caricamento del file JSON": "Fehler beim Laden der JSON-Datei", - "Errore nel caricamento.": "Fehler beim Laden.", - "Errore nel caricamento. Riprova.": "Fehler beim Laden. Bitte versuchen Sie es erneut.", - "Errore nel download della copertina.": "Fehler beim Herunterladen des Covers.", - "Errore nel parsing del file JSON.": "Fehler beim Parsen der JSON-Datei.", - "Errore nel recupero dati tabella %s": "Fehler beim Abrufen der Tabellendaten für %s", - "Errore nel recupero dei figli": "Fehler beim Abrufen der Unterkategorien", - "Errore nel recupero delle categorie.": "Fehler beim Abrufen der Kategorien.", - "Errore nel recupero delle divisioni.": "Fehler beim Abrufen der Abteilungen.", - "Errore nel recupero delle specifiche.": "Fehler beim Abrufen der Untergruppen.", - "Errore nel recupero delle tabelle": "Fehler beim Abrufen der Tabellen", - "Errore nel recupero struttura tabella %s": "Fehler beim Abrufen der Tabellenstruktur für %s", - "Errore nel rifiuto": "Fehler bei der Ablehnung", - "Errore nel rifiuto della richiesta": "Fehler beim Ablehnen der Anfrage", - "Errore nel ripristino dei colori": "Fehler beim Zurücksetzen der Farben", - "Errore nel ripristino.": "Fehler bei der Wiederherstellung.", - "Errore nel salvataggio del file di traduzione": "Fehler beim Speichern der Übersetzungsdatei", - "Errore nel salvataggio del file route": "Fehler beim Speichern der Route-Datei", - "Errore nel salvataggio del file.": "Fehler beim Speichern der Datei.", - "Errore nel salvataggio del tema": "Fehler beim Speichern des Themes", - "Errore nel salvataggio dell'immagine.": "Fehler beim Speichern des Bildes.", - "Errore nel salvataggio dell'ordine. Ricarica la pagina e riprova.": "Fehler beim Speichern der Reihenfolge. Bitte laden Sie die Seite neu und versuchen Sie es erneut.", - "Errore nell'aggiornamento del template": "Fehler beim Aktualisieren der Vorlage", - "Errore nell'aggiornamento dello stato dell'API key: %s": "Fehler beim Aktualisieren des API-Key-Status: %s", - "Errore nell'aggiornamento:": "Fehler bei der Aktualisierung:", - "Errore nell'aggiornare i preferiti.": "Fehler beim Aktualisieren der Favoriten.", - "Errore nell'approvazione": "Fehler bei der Genehmigung", - "Errore nell'eliminazione dell'API key: %s": "Fehler beim Löschen des API-Keys: %s", - "Errore nell'eliminazione:": "Fehler beim Löschen:", - "Errore nell'operazione:": "Fehler beim Vorgang:", - "Errore nella Verifica dell'Installazione": "Fehler bei der Installationsüberprüfung", - "Errore nella codifica JSON.": "JSON-Kodierungsfehler.", - "Errore nella comunicazione con il server": "Kommunikationsfehler mit dem Server", - "Errore nella conferma del ritiro": "Fehler bei der Abholungsbestätigung", - "Errore nella copia del file: %s": "Fehler beim Kopieren der Datei: %s", - "Errore nella copia:": "Fehler beim Kopieren:", - "Errore nella copia: ": "Fehler beim Kopieren: ", - "Errore nella creazione del genere.": "Fehler beim Erstellen des Genres.", - "Errore nella creazione dell'API key: %s": "Fehler beim Erstellen des API-Keys: %s", - "Errore nella creazione della recensione": "Fehler beim Erstellen der Rezension", - "Errore nella creazione della richiesta di prestito": "Fehler beim Erstellen der Ausleihanfrage", - "Errore nella creazione:": "Fehler beim Erstellen:", - "Errore nella lettura del backup.": "Fehler beim Lesen der Sicherungsdatei.", - "Errore nella lettura del file Dewey esistente.": "Fehler beim Lesen der vorhandenen Dewey-Datei.", - "Errore nella lettura del file.": "Fehler beim Lesen der Datei.", - "Errore nella prenotazione": "Fehler bei der Vormerkung", - "Errore nella prenotazione.": "Fehler bei der Vormerkung.", - "Errore nella query.": "Abfragefehler.", - "Errore nella ricerca": "Suchfehler", - "Errore nella ricerca.": "Fehler bei der Suche.", - "Errore nella richiesta di prestito.": "Fehler bei der Ausleihanfrage.", - "Errore prenotazione": "Vormerkungsfehler", - "Errore preparazione completamento log": "Fehler beim Vorbereiten des Protokollabschlusses", - "Errore preparazione insert migrazione": "Fehler beim Vorbereiten des Migrationseintrags", - "Errore preparazione log aggiornamento": "Fehler beim Vorbereiten des Aktualisierungsprotokolls", - "Errore preparazione query migrazioni": "Fehler beim Vorbereiten der Migrationsabfrage", - "Errore processamento immagine": "Fehler bei der Bildverarbeitung", - "Errore recupero batch migrazioni": "Fehler beim Abrufen des Migrationsbatches", - "Errore recupero risultati migrazioni": "Fehler beim Abrufen der Migrationsergebnisse", - "Errore riassegnazione copia": "Fehler bei der Exemplar-Neuzuweisung", - "Errore riassegnazione copia persa": "Fehler bei der Neuzuweisung des verlorenen Exemplars", - "Errore richiesta prestito": "Fehler bei der Ausleihanfrage", - "Errore salvataggio immagine": "Fehler beim Speichern des Bildes", - "Errore sconosciuto durante il caricamento": "Unbekannter Fehler beim Hochladen", - "Errore suggerimento": "Vorschlagsfehler", - "Errore validazione prestito:": "Fehler bei der Ausleihe-Validierung:", - "Errore verifica tabelle: %s": "Fehler bei der Tabellenüberprüfung: %s", - "Errore!": "Fehler!", - "Errore:": "Fehler:", - "Errore: ": "Fehler: ", - "Errore: Utente non trovato": "Fehler: Benutzer nicht gefunden", - "Errore: la data di scadenza deve essere successiva alla data di prestito.": "Fehler: Das Fälligkeitsdatum muss nach dem Ausleihdatum liegen.", - "Errore: tutti i campi obbligatori devono essere compilati.": "Fehler: Alle Pflichtfelder müssen ausgefüllt werden.", - "Errori Totali": "Gesamtfehler", - "Errori di validazione dopo il merge.": "Validierungsfehler nach dem Zusammenführen.", - "Errori di validazione nel file importato.": "Validierungsfehler in der importierten Datei.", - "Errori di validazione.": "Validierungsfehler.", - "Errori durante l'import": "Importfehler", - "Errori:": "Fehler:", - "Es. Biblioteca Digitale - Migliaia di libri da esplorare": "Z.B. Digitale Bibliothek – Tausende Bücher zum Entdecken", - "Es. Esplora migliaia di libri, prenota online e gestisci i tuoi prestiti.": "Z.B. Entdecken Sie Tausende von Büchern, reservieren Sie online und verwalten Sie Ihre Ausleihen.", - "Es. Italiana, Americana, Francese...": "Z.B. Italienisch, Amerikanisch, Französisch...", - "Es. Italiana, Americana...": "Z.B. Italienische, Amerikanische...", - "Es. Italiana...": "Z.B. Italienisch...", - "Es. La Tua Biblioteca Digitale": "Z.B. Ihre Digitale Bibliothek", - "Es. Milano...": "Z.B. München...", - "Es. Presentazione libro \"Il Nome della Rosa\"": "Z.B. Buchvorstellung \"Der Name der Rose\"", - "Es. Scopri il nostro catalogo digitale con migliaia di libri disponibili per il prestito. Registrati gratuitamente e inizia a leggere oggi stesso.": "Z.B. Entdecken Sie unseren digitalen Katalog mit Tausenden von Büchern, die zur Ausleihe verfügbar sind. Registrieren Sie sich kostenlos und beginnen Sie noch heute zu lesen.", - "Es. Un libro fantastico!": "Z.B. Ein fantastisches Buch!", - "Es. Un libro straordinario!": "Z.B. Ein außergewöhnliches Buch!", - "Es. biblioteca digitale, prestito libri, catalogo online, libri gratis": "Z.B. digitale Bibliothek, Buchausleihe, Online-Katalog, kostenlose Bücher", - "Es. https://tuosito.com": "Z.B. https://ihreseite.com", - "Es. https://tuosito.com/uploads/og-image.jpg": "Z.B. https://ihreseite.com/uploads/og-image.jpg", - "Esauriti tentativi riassegnazione copia": "Neuzuweisungsversuche für Exemplar erschöpft", - "Esci": "Abmelden", - "Esecuzione ogni 30 minuti (consigliato)": "Ausführung alle 30 Minuten (empfohlen)", - "Esecuzione ogni ora (8:00-20:00)": "Ausführung jede Stunde (8:00-20:00)", - "Esegue la rigenerazione ogni giorno alle 02:00 e registra il log in": "Führt die Regenerierung täglich um 02:00 Uhr aus und protokolliert in", - "Esegue la rigenerazione ogni giorno alle 02:00 e registra il log in storage/logs/sitemap.log.": "Führt die Regenerierung täglich um 02:00 Uhr aus und protokolliert in storage/logs/sitemap.log.", - "Esegui": "Ausführen", - "Esegui Manutenzione": "Wartung ausführen", - "Esegui tutte le operazioni di manutenzione": "Alle Wartungsoperationen ausführen", - "Eseguito da": "Ausgeführt von", - "Esempio": "Beispiel", - "Esempio di Chiamata": "Aufrufbeispiel", - "Esempio route inglese:": "Englisches Route-Beispiel:", - "Esempio route italiana:": "Italienisches Route-Beispiel:", - "Esempio:": "Beispiel:", - "Esiste già un altro libro con lo stesso identificatore (ISBN/EAN).": "Es existiert bereits ein anderes Buch mit demselben Identifikator (ISBN/EAN).", - "Esiste già un libro con lo stesso identificatore (ISBN/EAN).": "Es existiert bereits ein Buch mit demselben Identifikator (ISBN/EAN).", - "Esistente": "Vorhanden", - "Esito restituzione": "Rückgabeergebnis", - "Español (ES)": "Spanisch (ES)", - "Esplora Catalogo": "Katalog durchsuchen", - "Esplora catalogo": "Katalog durchsuchen", - "Esplora e gestisci gli autori della biblioteca": "Autoren der Bibliothek durchsuchen und verwalten", - "Esplora e gestisci gli editori della biblioteca": "Verlage der Bibliothek durchsuchen und verwalten", - "Esplora e gestisci gli utenti registrati alla biblioteca": "Registrierte Bibliotheksbenutzer durchsuchen und verwalten", - "Esplora e gestisci la collezione della biblioteca": "Die Bibliothekssammlung durchsuchen und verwalten", - "Esplora i generi principali": "Die Hauptgenres entdecken", - "Esplora il catalogo": "Den Katalog entdecken", - "Esplora il catalogo e scopri nuovi titoli.": "Durchsuchen Sie den Katalog und entdecken Sie neue Titel.", - "Esplora il nostro catalogo digitale": "Entdecken Sie unseren digitalen Katalog", - "Esplora il nostro vasto catalogo di libri, prenota i tuoi titoli preferiti e scopri nuove letture": "Entdecken Sie unseren umfangreichen Buchkatalog, reservieren Sie Ihre Lieblingstitel und entdecken Sie neue Lektüre", - "Esplora il nostro vasto catalogo di libri, prenota i tuoi titoli preferiti e scopri nuove letture. Sistema di prestito moderno e intuitivo con ricerca avanzata e categorie organizzate.": "Entdecken Sie unseren umfangreichen Buchkatalog, reservieren Sie Ihre Lieblingstitel und entdecken Sie neue Lektüre. Modernes und intuitives Ausleihsystem mit erweiterter Suche und übersichtlichen Kategorien.", - "Esplora per Categoria": "Nach Kategorie durchsuchen", - "Espone il catalogo locale via protocollo SRU per altre biblioteche.": "Stellt den lokalen Katalog über das SRU-Protokoll für andere Bibliotheken bereit.", - "Esporta": "Exportieren", - "Esporta CSV": "CSV exportieren", - "Esporta CSV (formato compatibile per import)": "CSV exportieren (kompatibles Format für den Import)", - "Esporta Excel": "Excel exportieren", - "Esporta PDF": "PDF exportieren", - "Esporta Prestiti": "Ausleihen exportieren", - "Esporta selezionati": "Ausgewählte exportieren", - "Esportazione di %d libri filtrati su %d totali": "Export von %d gefilterten Büchern von insgesamt %d", - "Esportazione di %d utenti filtrati su %d totali": "Export von %d gefilterten Benutzern von insgesamt %d", - "Esportazione di tutti i %d libri del catalogo": "Export aller %d Bücher aus dem Katalog", - "Esportazione di tutti i %d utenti": "Export aller %d Benutzer", - "Essenziali:": "Erforderlich:", - "Estensione": "Erweiterung", - "Estensione del file non valida.": "Ungültige Dateierweiterung.", - "Estensioni": "Erweiterungen", - "Estrazione del pacchetto fallita": "Paketentpackung fehlgeschlagen", - "Etichetta": "Etikett", - "Etichette": "Etiketten", - "Etichette interne grandi (Herma 4630, Avery 3490)": "Große interne Etiketten (Herma 4630, Avery 3490)", - "European Article Number (opzionale)": "European Article Number (optional)", - "Eventi": "Veranstaltungen", - "Eventi Recenti": "Aktuelle Veranstaltungen", - "Eventi e Incontri": "Veranstaltungen und Treffen", - "Evento": "Veranstaltung", - "Evento aggiornato con successo!": "Veranstaltung erfolgreich aktualisiert!", - "Evento creato con successo!": "Veranstaltung erfolgreich erstellt!", - "Evento della biblioteca": "Bibliotheksveranstaltung", - "Evento eliminato con successo!": "Veranstaltung erfolgreich gelöscht!", - "Evento non trovato.": "Veranstaltung nicht gefunden.", - "Evento visibile sul sito": "Veranstaltung auf der Website sichtbar", - "Eventuali annotazioni sullo stato del libro...": "Anmerkungen zum Zustand des Buches...", - "Excel": "Excel", - "Export": "Export", - "Export per LibraryThing": "Export für LibraryThing", - "Exporting %d filtered users out of %d total": "Export von %d gefilterten Benutzern von insgesamt %d", - "Exporting all %d users": "Export aller %d Benutzer", - "FAQ": "FAQ", - "FATAL ERROR:": "FATALER FEHLER:", - "Facebook": "Facebook", - "Fallimento": "Fehlschlag", - "Fallito": "Fehlgeschlagen", - "Fatal Error:": "Fataler Fehler:", - "Fatto!": "Fertig!", - "Feature %d": "Funktion %d", - "Feature 1": "Funktion 1", - "Feature 2": "Funktion 2", - "Feature 3": "Funktion 3", - "Feature 4": "Funktion 4", - "Features - Caratteristiche": "Funktionen - Merkmale", - "Femmina": "Weiblich", - "File": "Datei", - "File \"%s\" pronto per l'upload": "Datei \"%s\" bereit zum Hochladen", - "File %s nella directory root": "Datei %s im Stammverzeichnis", - "File .env non trovato": ".env-Datei nicht gefunden", - "File .env:": ".env-Datei:", - "File .htaccess creato": ".htaccess-Datei erstellt", - "File .installed:": ".installed-Datei:", - "File CSV (max 10MB)": "CSV-Datei (max. 10 MB)", - "File CSV non valido: usa \";\" o \",\" come separatore.": "Ungültige CSV-Datei: Verwenden Sie \";\" oder \",\" als Trennzeichen.", - "File CSV vuoto o formato non valido": "Leere CSV-Datei oder ungültiges Format", - "File Dewey esistente non è un JSON valido o è corrotto.": "Die vorhandene Dewey-Datei ist kein gültiges JSON oder ist beschädigt.", - "File Dewey non trovato.": "Dewey-Datei nicht gefunden.", - "File JSON con le traduzioni (opzionale). Puoi caricarlo anche in seguito.": "JSON-Datei mit Übersetzungen (optional). Sie können sie auch später hochladen.", - "File JSON non valido": "Ungültige JSON-Datei", - "File Principale:": "Hauptdatei:", - "File URL": "Datei-URL", - "File ZIP con struttura plugin valida": "ZIP-Datei mit gültiger Plugin-Struktur", - "File ZIP non trovato.": "ZIP-Datei nicht gefunden.", - "File ZIP troppo grande. Dimensione massima: 100 MB.": "ZIP-Datei zu groß. Maximale Größe: 100 MB.", - "File attuale": "Aktuelle Datei", - "File backup non trovato": "Sicherungsdatei nicht gefunden", - "File caricato con successo": "Datei erfolgreich hochgeladen", - "File dati iniziali per la lingua selezionata non trovato: %s": "Anfangsdatendatei für die ausgewählte Sprache nicht gefunden: %s", - "File di Esempio": "Beispieldatei", - "File di Traduzione": "Übersetzungsdatei", - "File di Traduzione Attuale": "Aktuelle Übersetzungsdatei", - "File di Traduzione JSON": "JSON-Übersetzungsdatei", - "File di aggiornamento non valido": "Ungültige Aktualisierungsdatei", - "File di aggiornamento non valido (troppo piccolo)": "Ungültige Aktualisierungsdatei (zu klein)", - "File di log non trovato": "Protokolldatei nicht gefunden", - "File di traduzione non trovato": "Übersetzungsdatei nicht gefunden", - "File esistente (data modifica)": "Vorhandene Datei (Änderungsdatum)", - "File non trovato nell'upload.": "Datei im Upload nicht gefunden.", - "File non valido o corrotto.": "Ungültige oder beschädigte Datei.", - "File plugin.json non trovato nel pacchetto.": "Datei plugin.json nicht im Paket gefunden.", - "File plugin.json non valido.": "Ungültige plugin.json-Datei.", - "File principale PHP specificato in %s": "In %s angegebene PHP-Hauptdatei", - "File principale del plugin non trovato.": "Plugin-Hauptdatei nicht gefunden.", - "File sitemap non trovato": "Sitemap-Datei nicht gefunden", - "File sitemap presente": "Sitemap-Datei vorhanden", - "File troppo grande. Dimensione massima 10MB.": "Datei zu groß. Maximale Größe 10 MB.", - "File troppo grande. Dimensione massima 5MB.": "Datei zu groß. Maximale Größe 5 MB.", - "File vuoto o formato non valido": "Leere Datei oder ungültiges Format", - "File:": "Datei:", - "Filtra": "Filtern", - "Filtra mensole per scaffale": "Regale nach Bücherregal filtern", - "Filtra per Mensola": "Nach Regal filtern", - "Filtra per Scaffale": "Nach Bücherregal filtern", - "Filtra per tipo": "Nach Typ filtern", - "Filtri": "Filter", - "Filtri attivi:": "Aktive Filter:", - "Filtri cancellati": "Filter zurückgesetzt", - "Filtri di Ricerca": "Suchfilter", - "Filtri salvati": "Filter gespeichert", - "Filtro Libro": "Buchfilter", - "Filtro Utente": "Benutzerfilter", - "Filtro genere attivo": "Genrefilter aktiv", - "Filtro attivo": "Aktiver Filter", - "Filtro sottogenere attivo": "Subgenre-Filter aktiv", - "Fine": "Fertig", - "Fine:": "Ende:", - "Fino a quando? (opzionale):": "Bis wann? (optional):", - "Fix applicato": "Fix angewendet", - "Fonte dati:": "Datenquelle:", - "Fonti consultate:": "Abgefragte Quellen:", - "Footer": "Fußzeile", - "Formati supportati: JPG, PNG, GIF, WebP. Dimensione massima: 5MB": "Unterstützte Formate: JPG, PNG, GIF, WebP. Maximale Größe: 5 MB", - "Formati supportati: MP3, M4A, OGG • Dimensione massima: 500 MB": "Unterstützte Formate: MP3, M4A, OGG • Max. Größe: 500 MB", - "Formati supportati: PDF, ePub • Dimensione massima: 100 MB": "Unterstützte Formate: PDF, ePub • Max. Größe: 100 MB", - "Formato": "Format", - "Formato CSV Dettagliato": "Detailliertes CSV-Format", - "Formato Etichetta": "Etikettenformat", - "Formato File JSON": "JSON-Dateiformat", - "Formato ISBN non valido.": "Ungültiges ISBN-Format.", - "Formato JSON non valido": "Ungültiges JSON-Format", - "Formato biblioteche scolastiche (compatibile A4)": "Schulbibliotheksformat (A4-kompatibel)", - "Formato biblioteche scolastiche (compatibili A4)": "Schulbibliotheksformat (A4-kompatibel)", - "Formato codice non valido": "Ungültiges Code-Format", - "Formato codice non valido. Usa formato: 599 oppure 599.9 oppure 599.93": "Ungültiges Code-Format. Format verwenden: 599 oder 599.9 oder 599.93", - "Formato codice non valido. Usa: XXX.Y (es. 599.1)": "Ungültiges Code-Format. Verwenden Sie: XXX.Y (z.B. 599.1)", - "Formato dati non valido.": "Ungültiges Datenformat.", - "Formato immagine non supportato": "Nicht unterstütztes Bildformat", - "Formato immagine non supportato. Usa JPG, PNG o WebP.": "Bildformat nicht unterstützt. Verwenden Sie JPG, PNG oder WebP.", - "Formato impostazioni non valido.": "Ungültiges Einstellungsformat.", - "Formato orizzontale per dorso": "Horizontales Format für Buchrücken", - "Formato quadrato Tirrenia": "Tirrenia-Quadratformat", - "Formato richiesta non valido": "Ungültiges Anfrageformat", - "Formato: CSV con separatore %s • Max 10MB": "Format: CSV mit Trennzeichen %s • Max. 10 MB", - "Formato: xx_XX (es. it_IT, en_US, es_ES)": "Format: xx_XX (z.B. it_IT, en_US, es_ES)", - "Forza HTTPS": "HTTPS erzwingen", - "Français (FR)": "Französisch (FR)", - "Frecce ↑ ↓ per il volume": "↑ ↓ Pfeiltasten für Lautstärke", - "From Email": "Absender-E-Mail", - "From Name": "Absendername", - "Funzionamento automatico:": "Automatischer Betrieb:", - "Fuori Catalogo": "Nicht im Katalog", - "Genera automaticamente": "Automatisch generieren", - "Generato il": "Generiert am", - "Generato il:": "Generiert am:", - "Generazione CSV in corso...": "CSV wird generiert...", - "Generazione...": "Wird generiert...", - "Genere": "Genre", - "Genere creato con successo!": "Genre erfolgreich erstellt!", - "Genere letterario": "Literarisches Genre", - "Genere letterario del libro": "Literarisches Genre des Buches", - "Genere padre (opz.)": "Übergeordnetes Genre (opt.)", - "Genere principale": "Hauptgenre", - "Genere:": "Genre:", - "Generi": "Genres", - "Generi Principali": "Hauptgenres", - "Generi e sottogeneri": "Genres und Subgenres", - "Gestione Autori": "Autorenverwaltung", - "Gestione Biblioteca": "Bibliotheksverwaltung", - "Gestione Collocazione": "Standortverwaltung", - "Gestione Contenuti (CMS)": "Inhaltsverwaltung (CMS)", - "Gestione Editori": "Verlagsverwaltung", - "Gestione Eventi": "Veranstaltungsverwaltung", - "Gestione Generi": "Genreverwaltung", - "Gestione Generi e Sottogeneri": "Genre- und Subgenre-Verwaltung", - "Gestione JavaScript Personalizzati basata su Cookie": "Cookie-basierte benutzerdefinierte JavaScript-Verwaltung", - "Gestione Libri": "Bücherverwaltung", - "Gestione Lingue": "Sprachverwaltung", - "Gestione Multilingua": "Mehrsprachigkeitsverwaltung", - "Gestione Plugin": "Plugin-Verwaltung", - "Gestione Plugin LibraryThing": "LibraryThing-Plugin-Verwaltung", - "Gestione Prenotazioni": "Vormerkungsverwaltung", - "Gestione Prestiti": "Ausleihverwaltung", - "Gestione Recensioni": "Rezensionsverwaltung", - "Gestione Temi": "Theme-Verwaltung", - "Gestione Utenti": "Benutzerverwaltung", - "Gestione autori": "Autorenverwaltung", - "Gestione classificazione Dewey: seed e statistiche": "Dewey-Klassifikationsverwaltung: Seed und Statistiken", - "Gestione collezione": "Sammlungsverwaltung", - "Gestione prestiti": "Ausleihverwaltung", - "Gestione recensioni": "Rezensionsverwaltung", - "Gestione utenti": "Benutzerverwaltung", - "Gestisci": "Verwalten", - "Gestisci Eventi": "Veranstaltungen verwalten", - "Gestisci Restituzione": "Rückgabe verwalten", - "Gestisci gli aggiornamenti dell'applicazione": "Anwendungsupdates verwalten", - "Gestisci gli autori della collezione": "Autoren der Sammlung verwalten", - "Gestisci gli eventi della biblioteca: crea, modifica ed elimina eventi con immagini e descrizioni": "Bibliotheksveranstaltungen verwalten: Erstellen, bearbeiten und löschen Sie Veranstaltungen mit Bildern und Beschreibungen", - "Gestisci i dispositivi su cui hai effettuato l'accesso con 'Ricordami'. Puoi disconnetterti da singoli dispositivi o da tutti contemporaneamente.": "Verwalten Sie die Geräte, auf denen Sie sich mit 'Angemeldet bleiben' angemeldet haben. Sie können sich von einzelnen Geräten oder von allen gleichzeitig abmelden.", - "Gestisci i generi letterari": "Literarische Genres verwalten", - "Gestisci i prestiti attivi e storici": "Aktive und historische Ausleihen verwalten", - "Gestisci i tuoi prestiti, esplora il catalogo e scopri nuovi titoli.": "Verwalten Sie Ihre Ausleihen, erkunden Sie den Katalog und entdecken Sie neue Titel.", - "Gestisci i tuoi titoli preferiti, scopri quando tornano disponibili e accedi rapidamente ai dettagli del libro.": "Verwalten Sie Ihre Lieblingstitel, erfahren Sie, wann sie wieder verfügbar sind, und greifen Sie schnell auf die Buchdetails zu.", - "Gestisci il contenuto della pagina Chi Siamo con testo e immagine": "Verwalten Sie den Inhalt der Über-uns-Seite mit Text und Bild", - "Gestisci il contenuto della pagina Chi Siamo con testo e immagine personalizzati": "Verwalten Sie den Inhalt der Über-uns-Seite mit benutzerdefiniertem Text und Bild", - "Gestisci l'accesso all'API per cercare libri via EAN, ISBN e autore": "API-Zugriff zur Buchsuche über EAN, ISBN und Autor verwalten", - "Gestisci la collocazione fisica dei libri": "Physischen Standort der Bücher verwalten", - "Gestisci la visibilità delle categorie di cookie nel banner. I cookie essenziali sono sempre visibili e obbligatori.": "Verwalten Sie die Sichtbarkeit der Cookie-Kategorien im Banner. Essentielle Cookies sind immer sichtbar und erforderlich.", - "Gestisci le case editrici": "Verlage verwalten", - "Gestisci le classificazioni Dewey per italiano e inglese": "Dewey-Klassifikationen für Italienisch und Englisch verwalten", - "Gestisci le estensioni dell'applicazione": "Anwendungserweiterungen verwalten", - "Gestisci preferenze cookie": "Cookie-Einstellungen verwalten", - "Gestisci restituzione": "Rückgabe verwalten", - "Gestisci tutte": "Alle verwalten", - "Gestisci tutti": "Alle verwalten", - "Gestito da": "Verwaltet von", - "Giorni di preavviso per scadenza prestito": "Tage der Vorankündigung vor Ablauf der Ausleihe", - "Giorni per ritirare un prestito approvato": "Tage zur Abholung einer genehmigten Ausleihe", - "Già Installato": "Bereits installiert", - "Già presenti o senza ISBN:": "Bereits vorhanden oder ohne ISBN:", - "Già presenti:": "Bereits vorhanden:", - "Già recensito": "Bereits rezensiert", - "Gli amministratori non richiedono tessera e riceveranno un invito per impostare la password.": "Administratoren benötigen keinen Bibliotheksausweis und erhalten eine Einladung zur Passworteinrichtung.", - "Gli appuntamenti della biblioteca": "Bibliotheksveranstaltungen", - "Gli import CSV e LibraryThing verranno visualizzati qui": "CSV- und LibraryThing-Importe werden hier angezeigt", - "Gli import vengono tracciati automaticamente durante l'elaborazione": "Importe werden während der Verarbeitung automatisch nachverfolgt", - "Gli indici migliorano significativamente le performance delle query, specialmente su tabelle con molti record. Le installazioni recenti li includono già, ma le installazioni più vecchie potrebbero non averli.": "Indizes verbessern die Abfrageleistung erheblich, insbesondere bei Tabellen mit vielen Datensätzen. Neuere Installationen enthalten sie bereits, ältere Installationen möglicherweise nicht.", - "Gli script JavaScript sono divisi in 3 categorie in base alla tipologia di cookie:": "JavaScript-Skripte sind in 3 Kategorien nach Cookie-Typ unterteilt:", - "Gli utenti possono selezionare questa lingua": "Benutzer können diese Sprache auswählen", - "Globale": "Global", - "Google Books API": "Google Books API", - "Google Books API collegata": "Google Books API verbunden", - "Google Books Configurato": "Google Books konfiguriert", - "Google reCAPTCHA v3": "Google reCAPTCHA v3", - "Grazie per aver scelto Pinakes!": "Vielen Dank, dass Sie sich für Pinakes entschieden haben!", - "Gruppo": "Gruppe", - "Guida": "Anleitung", - "Guida alla Gestione Lingue": "Anleitung zur Sprachverwaltung", - "Guida alle Route": "Route-Anleitung", - "HTTP Strict Transport Security forza i browser a usare solo connessioni HTTPS per 1 anno (raccomandato per produzione con SSL valido).": "HTTP Strict Transport Security zwingt Browser, nur HTTPS-Verbindungen für 1 Jahr zu verwenden (empfohlen für Produktion mit gültigem SSL).", - "Hai aggiunto %s copie a \"%s\"": "Sie haben %s Exemplare zu \"%s\" hinzugefügt", - "Hai già un account?": "Haben Sie bereits ein Konto?", - "Hai già un prestito attivo o in attesa per questo libro": "Sie haben bereits eine aktive oder ausstehende Ausleihe für dieses Buch", - "Hai già una prenotazione attiva per questo libro.": "Sie haben bereits eine aktive Vormerkung für dieses Buch.", - "Hai già una richiesta di prestito in attesa per questo libro": "Sie haben bereits eine ausstehende Ausleihanfrage für dieses Buch", - "Hai libri che dovevano essere restituiti. Restituiscili al più presto per evitare sanzioni.": "Sie haben Bücher, die hätten zurückgegeben werden müssen. Bitte geben Sie diese schnellstmöglich zurück, um Mahngebühren zu vermeiden.", - "Hai modifiche non salvate che andranno perse. Continuare?": "Sie haben nicht gespeicherte Änderungen, die verloren gehen. Fortfahren?", - "Hai modifiche non salvate. I dati attuali verranno sostituiti.": "Sie haben nicht gespeicherte Änderungen. Die aktuellen Daten werden ersetzt.", - "Hai modifiche non salvate. Vuoi continuare e perderle?": "Sie haben nicht gespeicherte Änderungen. Möchten Sie fortfahren und diese verlieren?", - "Header HTTP (consigliato):": "HTTP-Header (empfohlen):", - "Heading 1": "Überschrift 1", - "Heading 2": "Überschrift 2", - "Heading 3": "Überschrift 3", - "Heading 4": "Überschrift 4", - "Heading 5": "Überschrift 5", - "Heading 6": "Überschrift 6", - "Hero - Testata principale": "Hero - Hauptbereich", - "Home": "Startseite", - "Homepage": "Startseite", - "Host": "Host", - "Host Database": "Datenbank-Host", - "I Cookie Essenziali sono sempre visibili e non possono essere disabilitati poiché necessari per il funzionamento del sito.": "Essentielle Cookies sind immer sichtbar und können nicht deaktiviert werden, da sie für den Betrieb der Website erforderlich sind.", - "I Miei Preferiti": "Meine Favoriten", - "I backup sono salvati in:": "Backups werden gespeichert in:", - "I campi con * sono obbligatori": "Felder mit * sind Pflichtfelder", - "I campi null indicano dati non disponibili": "Null-Felder zeigen nicht verfügbare Daten an", - "I contenitori fisici principali dove sono organizzati i libri": "Die physischen Hauptbehälter, in denen die Bücher organisiert sind", - "I dati attuali verranno sostituiti.": "Die aktuellen Daten werden ersetzt.", - "I dati devono essere un array non vuoto.": "Die Daten müssen ein nicht leeres Array sein.", - "I dati provengono dal file JSON, nessun seeding necessario.": "Die Daten stammen aus der JSON-Datei, kein Seeding erforderlich.", - "I doppioni (per ID, ISBN13 o EAN) vengono aggiornati senza modificare le copie fisiche": "Duplikate (nach ID, ISBN13 oder EAN) werden aktualisiert, ohne die physischen Exemplare zu ändern", - "I filtri correnti sono stati salvati nell'URL": "Die aktuellen Filter wurden in der URL gespeichert", - "I filtri vengono applicati automaticamente mentre digiti": "Filter werden automatisch beim Tippen angewendet", - "I libri degli altri autori verranno assegnati a questo": "Bücher der anderen Autoren werden diesem zugeordnet", - "I libri degli altri editori verranno assegnati a questo": "Bücher der anderen Verlage werden diesem zugeordnet", - "I livelli (ripiani) all'interno di ogni scaffale": "Die Ebenen (Regalböden) innerhalb jedes Bücherregals", - "I log vengono conservati per 90 giorni per conformità GDPR": "Protokolle werden 90 Tage lang gemäß DSGVO aufbewahrt", - "I miei preferiti": "Meine Favoriten", - "I tuoi preferiti": "Ihre Favoriten", - "ID": "ID", - "ID Editore": "Verlags-ID", - "ID Prestito": "Ausleih-ID", - "ID Prestito:": "Ausleih-ID:", - "ID autori non validi": "Ungültige Autoren-IDs", - "ID editori non validi": "Ungültige Verlags-IDs", - "ID genere non valido": "Ungültige Genre-ID", - "ID import mancante": "Fehlende Import-ID", - "ID libri non validi": "Ungültige Buch-IDs", - "ID libro non valido": "Ungültige Buch-ID", - "ID libro:": "Buch-ID:", - "ID prestito non valido": "Ungültige Ausleih-ID", - "ID sessione non valido": "Ungültige Sitzungs-ID", - "ID utente:": "Benutzer-ID:", - "ID:": "ID:", - "IN RITARDO": "ÜBERFÄLLIG", - "IP": "IP", - "IP Address": "IP-Adresse", - "ISBN": "ISBN", - "ISBN 10": "ISBN 10", - "ISBN 13": "ISBN 13", - "ISBN Mancante": "Fehlende ISBN", - "ISBN a 13 cifre (univoco)": "13-stellige ISBN (eindeutig)", - "ISBN non trovato nelle fonti disponibili.": "ISBN in den verfügbaren Quellen nicht gefunden.", - "ISBN non trovato. Fonti consultate: %s": "ISBN nicht gefunden. Abgefragte Quellen: %s", - "ISBN non valido. Specifica 10 o 13 cifre (eventualmente con X finale).": "Ungültige ISBN. Bitte geben Sie 10 oder 13 Ziffern an (X am Ende erlaubt).", - "ISBN o EAN...": "ISBN oder EAN...", - "ISBN-13:": "ISBN-13:", - "ISBN10": "ISBN10", - "ISBN10 Non Valido": "Ungültige ISBN10", - "ISBN10 deve contenere esattamente 10 caratteri (9 cifre + 1 cifra o X).": "ISBN10 muss genau 10 Zeichen enthalten (9 Ziffern + 1 Ziffer oder X).", - "ISBN10 o ISBN13": "ISBN10 oder ISBN13", - "ISBN13": "ISBN13", - "ISBN13 Non Valido": "Ungültige ISBN13", - "ISBN13 deve contenere esattamente 13 cifre.": "ISBN13 muss genau 13 Ziffern enthalten.", - "ISBN13: %s": "ISBN13: %s", - "ISBN:": "ISBN:", - "IT": "IT", - "Icona FontAwesome": "FontAwesome-Symbol", - "Identità": "Identität", - "Identità Applicazione": "Anwendungsidentität", - "Ieri": "Gestern", - "Ieri alle %s": "Gestern um %s", - "Il Mio Profilo": "Mein Profil", - "Il campo è obbligatorio": "Dieses Feld ist erforderlich", - "Il catalogo SBN (OPAC Nazionale Italiano) è già integrato e viene interrogato automaticamente durante l'importazione ISBN. Non è necessario aggiungerlo come server esterno.": "Der SBN-Katalog (Italienischer National-OPAC) ist bereits integriert und wird beim ISBN-Import automatisch abgefragt. Es ist nicht nötig, ihn als externen Server hinzuzufügen.", - "Il codice %s ha un formato non valido.": "Code %s hat ein ungültiges Format.", - "Il codice %s ha un livello non valido (deve essere 1-7).": "Code %s hat eine ungültige Ebene (muss 1-7 sein).", - "Il codice %s ha un nome non valido (minimo 2 caratteri).": "Code %s hat einen ungültigen Namen (mindestens 2 Zeichen).", - "Il codice %s non è un figlio valido di %s.": "Code %s ist kein gültiges Unterelement von %s.", - "Il codice %s è duplicato.": "Code %s ist doppelt vorhanden.", - "Il codice deve iniziare con le stesse tre cifre della classe principale": "Der Code muss mit denselben drei Ziffern der Hauptklasse beginnen", - "Il codice lingua non può essere modificato dopo la creazione.": "Der Sprachcode kann nach der Erstellung nicht mehr geändert werden.", - "Il codice lingua è obbligatorio (es. it_IT, en_US)": "Der Sprachcode ist erforderlich (z.B. it_IT, en_US)", - "Il codice scaffale \"%s\" esiste già. Usa un codice diverso.": "Der Regalcode \"%s\" existiert bereits. Verwenden Sie einen anderen Code.", - "Il codice tessera sarà generato automaticamente (formato: ADMIN-YYYYMMDD-XXX).": "Der Ausweiscode wird automatisch generiert (Format: ADMIN-JJJJMMTT-XXX).", - "Il codice verrà inserito in un tag": "Der Code wird in einem Tag eingefügt", - "Il codice verrà inserito in un tag ": "Der Code wird in einem -Tags ein", - "Il cron utilizza gli stessi permessi dell'utente di sistema che lo esegue": "Cron verwendet dieselben Berechtigungen wie der ausführende Systembenutzer", - "Il database '%s' non è vuoto. Deve essere un database vuoto.": "Die Datenbank '%s' ist nicht leer. Es muss eine leere Datenbank sein.", - "Il database deve essere vuoto.": "Die Datenbank muss leer sein.", - "Il database è coerente e non sono stati rilevati problemi.": "Die Datenbank ist konsistent und es wurden keine Probleme festgestellt.", - "Il database è già ottimizzato!": "Die Datenbank ist bereits optimiert!", - "Il database è stato installato, ma mancano le librerie PHP necessarie per eseguire l'applicazione.": "Die Datenbank wurde installiert, aber die zum Betrieb der Anwendung erforderlichen PHP-Bibliotheken fehlen.", - "Il download dovrebbe iniziare automaticamente": "Der Download sollte automatisch beginnen", - "Il file": "Die Datei", - "Il file JSON deve contenere coppie chiave-valore:": "Die JSON-Datei muss Schlüssel-Wert-Paare enthalten:", - "Il file JSON non è valido:": "Die JSON-Datei ist ungültig:", - "Il file deve avere estensione .csv": "Die Datei muss die Erweiterung .csv haben", - "Il file deve avere estensione .tsv, .csv o .txt": "Die Datei muss die Erweiterung .tsv, .csv oder .txt haben", - "Il file deve contenere coppie chiave (italiano) - valore (traduzione).": "Die Datei muss Schlüssel (Italienisch) - Wert (Übersetzung) Paare enthalten.", - "Il file deve essere un JSON valido": "Die Datei muss gültiges JSON sein", - "Il file generato si trova in": "Die generierte Datei befindet sich in", - "Il file generato si trova in public/sitemap.xml": "Die generierte Datei befindet sich unter public/sitemap.xml", - "Il file non sembra essere in formato LibraryThing. Colonne richieste: Book Id, Title, Primary Author, ISBNs": "Die Datei scheint nicht im LibraryThing-Format zu sein. Erforderliche Spalten: Book Id, Title, Primary Author, ISBNs", - "Il file supera la dimensione massima consentita": "Die Datei überschreitet die maximal zulässige Größe", - "Il file supera la dimensione massima di %s MB": "Die Datei überschreitet die maximale Größe von %s MB", - "Il formato scelto verrà utilizzato per generare i PDF delle etichette con codice a barre.": "Das gewählte Format wird zur Erstellung der Etiketten-PDFs mit Barcode verwendet.", - "Il formato selezionato verrà applicato a tutte le etichette generate dal sistema.": "Das ausgewählte Format wird auf alle vom System generierten Etiketten angewendet.", - "Il libro selezionato è già in prestito. Seleziona un altro libro.": "Das ausgewählte Buch ist bereits ausgeliehen. Wählen Sie ein anderes Buch aus.", - "Il libro viene consegnato subito all'utente. Se deselezionato, il prestito rimarrà in stato 'Da ritirare' fino alla conferma del ritiro.": "Das Buch wird dem Benutzer sofort übergeben. Wenn deaktiviert, bleibt die Ausleihe im Status 'Zur Abholung bereit', bis die Abholung bestätigt wird.", - "Il link di verifica email è scaduto o non valido. Registrati nuovamente per ricevere un nuovo link.": "Der E-Mail-Bestätigungslink ist abgelaufen oder ungültig. Bitte registrieren Sie sich erneut, um einen neuen Link zu erhalten.", - "Il link di verifica non è valido. Assicurati di aver copiato l'intero link dall'email.": "Der Bestätigungslink ist ungültig. Stellen Sie sicher, dass Sie den vollständigen Link aus der E-Mail kopiert haben.", - "Il logo verrà ridimensionato automaticamente": "Das Logo wird automatisch angepasst", - "Il mio profilo": "Mein Profil", - "Il nome del genere è obbligatorio.": "Der Genrename ist erforderlich.", - "Il nome dell'": "Der Name des/der", - "Il nome dell'API key è obbligatorio.": "Der Name des API-Schlüssels ist erforderlich.", - "Il nome dell'autore è obbligatorio.": "Der Autorenname ist erforderlich.", - "Il nome dell'editore è obbligatorio.": "Der Verlagsname ist erforderlich.", - "Il nome della rosa": "Der Name der Rose", - "Il nome inglese è obbligatorio": "Der englische Name ist erforderlich", - "Il nome inglese è obbligatorio (es. Italian, English)": "Der englische Name ist erforderlich (z.B. Italian, English)", - "Il nome nativo è obbligatorio": "Der Muttersprachenname ist erforderlich", - "Il nome nativo è obbligatorio (es. Italiano, English)": "Der Muttersprachenname ist erforderlich (z.B. Italiano, English)", - "Il nostro team è stato notificato e sta lavorando per risolvere il problema.": "Unser Team wurde benachrichtigt und arbeitet an der Lösung des Problems.", - "Il pacchetto contiene percorsi non validi.": "Das Paket enthält ungültige Pfade.", - "Il pacchetto non contiene file validi.": "Das Paket enthält keine gültigen Dateien.", - "Il plugin è attualmente installato e funzionante.": "Das Plugin ist derzeit installiert und funktioniert.", - "Il prestito è stato approvato con successo.": "Die Ausleihe wurde erfolgreich genehmigt.", - "Il prestito è stato rifiutato.": "Die Ausleihe wurde abgelehnt.", - "Il server ha restituito una risposta non valida. Controlla i log per dettagli.": "Der Server hat eine ungültige Antwort zurückgegeben. Überprüfen Sie die Protokolle für Details.", - "Il sistema creerà automaticamente libri, autori ed editori": "Das System erstellt automatisch Bücher, Autoren und Verlage", - "Il sistema di aggiornamento è pronto.": "Das Aktualisierungssystem ist bereit.", - "Il sistema include un cron job che gestisce automaticamente:": "Das System beinhaltet einen Cron-Job, der automatisch verwaltet:", - "Il sistema invierà automaticamente una email di promemoria agli utenti prima della scadenza del prestito. Il valore predefinito è 3 giorni.": "Das System sendet automatisch eine Erinnerungs-E-Mail an die Benutzer vor Ablauf der Ausleihe. Der Standardwert beträgt 3 Tage.", - "Il sito web deve essere un URL valido (es. https://www.esempio.com).": "Die Website muss eine gültige URL sein (z.B. https://www.beispiel.de).", - "Il sito web deve essere un URL valido.": "Die Website muss eine gültige URL sein.", - "Il termine per il ritiro è scaduto": "Die Abholfrist ist abgelaufen", - "Il termine per il ritiro è scaduto. Vuoi annullare questo prestito?": "Die Abholfrist ist abgelaufen. Möchten Sie diese Ausleihe stornieren?", - "Il titolo del libro è obbligatorio.": "Der Buchtitel ist erforderlich.", - "Il titolo principale della pagina": "Der Haupttitel der Seite", - "Il titolo verrà utilizzato anche per generare l'URL della pagina": "Der Titel wird auch zur Generierung der Seiten-URL verwendet", - "Il titolo è obbligatorio.": "Der Titel ist erforderlich.", - "Il tuo account è in attesa di approvazione. Riceverai un'email quando sarà attivato": "Ihr Konto wartet auf Freigabe. Sie erhalten eine E-Mail, wenn es aktiviert wird", - "Il tuo account è stato sospeso. Contatta l'amministratore per maggiori informazioni": "Ihr Konto wurde gesperrt. Wenden Sie sich an den Administrator für weitere Informationen", - "Il tuo browser non supporta la riproduzione audio.": "Ihr Browser unterstützt keine Audiowiedergabe.", - "Il tuo sistema Pinakes per catalogare, gestire e condividere la tua collezione libraria.": "Ihr Pinakes-System zum Katalogisieren, Verwalten und Teilen Ihrer Buchsammlung.", - "Illustratore": "Illustrator", - "Curatore": "Kurator", - "Nome del curatore dell'opera (se applicabile)": "Name des Kurators (falls zutreffend)", - "Immagine": "Bild", - "Immagine Caricata!": "Bild hochgeladen!", - "Immagine Open Graph": "Open-Graph-Bild", - "Immagine Twitter": "Twitter-Bild", - "Immagine attuale": "Aktuelles Bild", - "Immagine di copertina della pagina (opzionale)": "Seitentitelbild (optional)", - "Immagine di sfondo Hero": "Hero-Hintergrundbild", - "Immagine in Evidenza": "Hervorgehobenes Bild", - "Immagine mostrata quando condividi la pagina su social media (Facebook, Twitter, LinkedIn). Se vuoto, usa l'immagine hero di sfondo. Dimensioni consigliate: 1200x630px (rapporto 1.91:1).": "Bild, das beim Teilen der Seite in sozialen Medien angezeigt wird (Facebook, Twitter, LinkedIn). Wenn leer, wird das Hero-Hintergrundbild verwendet. Empfohlene Größe: 1200x630px (Verhältnis 1,91:1).", - "Immagine mostrata quando condividi su social. Dimensioni consigliate: 1200x630px (rapporto 1.91:1). Se vuoto, usa l'immagine hero di sfondo.": "Bild, das beim Teilen in sozialen Medien angezeigt wird. Empfohlene Größe: 1200x630px (Verhältnis 1,91:1). Wenn leer, wird das Hero-Hintergrundbild verwendet.", - "Immagine non valida": "Ungültiges Bild", - "Immagine per Twitter/X. Dimensioni consigliate: 1200x675px o 1200x1200px. Se vuoto, usa l'immagine Open Graph.": "Bild für Twitter/X. Empfohlene Abmessungen: 1200x675px oder 1200x1200px. Wenn leer, wird das Open Graph-Bild verwendet.", - "Immagini JPG, PNG o WebP (max 5MB)": "JPG-, PNG- oder WebP-Bilder (max. 5 MB)", - "Import": "Import", - "Import CSV": "CSV-Import", - "Import CSV Standard": "Standard-CSV-Import", - "Import LibraryThing": "LibraryThing-Import", - "Import Libri da CSV": "Bücher aus CSV importieren", - "Import Massivo Libri": "Massenbuchimport", - "Import completato: %d libri nuovi, %d libri aggiornati, %d autori creati, %d editori creati": "Import abgeschlossen: %d neue Bücher, %d aktualisierte Bücher, %d Autoren erstellt, %d Verlage erstellt", - "Import da LibraryThing": "Import aus LibraryThing", - "Import dati iniziali...": "Importiere Anfangsdaten...", - "Import in corso...": "Import läuft...", - "Import massivo da CSV": "Massenimport aus CSV", - "Import schema in corso...": "Schema wird importiert...", - "Import trigger...": "Trigger werden importiert...", - "Importa": "Importieren", - "Importa Dati": "Daten importieren", - "Importa Libri": "Bücher importieren", - "Importa da ISBN": "Aus ISBN importieren", - "Importa i tuoi libri esportati da LibraryThing.com (formato TSV)": "Importieren Sie Ihre von LibraryThing.com exportierten Bücher (TSV-Format)", - "Importante:": "Wichtig:", - "Importati": "Importiert", - "Importato": "Importiert", - "Importato con successo. %d voci totali.": "Erfolgreich importiert. %d Einträge insgesamt.", - "Importazione completata con successo!": "Import erfolgreich abgeschlossen!", - "Importazione in corso...": "Import läuft...", - "Importazione libro": "Buch wird importiert", - "Importazione...": "Importiere...", - "Impossibile acquisire il lock. Riprova tra qualche secondo.": "Sperre kann nicht erworben werden. Bitte versuchen Sie es in einigen Sekunden erneut.", - "Impossibile aggiornare l'utente. Riprova più tardi.": "Benutzer kann nicht aktualisiert werden. Bitte versuchen Sie es später erneut.", - "Impossibile aggiornare la chiave Google Books.": "Der Google-Books-Schlüssel konnte nicht aktualisiert werden.", - "Impossibile aggiornare la posizione automatica": "Die automatische Position konnte nicht aktualisiert werden", - "Impossibile aggiornare le copie.": "Die Exemplare konnten nicht aktualisiert werden.", - "Impossibile approvare la recensione": "Die Rezension konnte nicht genehmigt werden", - "Impossibile aprire file di backup per scrittura": "Backup-Datei konnte nicht zum Schreiben geöffnet werden", - "Impossibile aprire il file": "Datei kann nicht geöffnet werden", - "Impossibile aprire il file CSV": "Die CSV-Datei konnte nicht geöffnet werden", - "Impossibile aprire il file ZIP.": "Die ZIP-Datei konnte nicht geöffnet werden.", - "Impossibile archiviare il messaggio.": "Die Nachricht konnte nicht archiviert werden.", - "Impossibile caricare configurazione database": "Datenbankkonfiguration kann nicht geladen werden", - "Impossibile caricare gli editori. Controlla la console per i dettagli.": "Verlage konnten nicht geladen werden. Überprüfen Sie die Konsole für Details.", - "Impossibile caricare i libri. Controlla la console per i dettagli.": "Bücher konnten nicht geladen werden. Überprüfen Sie die Konsole für Details.", - "Impossibile completare l'operazione. Riprova più tardi.": "Der Vorgang konnte nicht abgeschlossen werden. Bitte versuchen Sie es später erneut.", - "Impossibile comunicare con il server. Riprova più tardi.": "Kommunikation mit dem Server nicht möglich. Bitte versuchen Sie es später erneut.", - "Impossibile configurare autocomplete: elementi mancanti": "Autovervollständigung konnte nicht konfiguriert werden: fehlende Elemente", - "Impossibile connettersi a GitHub": "Verbindung zu GitHub konnte nicht hergestellt werden", - "Impossibile contattare il servizio di scraping. Riprova più tardi.": "Der Scraping-Dienst konnte nicht kontaktiert werden. Bitte versuchen Sie es später erneut.", - "Impossibile creare directory di backup": "Backup-Verzeichnis konnte nicht erstellt werden", - "Impossibile creare directory di backup applicazione": "Anwendungs-Backup-Verzeichnis konnte nicht erstellt werden", - "Impossibile creare directory di backup: %s": "Backup-Verzeichnis konnte nicht erstellt werden: %s", - "Impossibile creare directory temporanea": "Temporäres Verzeichnis konnte nicht erstellt werden", - "Impossibile creare directory: %s": "Verzeichnis konnte nicht erstellt werden: %s", - "Impossibile creare il file .env. Verifica i permessi.": "Die .env-Datei konnte nicht erstellt werden. Überprüfen Sie die Berechtigungen.", - "Impossibile creare il file di lock per l'aggiornamento": "Aktualisierungs-Lock-Datei konnte nicht erstellt werden", - "Impossibile creare la cartella di upload.": "Das Upload-Verzeichnis konnte nicht erstellt werden.", - "Impossibile creare la directory del plugin.": "Das Plugin-Verzeichnis konnte nicht erstellt werden.", - "Impossibile creare la mensola. Riprova più tardi.": "Regal kann nicht erstellt werden. Bitte versuchen Sie es später erneut.", - "Impossibile creare la prenotazione": "Die Vormerkung konnte nicht erstellt werden", - "Impossibile creare la struttura del plugin.": "Die Plugin-Struktur konnte nicht erstellt werden.", - "Impossibile creare lo scaffale. Riprova più tardi.": "Schrank kann nicht erstellt werden. Bitte versuchen Sie es später erneut.", - "Impossibile creare lock file": "Lock-Datei konnte nicht erstellt werden", - "Impossibile determinare l'ID del plugin Open Library.": "Die ID des Open Library-Plugins konnte nicht ermittelt werden.", - "Impossibile eliminare il backup": "Backup konnte nicht gelöscht werden", - "Impossibile eliminare il file di manutenzione": "Die Wartungsdatei konnte nicht gelöscht werden", - "Impossibile eliminare il libro: ci sono prestiti o prenotazioni attive. Termina prima i prestiti/prenotazioni.": "Buch kann nicht gelöscht werden: Es gibt aktive Ausleihen oder Vormerkungen. Beenden Sie zuerst die Ausleihen/Vormerkungen.", - "Impossibile eliminare il messaggio.": "Die Nachricht konnte nicht gelöscht werden.", - "Impossibile eliminare l'autore: sono presenti libri associati.": "Der Autor kann nicht gelöscht werden: Es sind zugehörige Bücher vorhanden.", - "Impossibile eliminare l'editore: sono presenti libri associati.": "Der Verlag kann nicht gelöscht werden: Es sind zugehörige Bücher vorhanden.", - "Impossibile eliminare l'installer:": "Der Installer kann nicht gelöscht werden:", - "Impossibile eliminare l'installer: devi prima installare le dipendenze PHP con": "Der Installer kann nicht gelöscht werden: Sie müssen zuerst die PHP-Abhängigkeiten installieren mit", - "Impossibile eliminare la notifica.": "Die Benachrichtigung konnte nicht gelöscht werden.", - "Impossibile eliminare la recensione": "Rezension kann nicht gelöscht werden", - "Impossibile eliminare una copia attualmente in prestito.": "Ein derzeit ausgeliehenes Exemplar kann nicht gelöscht werden.", - "Impossibile eliminare: alcuni editori hanno libri associati": "Löschen nicht möglich: Einige Verlage haben zugeordnete Bücher", - "Impossibile eliminare: alcuni libri hanno prestiti attivi": "Löschen nicht möglich: Einige Bücher haben aktive Ausleihen", - "Impossibile eliminare: la mensola contiene libri": "Löschen nicht möglich: Das Regal enthält Bücher", - "Impossibile eliminare: lo scaffale contiene libri": "Löschen nicht möglich: Der Schrank enthält Bücher", - "Impossibile eliminare: lo scaffale contiene mensole": "Löschen nicht möglich: Der Schrank enthält Regale", - "Impossibile generare la risposta JSON.": "Die JSON-Antwort konnte nicht generiert werden.", - "Impossibile importare i dati per questo ISBN.": "Die Daten für diese ISBN konnten nicht importiert werden.", - "Impossibile inizializzare Uppy per i contenuti digitali.": "Uppy für digitale Inhalte konnte nicht initialisiert werden.", - "Impossibile inviare la recensione": "Die Rezension konnte nicht gesendet werden", - "Impossibile inviare la recensione.": "Die Rezension konnte nicht gesendet werden.", - "Impossibile leggere il file .env": ".env-Datei kann nicht gelesen werden", - "Impossibile leggere il file caricato": "Die hochgeladene Datei konnte nicht gelesen werden", - "Impossibile leggere il file di backup": "Backup-Datei konnte nicht gelesen werden", - "Impossibile leggere il file di log": "Protokolldatei kann nicht gelesen werden", - "Impossibile modificare una copia attualmente in prestito. Prima termina il prestito o imposta lo stato su \"Disponibile\" per chiuderlo automaticamente.": "Ein derzeit ausgeliehenes Exemplar kann nicht bearbeitet werden. Beenden Sie zuerst die Ausleihe oder setzen Sie den Status auf \"Verfügbar\", um sie automatisch zu schließen.", - "Impossibile notificare utente copia non disponibile": "Benutzer kann nicht über nicht verfügbares Exemplar benachrichtigt werden", - "Impossibile notificare utente: dati mancanti": "Benutzer kann nicht benachrichtigt werden: fehlende Daten", - "Impossibile processare l'immagine.": "Das Bild konnte nicht verarbeitet werden.", - "Impossibile recuperare i dati degli autori": "Die Autorendaten konnten nicht abgerufen werden", - "Impossibile recuperare i dati degli editori": "Die Verlagsdaten konnten nicht abgerufen werden", - "Impossibile recuperare informazioni sulla release": "Release-Informationen konnten nicht abgerufen werden", - "Impossibile revocare la sessione": "Sitzung kann nicht widerrufen werden", - "Impossibile riaprire il file ZIP": "ZIP-Datei kann nicht erneut geöffnet werden", - "Impossibile ricalcolare la disponibilità del libro.": "Buchverfügbarkeit kann nicht neu berechnet werden.", - "Impossibile ridurre le copie a %d. Ci sono %d copie non disponibili (in prestito, perse o danneggiate). Il numero minimo di copie totali è %d.": "Die Exemplare können nicht auf %d reduziert werden. Es gibt %d nicht verfügbare Exemplare (ausgeliehen, verloren oder beschädigt). Die Mindestanzahl der Gesamtexemplare beträgt %d.", - "Impossibile rifiutare la recensione": "Die Rezension konnte nicht abgelehnt werden", - "Impossibile rigenerare la sitemap: %s": "Die Sitemap konnte nicht regeneriert werden: %s", - "Impossibile salvare il file di aggiornamento": "Aktualisierungsdatei konnte nicht gespeichert werden", - "Impossibile salvare l'utente. Riprova più tardi.": "Der Benutzer konnte nicht gespeichert werden. Bitte versuchen Sie es später erneut.", - "Impossibile salvare le impostazioni.": "Einstellungen können nicht gespeichert werden.", - "Impossibile scaricare (libro senza ISBN):": "Download nicht möglich (Buch ohne ISBN):", - "Impossibile scrivere file di backup": "Backup-Datei konnte nicht geschrieben werden", - "Impossibile scrivere nel file .env": ".env-Datei kann nicht beschrieben werden", - "Impossibile segnare come letta la notifica.": "Die Benachrichtigung konnte nicht als gelesen markiert werden.", - "Impossibile segnare tutte le notifiche come lette.": "Alle Benachrichtigungen konnten nicht als gelesen markiert werden.", - "Impossibile segnare tutti i messaggi come letti.": "Alle Nachrichten konnten nicht als gelesen markiert werden.", - "Imposta come Predefinita": "Als Standard festlegen", - "Imposta come attiva o predefinita": "Als aktiv oder Standard festlegen", - "Imposta come lingua predefinita per nuovi utenti": "Als Standardsprache für neue Benutzer festlegen", - "Imposta il nome mostrato nel backend e il logo utilizzato nel layout.": "Legen Sie den im Backend angezeigten Namen und das im Layout verwendete Logo fest.", - "Imposta nel file .env: APP_CANONICAL_URL=%s": "In der .env-Datei setzen: APP_CANONICAL_URL=%s", - "Imposta password": "Passwort festlegen", - "Impostare questa lingua come predefinita?\n\nQuesta diventerà la lingua dell'intera applicazione per tutti gli utenti.": "Diese Sprache als Standard festlegen?\n\nDiese wird zur Sprache der gesamten Anwendung für alle Benutzer.", - "Impostare questa lingua come predefinita?\\n\\nQuesta diventerà la lingua dell'intera applicazione per tutti gli utenti.": "Diese Sprache als Standard festlegen?\\n\\nDiese wird zur Sprache der gesamten Anwendung für alle Benutzer.", - "Impostazioni": "Einstellungen", - "Impostazioni API Book Scraper salvate correttamente.": "Book Scraper API-Einstellungen erfolgreich gespeichert.", - "Impostazioni Applicazione": "Anwendungseinstellungen", - "Impostazioni Date": "Datumseinstellungen", - "Impostazioni Discogs salvate correttamente.": "Discogs-Einstellungen erfolgreich gespeichert.", - "Impostazioni SEO": "SEO-Einstellungen", - "Impostazioni Z39.50 salvate correttamente.": "Z39.50-Einstellungen erfolgreich gespeichert.", - "Impostazioni avanzate aggiornate correttamente.": "Erweiterte Einstellungen erfolgreich aktualisiert.", - "Impostazioni contatti aggiornate correttamente.": "Kontakteinstellungen erfolgreich aktualisiert.", - "Impostazioni email aggiornate correttamente.": "E-Mail-Einstellungen erfolgreich aktualisiert.", - "Impostazioni generali aggiornate correttamente.": "Allgemeine Einstellungen erfolgreich aktualisiert.", - "Impostazioni privacy aggiornate correttamente.": "Datenschutzeinstellungen erfolgreich aktualisiert.", - "Impostazioni salvate.": "Einstellungen gespeichert.", - "In Attesa": "Ausstehend", - "In Attesa di Approvazione": "Genehmigung ausstehend", - "In Corso": "In Bearbeitung", - "In Riparazione": "In Reparatur", - "In Ritardo": "Überfällig", - "In attesa": "Ausstehend", - "In attesa di approvazione": "Genehmigung ausstehend", - "In corso": "In Bearbeitung", - "In corso di restituzione": "Rückgabe ausstehend", - "In corso...": "In Bearbeitung...", - "In manutenzione": "In Wartung", - "In prestito": "Ausgeliehen", - "In prestito fino al": "Ausgeliehen bis", - "In questa pagina trovi tutti gli eventi, gli incontri e i laboratori organizzati dalla biblioteca.": "Auf dieser Seite finden Sie alle Veranstaltungen, Treffen und Workshops, die von der Bibliothek organisiert werden.", - "In ritardo": "Überfällig", - "In scadenza": "Bald fällig", - "Inattivo": "Inaktiv", - "Incompleto": "Unvollständig", - "Indice %s creato su %s": "Index %s erstellt auf %s", - "Indice ISBN": "ISBN-Index", - "Indici creati con successo": "Indizes erfolgreich erstellt", - "Indici creati:": "Erstellte Indizes:", - "Indici di ottimizzazione creati OK": "Optimierungsindizes erfolgreich erstellt", - "Indietro": "Zurück", - "Indirizzo": "Adresse", - "Indirizzo completo": "Vollständige Adresse", - "Indirizzo completo *": "Vollständige Adresse *", - "Indirizzo:": "Adresse:", - "Info": "Info", - "Info HSTS:": "HSTS-Info:", - "Informazione": "Information", - "Informazioni": "Informationen", - "Informazioni Base": "Basisinformationen", - "Informazioni Evento": "Veranstaltungsinformationen", - "Informazioni Importanti": "Wichtige Informationen", - "Informazioni Libro": "Buchinformationen", - "Informazioni Personali": "Persönliche Informationen", - "Informazioni Prestito": "Ausleihinformationen", - "Informazioni Report": "Berichtsinformationen", - "Informazioni di Contatto": "Kontaktinformationen", - "Informazioni di contatto": "Kontaktinformationen", - "Informazioni editore": "Verlagsinformationen", - "Informazioni generali": "Allgemeine Informationen", - "Informazioni personali": "Persönliche Informationen", - "Informazioni sullo Storico Import": "Informationen zur Importhistorie", - "Informazioni tessera": "Ausweisinformationen", - "Informazioni utili per il personale": "Nützliche Informationen für das Personal", - "Inizia Installazione": "Installation starten", - "Inizia ad aggiungere libri al catalogo": "Beginnen Sie, Bücher zum Katalog hinzuzufügen", - "Inizia aggiungendo il primo libro alla collezione": "Beginnen Sie, indem Sie das erste Buch zur Sammlung hinzufügen", - "Inizia aggiungendo la prima lingua.": "Beginnen Sie, indem Sie die erste Sprache hinzufügen.", - "Inizia caricando il tuo primo plugin": "Beginnen Sie, indem Sie Ihr erstes Plugin hochladen", - "Inizia creando il primo genere letterario": "Beginnen Sie, indem Sie das erste literarische Genre erstellen", - "Inizia la Tua Avventura Letteraria": "Starten Sie Ihr literarisches Abenteuer", - "Inizializzazione...": "Initialisierung...", - "Inizio": "Beginn", - "Inizio installazione...": "Installation wird gestartet...", - "Inizio:": "Beginn:", - "Inserimento Manuale Dewey": "Manuelle Dewey-Eingabe", - "Inserisci $1": "$1 eingeben", - "Inserisci codice locale (es. es_ES per Spagnolo)": "Gebietsschema-Code eingeben (z.B. es_ES für Spanisch)", - "Inserisci il codice Dewey completo (supporta fino a 4 decimali)": "Geben Sie den vollständigen Dewey-Code ein (unterstützt bis zu 4 Dezimalstellen)", - "Inserisci il motivo del rifiuto...": "Geben Sie den Ablehnungsgrund ein...", - "Inserisci il titolo": "Titel eingeben", - "Inserisci la data di inizio (YYYY-MM-DD)": "Startdatum eingeben (JJJJ-MM-TT)", - "Inserisci la tua email per ricevere il link di reset.": "Geben Sie Ihre E-Mail-Adresse ein, um den Link zum Zurücksetzen zu erhalten.", - "Inserisci la tua email per ricevere un link di reset": "Geben Sie Ihre E-Mail-Adresse ein, um einen Link zum Zurücksetzen zu erhalten", - "Inserisci la tua nuova password": "Geben Sie Ihr neues Passwort ein", - "Inserisci le credenziali del tuo database MySQL. Assicurati che il database sia già stato creato e sia vuoto.": "Geben Sie Ihre MySQL-Datenbank-Zugangsdaten ein. Stellen Sie sicher, dass die Datenbank bereits erstellt wurde und leer ist.", - "Inserisci le informazioni del nuovo evento": "Geben Sie die Informationen für die neue Veranstaltung ein", - "Inserisci parole chiave separate da virgole per facilitare la ricerca": "Geben Sie durch Kommas getrennte Schlüsselwörter ein, um die Suche zu erleichtern", - "Inserisci qualsiasi codice Dewey (anche se non presente nell'elenco)": "Geben Sie einen beliebigen Dewey-Code ein (auch wenn er nicht in der Liste enthalten ist)", - "Inserisci solo script che NON tracciano utenti. Per analytics/marketing usa le sezioni dedicate.": "Fügen Sie nur Skripte ein, die Benutzer NICHT verfolgen. Für Analytics/Marketing verwenden Sie die entsprechenden Bereiche.", - "Inserisci un codice Dewey": "Geben Sie einen Dewey-Code ein", - "Inserisci un codice ISBN per continuare.": "Geben Sie einen ISBN-Code ein, um fortzufahren.", - "Inserisci un numero valido di copie": "Geben Sie eine gültige Anzahl von Exemplaren ein", - "Inserisci una breve biografia dell'autore...": "Geben Sie eine kurze Biografie des Autors ein...", - "Instagram": "Instagram", - "Installa": "Installieren", - "Installa Plugin": "Plugin installieren", - "Installato": "Installiert", - "Installato:": "Installiert:", - "Installazione": "Installation", - "Installazione Completata": "Installation abgeschlossen", - "Installazione Completata!": "Installation abgeschlossen!", - "Installazione Cron Job": "Cron-Job-Installation", - "Installazione Database": "Datenbankinstallation", - "Installazione Guidata": "Geführte Installation", - "Installazione completata": "Installation abgeschlossen", - "Installazione database non completa. Tabelle mancanti: %s": "Datenbankinstallation unvollständig. Fehlende Tabellen: %s", - "Installazione database non completa. Trovate %d tabelle, attese %d": "Datenbankinstallation unvollständig. %d Tabellen gefunden, %d erwartet", - "Installazione delle tabelle del database e configurazione iniziale...": "Datenbanktabellen und Erstkonfiguration werden installiert...", - "Installazione fallita": "Installation fehlgeschlagen", - "Installazione file": "Dateien werden installiert", - "Installazione in corso...": "Installation läuft...", - "Installazione italiana usa": "Italienische Installation verwendet", - "Installazione plugin Open Library...": "Open Library Plugin wird installiert...", - "Installer Pinakes": "Pinakes Installer", - "Installer eliminato con successo!": "Installer erfolgreich gelöscht!", - "Insufficiente": "Unzureichend", - "Integrità dati": "Datenintegrität", - "Internal server error": "Interner Serverfehler", - "Intestazione": "Kopfzeile", - "Intestazione sezione": "Abschnittsüberschrift", - "Inventario": "Inventar", - "Invia Email": "E-Mail senden", - "Invia Richiesta": "Anfrage senden", - "Invia link": "Link senden", - "Invia link di reset": "Zurücksetzungslink senden", - "Invia messaggio": "Nachricht senden", - "Invia recensione": "Rezension einreichen", - "Inviaci un messaggio": "Senden Sie uns eine Nachricht", - "Inviata agli amministratori quando viene ricevuta una nuova recensione da approvare.": "Wird an Administratoren gesendet, wenn eine neue Rezension zur Genehmigung eingeht.", - "Inviata agli utenti quando un libro nella wishlist torna disponibile. Il libro rimane nella wishlist ma non riceverà altre notifiche per lo stesso libro.": "Wird an Benutzer gesendet, wenn ein Buch auf ihrer Wunschliste wieder verfügbar wird. Das Buch bleibt auf der Wunschliste, es werden jedoch keine weiteren Benachrichtigungen für dasselbe Buch gesendet.", - "Inviata agli utenti quando un libro nella wishlist torna disponibile. Il libro viene automaticamente rimosso dalla wishlist dopo l'invio della notifica per evitare duplicati.": "Wird an Benutzer gesendet, wenn ein Buch auf ihrer Wunschliste wieder verfügbar wird. Das Buch wird nach dem Versand der Benachrichtigung automatisch von der Wunschliste entfernt, um Duplikate zu vermeiden.", - "Inviata ai nuovi utenti per impostare la password del loro account.": "Wird an neue Benutzer gesendet, um das Passwort für ihr Konto festzulegen.", - "Inviata all'utente al termine della registrazione per confermare la ricezione e l'attesa di approvazione.": "Wird nach der Registrierung an den Benutzer gesendet, um den Eingang zu bestätigen und auf die Genehmigung hinzuweisen.", - "Inviata all'utente quando un amministratore approva l'account.": "Wird an den Benutzer gesendet, wenn ein Administrator das Konto genehmigt.", - "Inviata all'utente quando un amministratore approva una richiesta di prestito.": "Wird an den Benutzer gesendet, wenn ein Administrator eine Ausleihanfrage genehmigt.", - "Inviata all'utente quando un amministratore rifiuta una richiesta di prestito.": "Wird an den Benutzer gesendet, wenn ein Administrator eine Ausleihanfrage ablehnt.", - "Inviata quando il tempo per ritirare un libro è scaduto e il prestito è stato annullato.": "Wird gesendet, wenn die Abholfrist abgelaufen ist und die Ausleihe storniert wurde.", - "Inviata quando un libro prenotato diventa disponibile e viene convertito in prestito pendente.": "Wird gesendet, wenn ein vorgemerktes Buch verfügbar wird und in eine ausstehende Ausleihe umgewandelt wird.", - "Inviata quando un prestito è stato approvato e il libro è pronto per il ritiro.": "Wird gesendet, wenn eine Ausleihe genehmigt wurde und das Buch zur Abholung bereit ist.", - "Inviata quando un ritiro viene annullato dall'amministratore.": "Wird gesendet, wenn eine Abholung vom Administrator storniert wird.", - "Inviata quando un utente viene invitato come amministratore.": "Wird gesendet, wenn ein Benutzer als Administrator eingeladen wird.", - "Inviato": "Gesendet", - "Invio in corso...": "Wird gesendet...", - "Invio notifica prenotazione fallito": "Senden der Vormerkungsbenachrichtigung fehlgeschlagen", - "Invita gli utenti a registrarsi": "Benutzer zur Registrierung einladen", - "Invito amministratore": "Administratoreinladung", - "Italiano (IT)": "Italienisch (IT)", - "JPG, PNG, GIF, WEBP - Max 5MB": "JPG, PNG, GIF, WEBP – Max. 5 MB", - "JSON non valido.": "Ungültiges JSON.", - "JavaScript Analitici": "Analyse-JavaScript", - "JavaScript Essenziali": "Essentielles JavaScript", - "JavaScript Marketing": "Marketing-JavaScript", - "L'API key può essere fornita in due modi:": "Der API-Schlüssel kann auf zwei Arten bereitgestellt werden:", - "L'API è limitata a 50 risultati per richiesta": "Die API ist auf 50 Ergebnisse pro Anfrage begrenzt", - "L'ID primario deve essere presente nella lista degli autori da unire": "Die primäre ID muss in der Liste der zusammenzuführenden Autoren vorhanden sein", - "L'ID primario deve essere presente nella lista degli editori da unire": "Die primäre ID muss in der Liste der zusammenzuführenden Verlage vorhanden sein", - "L'URL canonico non è valido. Deve iniziare con http:// o https://": "Die kanonische URL ist ungültig. Sie muss mit http:// oder https:// beginnen", - "L'URL del calendario è stato copiato negli appunti.": "Die Kalender-URL wurde in die Zwischenablage kopiert.", - "L'URL fornito non è valido": "Die angegebene URL ist ungültig", - "L'accesso alla cartella installer è automaticamente bloccato dopo l'installazione.": "Der Zugriff auf den Installer-Ordner wird nach der Installation automatisch gesperrt.", - "L'applicazione NON può funzionare senza questo passaggio!": "Die Anwendung kann NICHT ohne diesen Schritt funktionieren!", - "L'applicazione risulta correttamente configurata.": "Die Anwendung ist korrekt konfiguriert.", - "L'applicazione è stata installata correttamente e tutte le verifiche sono andate a buon fine.": "Die Anwendung wurde erfolgreich installiert und alle Prüfungen wurden bestanden.", - "L'email di attivazione è stata inviata. L'utente potrà verificare il proprio account cliccando il link ricevuto (valido 7 giorni).": "Die Aktivierungs-E-Mail wurde gesendet. Der Benutzer kann sein Konto durch Klicken auf den erhaltenen Link verifizieren (7 Tage gültig).", - "L'immagine verrà scaricata al salvataggio": "Das Bild wird beim Speichern heruntergeladen", - "L'immagine è troppo grande. Max 5MB.": "Das Bild ist zu groß. Max. 5 MB.", - "L'indirizzo email deve essere valido.": "Die E-Mail-Adresse muss gültig sein.", - "L'installazione non è completa o valida.": "Die Installation ist nicht vollständig oder gültig.", - "L'installazione è stata completata correttamente e tutte le verifiche sono andate a buon fine.": "Die Installation wurde erfolgreich abgeschlossen und alle Überprüfungen waren erfolgreich.", - "L'installazione è stata completata senza errori.": "Die Installation wurde fehlerfrei abgeschlossen.", - "L'ora dell'evento deve essere nel formato corretto (HH:MM).": "Die Uhrzeit des Ereignisses muss im korrekten Format vorliegen (HH:MM).", - "L'ora deve essere nel formato corretto (HH:MM).": "Die Uhrzeit muss im korrekten Format vorliegen (HH:MM).", - "L'ultima sezione che invita all'azione": "Der abschließende Call-to-Action-Bereich", - "L'utente del database non ha i permessi per creare i TRIGGER. L'installazione è stata completata, ma per garantire la piena integrità dei dati è necessario installarli manualmente.": "Der Datenbankbenutzer hat keine Berechtigung zum Erstellen von TRIGGERN. Die Installation wurde abgeschlossen, aber um die vollständige Datenintegrität zu gewährleisten, müssen diese manuell installiert werden.", - "L'utente ha ritirato il libro?": "Hat der Benutzer das Buch abgeholt?", - "L'utente non è in stato sospeso. Solo gli utenti sospesi richiedono approvazione.": "Der Benutzer befindet sich nicht im gesperrten Status. Nur gesperrte Benutzer erfordern eine Genehmigung.", - "L'utente riceverà un'email con link di verifica (valido 7 giorni) e potrà attivare autonomamente l'account.": "Der Benutzer erhält eine E-Mail mit Bestätigungslink (7 Tage gültig) und kann das Konto selbstständig aktivieren.", - "L'utente riceverà una notifica via email della prenotazione creata": "Der Benutzer erhält eine E-Mail-Benachrichtigung über die erstellte Vormerkung", - "L'utente richiesto non esiste nel database.": "Der angeforderte Benutzer existiert nicht in der Datenbank.", - "L'utente sarà attivato immediatamente e riceverà un'email di benvenuto. Potrà accedere subito.": "Der Benutzer wird sofort aktiviert und erhält eine Willkommens-E-Mail. Er kann sich sofort anmelden.", - "L'utente è stato attivato e può già effettuare il login. È stata inviata un'email di benvenuto.": "Der Benutzer wurde aktiviert und kann sich bereits anmelden. Eine Willkommens-E-Mail wurde gesendet.", - "L'utente è stato eliminato.": "Der Benutzer wurde gelöscht.", - "La Tua Biblioteca Digitale": "Ihre digitale Bibliothek", - "La cartella vendor/ esiste e contiene le librerie necessarie.": "Der Ordner vendor/ existiert und enthält die erforderlichen Bibliotheken.", - "La classificazione Dewey è utilizzata per organizzare i libri per argomento secondo standard internazionali": "Die Dewey-Klassifikation wird verwendet, um Bücher nach Thema gemäß internationalen Standards zu organisieren", - "La collocazione può essere assegnata automaticamente o inserita manualmente durante la creazione/modifica del libro": "Der Standort kann automatisch zugewiesen oder bei der Erstellung/Bearbeitung des Buches manuell eingegeben werden", - "La collocazione è l'indirizzo fisico che identifica dove si trova un libro nella biblioteca.": "Der Standort ist die physische Adresse, die angibt, wo sich ein Buch in der Bibliothek befindet.", - "La copertina verrà rimossa al salvataggio del libro": "Das Cover wird beim Speichern des Buches entfernt", - "La copia assegnata è stata segnalata come persa o danneggiata": "Das zugewiesene Exemplar wurde als verloren oder beschädigt gemeldet", - "La copia non è più disponibile": "Das Exemplar ist nicht mehr verfügbar", - "La cronologia degli aggiornamenti apparirà qui": "Der Aktualisierungsverlauf wird hier angezeigt", - "La data dell'evento è obbligatoria e deve essere nel formato corretto.": "Das Veranstaltungsdatum ist erforderlich und muss im korrekten Format vorliegen.", - "La data dell'evento è obbligatoria.": "Das Veranstaltungsdatum ist erforderlich.", - "La data di nascita deve essere precedente alla data di morte.": "Das Geburtsdatum muss vor dem Sterbedatum liegen.", - "La data non può essere nel passato.": "Das Datum darf nicht in der Vergangenheit liegen.", - "La lingua contrassegnata come 'Predefinita' verrà usata in tutta l'applicazione per tutti gli utenti. Per cambiare la lingua dell'intera app, clicca sull'icona stella": "Die als 'Standard' markierte Sprache wird in der gesamten Anwendung für alle Benutzer verwendet. Um die Sprache der gesamten App zu ändern, klicken Sie auf das Stern-Symbol", - "La mia bacheca": "Mein Dashboard", - "La modalità manutenzione non era attiva": "Der Wartungsmodus war nicht aktiv", - "La pagina che stai cercando non esiste o è stata spostata.": "Die Seite, die Sie suchen, existiert nicht oder wurde verschoben.", - "La pagina che stai cercando non esiste.": "Die von Ihnen gesuchte Seite existiert nicht.", - "La password deve contenere almeno 8 caratteri, lettere maiuscole, minuscole e numeri": "Das Passwort muss mindestens 8 Zeichen mit Groß- und Kleinbuchstaben sowie Zahlen enthalten", - "La password deve contenere almeno una lettera maiuscola, una minuscola e un numero": "Das Passwort muss mindestens einen Großbuchstaben, einen Kleinbuchstaben und eine Zahl enthalten", - "La password deve contenere almeno una lettera maiuscola, una minuscola e un numero.": "Das Passwort muss mindestens einen Großbuchstaben, einen Kleinbuchstaben und eine Zahl enthalten.", - "La password deve contenere maiuscole, minuscole e numeri.": "Das Passwort muss Großbuchstaben, Kleinbuchstaben und Zahlen enthalten.", - "La password deve essere lunga almeno 8 caratteri": "Das Passwort muss mindestens 8 Zeichen lang sein", - "La password deve essere lunga almeno 8 caratteri!": "Das Passwort muss mindestens 8 Zeichen lang sein!", - "La password deve essere lunga almeno 8 caratteri.": "Das Passwort muss mindestens 8 Zeichen lang sein.", - "La password non può superare i 72 caratteri.": "Das Passwort darf nicht länger als 72 Zeichen sein.", - "La password attuale non è corretta.": "Das aktuelle Passwort ist falsch.", - "La posizione fisica è indipendente dalla classificazione Dewey e indica dove si trova il libro sugli scaffali.": "Die physische Position ist unabhängig von der Dewey-Klassifikation und gibt an, wo sich das Buch in den Regalen befindet.", - "La posizione in coda sarà calcolata automaticamente in base alle prenotazioni esistenti": "Die Warteschlangenposition wird automatisch anhand der bestehenden Vormerkungen berechnet", - "La posizione viene assegnata automaticamente": "Die Position wird automatisch zugewiesen", - "La prenotazione è scaduta": "Die Vormerkung ist abgelaufen", - "La recensione è stata approvata e pubblicata con successo.": "Die Rezension wurde erfolgreich genehmigt und veröffentlicht.", - "La recensione è stata eliminata definitivamente.": "Die Rezension wurde endgültig gelöscht.", - "La recensione è stata rifiutata e non sarà pubblicata.": "Die Rezension wurde abgelehnt und wird nicht veröffentlicht.", - "La richiesta ha impiegato troppo tempo. Riprova.": "Die Anfrage hat zu lange gedauert. Bitte versuchen Sie es erneut.", - "La risposta include tutti i dati del libro:": "Die Antwort enthält alle Buchdaten:", - "La scadenza verrà estesa di 14 giorni": "Die Frist wird um 14 Tage verlängert", - "La sessione è scaduta. Aggiorna la pagina e riprova.": "Die Sitzung ist abgelaufen. Aktualisieren Sie die Seite und versuchen Sie es erneut.", - "La sezione principale che appare per prima sulla home": "Der Hauptbereich, der als Erstes auf der Startseite erscheint", - "La sitemap viene aggiornata automaticamente quando premi il pulsante oppure tramite lo script CLI": "Die Sitemap wird automatisch aktualisiert, wenn Sie die Schaltfläche drücken oder über das CLI-Skript", - "La sitemap viene aggiornata automaticamente quando premi il pulsante oppure tramite lo script CLI php scripts/generate-sitemap.php. Usa questa azione dopo aver importato un grande numero di libri o modifiche ai contenuti CMS.": "Die Sitemap wird automatisch aktualisiert, wenn Sie die Schaltfläche drücken oder über das CLI-Skript php scripts/generate-sitemap.php. Verwenden Sie diese Aktion nach dem Import vieler Bücher oder Änderungen an CMS-Inhalten.", - "La tua biblioteca digitale...": "Ihre digitale Bibliothek...", - "La tua prenotazione per \"%s\" è stata messa in attesa. %s. Verrai notificato quando sarà disponibile una nuova copia.": "Ihre Vormerkung für \"%s\" wurde in die Warteschlange gestellt. %s. Sie werden benachrichtigt, wenn ein neues Exemplar verfügbar ist.", - "La tua richiesta di prestito è stata inviata. Riceverai una notifica quando verrà approvata.": "Ihre Ausleihanfrage wurde gesendet. Sie erhalten eine Benachrichtigung, wenn sie genehmigt wird.", - "La tua sessione è scaduta. Per motivi di sicurezza, effettua nuovamente l'accesso": "Ihre Sitzung ist abgelaufen. Bitte melden Sie sich aus Sicherheitsgründen erneut an", - "La tua sessione è scaduta. Per motivi di sicurezza, ricarica la pagina e riprova": "Ihre Sitzung ist abgelaufen. Bitte laden Sie aus Sicherheitsgründen die Seite neu und versuchen Sie es erneut", - "La tua sessione è scaduta. Per motivi di sicurezza, ricarica la pagina ed effettua nuovamente l'accesso.": "Ihre Sitzung ist abgelaufen. Bitte laden Sie aus Sicherheitsgründen die Seite neu und melden Sie sich erneut an.", - "La tua wishlist è vuota": "Ihre Wunschliste ist leer", - "La versione %s è disponibile. Prima di aggiornare, verrà creato un backup automatico del database.": "Version %s ist verfügbar. Vor der Aktualisierung wird automatisch ein Datenbank-Backup erstellt.", - "Lascia una recensione": "Rezension schreiben", - "Lascia vuoto o usa \"Genera\" per assegnare automaticamente la prossima posizione disponibile.": "Leer lassen oder \"Generieren\" verwenden, um automatisch die nächste verfügbare Position zuzuweisen.", - "Lascia vuoto o usa \\": "Leer lassen oder \\ verwenden", - "Lascia vuoto per 1 mese": "Leer lassen für 1 Monat", - "Lascia vuoto per auto-rilevamento. Necessario solo su macOS/Linux con socket personalizzati.": "Leer lassen für automatische Erkennung. Nur auf macOS/Linux mit benutzerdefinierten Sockets erforderlich.", - "Lascia vuoto per generare automaticamente": "Leer lassen, um automatisch zu generieren", - "Lascia vuoto per inviare un link di impostazione": "Leer lassen, um einen Einrichtungslink zu senden", - "Lascia vuoto per mantenere il nome attuale": "Leer lassen, um den aktuellen Namen beizubehalten", - "Lascia vuoto per mantenere la chiave esistente. Inserisci un nuovo valore per aggiornarla.": "Leer lassen, um den bestehenden Schlüssel beizubehalten. Geben Sie einen neuen Wert ein, um ihn zu aktualisieren.", - "Lascia vuoto per nascondere il social dal footer": "Leer lassen, um das soziale Netzwerk in der Fußzeile auszublenden", - "Lascia vuoto per nascondere il titolo": "Leer lassen, um den Titel auszublenden", - "Lascia vuoto per non modificare": "Leer lassen, um nicht zu ändern", - "Lascia vuoto se l'autore è vivente": "Leer lassen, wenn der Autor noch lebt", - "Le API key disattivate restituiranno errore 401": "Deaktivierte API-Schlüssel geben Fehler 401 zurück", - "Le Mie Prenotazioni": "Meine Vormerkungen", - "Le Mie Recensioni": "Meine Rezensionen", - "Le copie disponibili vengono calcolate automaticamente": "Verfügbare Exemplare werden automatisch berechnet", - "Le date rosse non sono disponibili. La richiesta verrà valutata da un amministratore.": "Rot markierte Daten sind nicht verfügbar. Ihre Anfrage wird von einem Administrator geprüft.", - "Le date rosse o arancioni non sono disponibili. La richiesta verrà valutata da un amministratore.": "Rote oder orangefarbene Daten sind nicht verfügbar. Die Anfrage wird von einem Administrator geprüft.", - "Le mie prenotazioni": "Meine Vormerkungen", - "Le password non coincidono": "Die Passwörter stimmen nicht überein", - "Le password non coincidono!": "Die Passwörter stimmen nicht überein!", - "Le password non coincidono.": "Die Passwörter stimmen nicht überein.", - "Le password non corrispondono": "Die Passwörter stimmen nicht überein", - "Le posizioni si generano automaticamente": "Positionen werden automatisch generiert", - "Le route non possono contenere spazi": "Routen dürfen keine Leerzeichen enthalten", - "Le route sono gli URL usati nell'applicazione. Traducendole, puoi avere URL in italiano o inglese in base alla lingua dell'installazione.": "Routen sind die URLs, die in der Anwendung verwendet werden. Durch Übersetzung können Sie URLs je nach Installationssprache auf Italienisch oder Englisch haben.", - "Le sessioni scadono automaticamente per proteggere i tuoi dati.": "Sitzungen laufen automatisch ab, um Ihre Daten zu schützen.", - "Le tue recensioni": "Ihre Rezensionen", - "Letta": "Gelesen", - "Letto": "Gelesen", - "Lettore": "Leser", - "Libero": "Frei", - "Library Management System": "Bibliotheksverwaltungssystem", - "LibraryThing TSV": "LibraryThing TSV", - "Librerie di upload non caricate. Ricarica la pagina.": "Upload-Bibliotheken nicht geladen. Bitte laden Sie die Seite neu.", - "Libri": "Bücher", - "Libri Disponibili": "Verfügbare Bücher", - "Libri Importati": "Importierte Bücher", - "Libri Prestati": "Ausgeliehene Bücher", - "Libri Totali": "Bücher gesamt", - "Libri attualmente in prestito": "Derzeit ausgeliehene Bücher", - "Libri per Collocazione": "Bücher nach Standort", - "Libri prenotati dagli utenti": "Von Benutzern vorgemerkte Bücher", - "Libro": "Buch", - "Libro '%s' (ID: %d) ha copie disponibili negative: %d": "Buch '%s' (ID: %d) hat negative verfügbare Exemplare: %d", - "Libro '%s' (ID: %d) ha più copie disponibili (%d) che totali (%d)": "Buch '%s' (ID: %d) hat mehr verfügbare Exemplare (%d) als Gesamtexemplare (%d)", - "Libro '%s' (ID: %d) ha stato '%s' ma copie disponibili: %d": "Buch '%s' (ID: %d) hat Status '%s', aber verfügbare Exemplare: %d", - "Libro Esistente:": "Vorhandenes Buch:", - "Libro Già Esistente": "Buch bereits vorhanden", - "Libro ID %d ha posizioni coda non sequenziali: %s": "Buch ID %d hat nicht-sequenzielle Warteschlangenpositionen: %s", - "Libro aggiornato con successo!": "Buch erfolgreich aktualisiert!", - "Libro aggiunto con successo!": "Buch erfolgreich hinzugefügt!", - "Libro da prenotare": "Vorzumerkendes Buch", - "Libro disponibile per la prenotazione": "Buch zur Vormerkung verfügbar", - "Libro e utente sono campi obbligatori.": "Buch und Benutzer sind Pflichtfelder.", - "Libro non disponibile": "Buch nicht verfügbar", - "Libro non trovato": "Buch nicht gefunden", - "Libro non trovato nel database Open Library": "Buch nicht in der Open Library-Datenbank gefunden", - "Libro non trovato su Open Library.": "Buch nicht auf Open Library gefunden.", - "Libro non trovato.": "Buch nicht gefunden.", - "Libro prenotato disponibile": "Vorgemerktes Buch verfügbar", - "Libro senza titolo": "Buch ohne Titel", - "Libro:": "Buch:", - "Licenza": "Lizenz", - "Limite massimo rinnovi raggiunto": "Maximale Anzahl an Verlängerungen erreicht", - "Limiti: massimo 50 libri con scraping attivo, timeout 5 minuti": "Grenzen: maximal 50 Bücher mit aktivem Scraping, Timeout 5 Minuten", - "Lingua": "Sprache", - "Lingua App": "App-Sprache", - "Lingua Attiva": "Aktive Sprache", - "Lingua Predefinita": "Standardsprache", - "Lingua Predefinita:": "Standardsprache:", - "Lingua aggiornata con successo": "Sprache erfolgreich aktualisiert", - "Lingua creata con successo": "Sprache erfolgreich erstellt", - "Lingua eliminata con successo": "Sprache erfolgreich gelöscht", - "Lingua non supportata": "Nicht unterstützte Sprache", - "Lingua non trovata": "Sprache nicht gefunden", - "Lingua originale del libro": "Originalsprache des Buches", - "Lingua predefinita impostata con successo": "Standardsprache erfolgreich festgelegt", - "Lingue": "Sprachen", - "Lingue Configurate": "Konfigurierte Sprachen", - "Lingue valide": "Gültige Sprachen", - "Link": "Link", - "Link Cookie Statement": "Link zur Cookie-Erklärung", - "Link Cookie Technologies": "Link zu Cookie-Technologien", - "Link Social Media": "Social-Media-Links", - "Link al file digitale (se disponibile)": "Link zur digitalen Datei (falls verfügbar)", - "Link all'audiolibro (se disponibile)": "Link zum Hörbuch (falls verfügbar)", - "Link copiato!": "Link kopiert!", - "Link di esempio": "Beispiel-Link", - "Link di reset non valido o scaduto": "Zurücksetzungslink ungültig oder abgelaufen", - "Link pulsante": "Schaltflächen-Link", - "LinkedIn": "LinkedIn", - "Lista": "Liste", - "Livello": "Ebene", - "Livello ${m.numero_livello}": "Ebene ${m.numero_livello}", - "Livello *": "Ebene *", - "Livello 1 (Classi)": "Ebene 1 (Klassen)", - "Livello 2 (Divisioni)": "Ebene 2 (Abteilungen)", - "Livello 3 (Specifiche)": "Ebene 3 (Spezifika)", - "Livello principale (es. Prosa, Poesia, Teatro)": "Hauptebene (z. B. Prosa, Lyrik, Theater)", - "Lo script CLI utilizza il valore di APP_CANONICAL_URL. Assicurati che sia configurato correttamente per evitare URL duplicati.": "Das CLI-Skript verwendet den Wert von APP_CANONICAL_URL. Stellen Sie sicher, dass dieser korrekt konfiguriert ist, um doppelte URLs zu vermeiden.", - "Lo stato della prenotazione sarà impostato automaticamente come \"attiva\"": "Der Status der Vormerkung wird automatisch auf \"aktiv\" gesetzt", - "Lo stato della prenotazione sarà impostato automaticamente come \\": "Der Status der Vormerkung wird automatisch gesetzt als \\", - "Loans": "Ausleihen", - "Locale": "Lokal", - "Locale non supportato.": "Nicht unterstützte Sprache.", - "Lock file creato (installazione protetta)": "Lock-Datei erstellt (Installation geschützt)", - "Log": "Log", - "Log Sicurezza": "Sicherheitsprotokolle", - "Log di Sicurezza": "Sicherheitsprotokoll", - "Login": "Anmeldung", - "Login Riuscito": "Anmeldung erfolgreich", - "Logo": "Logo", - "Logo Applicazione (opzionale)": "Anwendungslogo (optional)", - "Logout effettuato con successo": "Abmeldung erfolgreich", - "MP3, M4A o OGG, max 500 MB": "MP3, M4A oder OGG, max. 500 MB", - "Mai generata": "Nie generiert", - "Mai utilizzata": "Nie verwendet", - "MaintenanceService ICS non generato": "MaintenanceService ICS nicht generiert", - "MaintenanceService connessione database fallita": "MaintenanceService Datenbankverbindung fehlgeschlagen", - "MaintenanceService errore attivazione prestiti": "MaintenanceService Fehler bei Ausleihe-Aktivierung", - "MaintenanceService errore attivazione prestito": "MaintenanceService Fehler bei Ausleihe-Aktivierung", - "MaintenanceService errore conversione prenotazioni": "MaintenanceService Fehler bei Vormerkungsumwandlung", - "MaintenanceService errore durante hook login admin": "MaintenanceService Fehler beim Admin-Login-Hook", - "MaintenanceService errore elaborazione prenotazione": "MaintenanceService Fehler bei Vormerkungsverarbeitung", - "MaintenanceService errore generazione ICS": "MaintenanceService Fehler bei ICS-Generierung", - "MaintenanceService errore notifiche": "MaintenanceService Benachrichtigungsfehler", - "MaintenanceService errore prenotazioni scadute": "MaintenanceService Fehler bei abgelaufenen Vormerkungen", - "MaintenanceService errore prestiti in ritardo": "MaintenanceService Fehler bei überfälligen Ausleihen", - "MaintenanceService errore ritiri scaduti": "MaintenanceService Fehler bei abgelaufenen Abholungen", - "MaintenanceService errore scadenza prenotazione": "MaintenanceService Fehler bei Vormerkungsablauf", - "MaintenanceService errore scadenza ritiro": "MaintenanceService Fehler bei Abholfristablauf", - "MaintenanceService eseguito al login admin": "MaintenanceService bei Admin-Anmeldung ausgeführt", - "MaintenanceService prenotazione convertita in prestito": "MaintenanceService Vormerkung in Ausleihe umgewandelt", - "MaintenanceService prenotazione scaduta": "MaintenanceService Vormerkung abgelaufen", - "MaintenanceService ritiro scaduto": "MaintenanceService Abholung abgelaufen", - "Mancante": "Fehlend", - "Mantieni in ritardo": "Als überfällig beibehalten", - "Manuale": "Manuell", - "Manutenzione": "Wartung", - "Manutenzione Completa": "Vollständige Wartung", - "Manutenzione completata: %d record corretti": "Wartung abgeschlossen: %d Datensätze korrigiert", - "Manutenzione disattivata": "Wartung deaktiviert", - "Manutenzione giornaliera del database": "Tägliche Datenbankwartung", - "Mappa Interattiva": "Interaktive Karte", - "Mappa del sito per i motori di ricerca": "Sitemap für Suchmaschinen", - "Mappa non disponibile": "Karte nicht verfügbar", - "Mario": "Max", - "Marketing:": "Marketing:", - "Maschio": "Männlich", - "Max 10.000 righe • Max 100 copie per libro": "Max. 10.000 Zeilen • Max. 100 Exemplare pro Buch", - "Mediocre": "Mäßig", - "Membro": "Mitglied", - "Memory limit aumentato": "Speicherlimit erhöht", - "Mensola": "Regal", - "Mensola creata e %d posizioni generate.": "Regal erstellt und %d Positionen generiert.", - "Mensola creata.": "Regal erstellt.", - "Mensola eliminata": "Regal gelöscht", - "Mensole": "Regale", - "Menu": "Menü", - "Menu \"Prestiti\" nell'admin sidebar": "Menü \"Ausleihen\" in der Admin-Seitenleiste", - "Menu Principale": "Hauptmenü", - "Merge - Aggiungi e aggiorna (mantiene dati esistenti)": "Zusammenführen – Hinzufügen und aktualisieren (behält vorhandene Daten bei)", - "Merge completato": "Zusammenführung abgeschlossen", - "Merge completato: %d aggiunti, %d aggiornati, %d invariati. Totale: %d voci.": "Zusammenführung abgeschlossen: %d hinzugefügt, %d aktualisiert, %d unverändert. Gesamt: %d Einträge.", - "Mese": "Monat", - "Messaggi": "Nachrichten", - "Messaggi di Contatto": "Kontaktnachrichten", - "Messaggio": "Nachricht", - "Messaggio inviato con successo! Ti risponderemo al più presto.": "Nachricht erfolgreich gesendet! Wir werden Ihnen so schnell wie möglich antworten.", - "Messaggio non trovato.": "Nachricht nicht gefunden.", - "Metadati:": "Metadaten:", - "Metodo di invio": "Versandmethode", - "Migrazione database": "Datenbankmigration", - "Minimo 8 caratteri": "Mindestens 8 Zeichen", - "Minimo 8 caratteri, con lettere maiuscole, minuscole e numeri": "Mindestens 8 Zeichen, mit Groß- und Kleinbuchstaben sowie Zahlen", - "Mittente": "Absender", - "Mittente (email)": "Absender (E-Mail)", - "Mittente (nome)": "Absender (Name)", - "Modalità Catalogo": "Katalogmodus", - "Modalità Solo Catalogo": "Nur-Katalog-Modus", - "Modalità di importazione": "Importmodus", - "Modalità manutenzione disattivata": "Wartungsmodus deaktiviert", - "Modalità manutenzione rimossa automaticamente (scaduta)": "Wartungsmodus automatisch entfernt (abgelaufen)", - "Moderatore": "Moderator", - "Modifica": "Bearbeiten", - "Modifica %s": "%s bearbeiten", - "Modifica Autore": "Autor bearbeiten", - "Modifica Autore:": "Autor bearbeiten:", - "Modifica Chi Siamo": "Über uns bearbeiten", - "Modifica Editore": "Verlag bearbeiten", - "Modifica Evento": "Veranstaltung bearbeiten", - "Modifica Evento: %s": "Veranstaltung bearbeiten: %s", - "Modifica Homepage": "Startseite bearbeiten", - "Modifica Libro": "Buch bearbeiten", - "Modifica Lingua:": "Sprache bearbeiten:", - "Modifica Prenotazione": "Vormerkung bearbeiten", - "Modifica Prenotazione #%s": "Vormerkung #%s bearbeiten", - "Modifica Route": "Route bearbeiten", - "Modifica Route Tradotte": "Übersetzte Routen bearbeiten", - "Modifica Stato Copia": "Exemplar-Status bearbeiten", - "Modifica Utente": "Benutzer bearbeiten", - "Modifica i contenuti della homepage: hero, features, CTA e immagine di sfondo": "Inhalte der Startseite bearbeiten: Hero, Features, CTA und Hintergrundbild", - "Modifica il contenuto e le impostazioni della pagina": "Seiteninhalt und Einstellungen bearbeiten", - "Modifica le informazioni dell'evento": "Veranstaltungsinformationen bearbeiten", - "Modifica le pagine statiche del sito": "Statische Seiten der Website bearbeiten", - "Modifica prestito": "Ausleihe bearbeiten", - "Modifica prestito #%s": "Ausleihe #%s bearbeiten", - "Modifica profilo": "Profil bearbeiten", - "Modifica stato": "Status bearbeiten", - "Modifica utente": "Benutzer bearbeiten", - "Modifiche non salvate": "Nicht gespeicherte Änderungen", - "Modulo": "Modul", - "Molto buono": "Sehr gut", - "Mondadori": "Mondadori", - "Monitora tentativi di login e eventi di sicurezza": "Anmeldeversuche und Sicherheitsereignisse überwachen", - "Mostra": "Anzeigen", - "Mostra API Key": "API-Schlüssel anzeigen", - "Mostra Cookie Analitici": "Analyse-Cookies anzeigen", - "Mostra Cookie di Marketing": "Marketing-Cookies anzeigen", - "Mostra _MENU_ libri": "_MENU_ Bücher anzeigen", - "Mostra categoria \\": "Kategorie anzeigen \\", - "Mostra filtri": "Filter anzeigen", - "Mostra gli ultimi libri aggiunti al catalogo": "Die zuletzt zum Katalog hinzugefügten Bücher anzeigen", - "Mostra questa guida": "Diese Anleitung anzeigen", - "Motivo del rifiuto (opzionale)": "Ablehnungsgrund (optional)", - "Motivo del rifiuto (opzionale):": "Ablehnungsgrund (optional):", - "N. Inventario": "Inventar-Nr.", - "N. Libri": "Anz. Bücher", - "N/D": "k. A.", - "Narrativa": "Belletristik", - "Nascita a": "Geburtsdatum bis", - "Nascita da": "Geburtsdatum von", - "Nascondi": "Ausblenden", - "Nascondi API Key": "API-Schlüssel ausblenden", - "Nascondi filtri": "Filter ausblenden", - "Nascondi se il sito non utilizza cookie di marketing o advertising": "Ausblenden, wenn die Website keine Marketing- oder Werbe-Cookies verwendet", - "Nascondi se il sito non utilizza strumenti di analytics (es. Google Analytics)": "Ausblenden, wenn die Website keine Analysetools verwendet (z. B. Google Analytics)", - "Nascosto": "Verborgen", - "Nato il %s": "Geboren am %s", - "Nazionalità": "Nationalität", - "Nederlands (NL)": "Niederländisch (NL)", - "Nei Preferiti": "In Favoriten", - "Nella collezione": "In der Sammlung", - "Nessun Problema": "Keine Probleme", - "Nessun aggiornamento": "Keine Aktualisierungen", - "Nessun aggiornamento registrato": "Keine Aktualisierungen verzeichnet", - "Nessun autore selezionato": "Keine Autoren ausgewählt", - "Nessun autore trovato": "Keine Autoren gefunden", - "Nessun autore trovato, premi Invio per aggiungerne uno nuovo": "Kein Autor gefunden, drücken Sie Enter, um einen neuen hinzuzufügen", - "Nessun backup disponibile": "Keine Backups verfügbar", - "Nessun dato": "Keine Daten", - "Nessun dato trovato su LibreriaUniversitaria/Feltrinelli.": "Keine Daten auf LibreriaUniversitaria/Feltrinelli gefunden.", - "Nessun dato.": "Keine Daten.", - "Nessun editore selezionato": "Keine Verlage ausgewählt", - "Nessun editore trovato": "Keine Verlage gefunden", - "Nessun editore trovato per": "Kein Verlag gefunden für", - "Nessun editore trovato per \"${query}\" — premi Invio per crearne uno nuovo.": "Kein Verlag für \"${query}\" gefunden — drücken Sie Enter, um einen neuen anzulegen.", - "Nessun elemento trovato": "Keine Elemente gefunden", - "Nessun errore": "Keine Fehler", - "Nessun evento": "Keine Veranstaltungen", - "Nessun evento in programma": "Keine Veranstaltungen geplant", - "Nessun file caricato": "Keine Datei hochgeladen", - "Nessun file caricato.": "Keine Datei hochgeladen.", - "Nessun file di traduzione caricato. Carica un file JSON per abilitare questa lingua.": "Keine Übersetzungsdatei hochgeladen. Laden Sie eine JSON-Datei hoch, um diese Sprache zu aktivieren.", - "Nessun genere trovato": "Keine Genres gefunden", - "Nessun import registrato": "Keine Importe aufgezeichnet", - "Nessun libro": "Keine Bücher", - "Nessun libro ancora inserito": "Noch keine Bücher hinzugefügt", - "Nessun libro con collocazione trovato": "Keine Bücher mit Standort gefunden", - "Nessun libro nel database": "Keine Bücher in der Datenbank", - "Nessun libro recente": "Keine aktuellen Bücher", - "Nessun libro recente disponibile": "Keine aktuellen Bücher verfügbar", - "Nessun libro registrato": "Keine Bücher registriert", - "Nessun libro selezionato": "Keine Bücher ausgewählt", - "Nessun libro trovato": "Keine Bücher gefunden", - "Nessun log disponibile": "Keine Protokolle verfügbar", - "Nessun logo caricato": "Kein Logo hochgeladen", - "Nessun messaggio ricevuto": "Keine Nachrichten erhalten", - "Nessun motivo specificato": "Kein Grund angegeben", - "Nessun plugin installato": "Keine Plugins installiert", - "Nessun prestito attivo": "Keine aktiven Ausleihen", - "Nessun prestito disponibile per generare il grafico": "Keine Ausleihen verfügbar, um das Diagramm zu erstellen", - "Nessun prestito in attesa di ritiro": "Keine Ausleihen warten auf Abholung", - "Nessun prestito in corso": "Keine laufenden Ausleihen", - "Nessun prestito passato": "Keine vergangenen Ausleihen", - "Nessun prestito registrato": "Keine Ausleihen registriert", - "Nessun prestito scaduto": "Keine überfälligen Ausleihen", - "Nessun prestito trovato": "Keine Ausleihen gefunden", - "Nessun prestito trovato.": "Keine Ausleihen gefunden.", - "Nessun risultato": "Keine Ergebnisse", - "Nessun risultato trovato": "Keine Ergebnisse gefunden", - "Nessun risultato trovato con i filtri applicati": "Keine Ergebnisse mit den angewendeten Filtern gefunden", - "Nessun risultato trovato per": "Keine Ergebnisse gefunden für", - "Nessun risultato trovato per la ricerca.": "Keine Ergebnisse für die Suche gefunden.", - "Nessun ritiro": "Keine Abholungen", - "Nessun server configurato. Aggiungine uno per iniziare.": "Keine Server konfiguriert. Fügen Sie einen hinzu, um zu beginnen.", - "Nessun sottogenere": "Kein Untergenre", - "Nessun sottogenere definito": "Keine Untergenres definiert", - "Nessun suggerimento": "Kein Vorschlag", - "Nessun suggerimento disponibile": "Kein Vorschlag verfügbar", - "Nessun titolo corrisponde al filtro corrente.": "Kein Titel entspricht dem aktuellen Filter.", - "Nessuna": "Keine", - "Nessuna API key configurata": "Keine API-Schlüssel konfiguriert", - "Nessuna alternativa disponibile": "Keine Alternativen verfügbar", - "Nessuna collocazione trovata": "Keine Standorte gefunden", - "Nessuna copertina caricata": "Kein Cover hochgeladen", - "Nessuna copertina da scaricare": "Keine Cover zum Abrufen vorhanden", - "Nessuna copia attualmente disponibile": "Kein Exemplar derzeit verfügbar", - "Nessuna copia disponibile nelle date richieste": "Keine Exemplare für die gewünschten Daten verfügbar", - "Nessuna copia disponibile per il periodo richiesto": "Kein Exemplar für den angeforderten Zeitraum verfügbar", - "Nessuna copia disponibile per il periodo richiesto.": "Kein Exemplar für den gewünschten Zeitraum verfügbar.", - "Nessuna copia disponibile per questo libro": "Kein Exemplar für dieses Buch verfügbar", - "Nessuna copia registrata": "Keine Exemplare registriert", - "Nessuna descrizione disponibile": "Keine Beschreibung verfügbar", - "Nessuna descrizione disponibile per questo libro.": "Keine Beschreibung für dieses Buch verfügbar.", - "Nessuna fonte di scraping disponibile. Installa almeno un plugin di scraping (es. Open Library o Scraping Pro).": "Keine Scraping-Quelle verfügbar. Installieren Sie mindestens ein Scraping-Plugin (z.B. Open Library oder Scraping Pro).", - "Nessuna lingua configurata": "Keine Sprachen konfiguriert", - "Nessuna mensola per questo scaffale. Creane una!": "Keine Regale für dieses Regalgestell. Erstellen Sie eines!", - "Nessuna mensola. Creane una per iniziare!": "Keine Regale vorhanden. Erstellen Sie eines, um zu beginnen!", - "Nessuna notifica": "Keine Benachrichtigungen", - "Nessuna prenotazione": "Keine Vormerkungen", - "Nessuna prenotazione attiva": "Keine aktiven Vormerkungen", - "Nessuna recensione": "Keine Rezensionen", - "Nessuna recensione approvata": "Keine genehmigten Rezensionen", - "Nessuna recensione in attesa": "Keine ausstehenden Rezensionen", - "Nessuna recensione rifiutata": "Keine abgelehnten Rezensionen", - "Nessuna ricerca recente": "Keine kürzlichen Suchen", - "Nessuna richiesta": "Keine Anfragen", - "Nessuna richiesta da approvare": "Keine Anfragen zu genehmigen", - "Nessuna richiesta in attesa": "Keine ausstehenden Anfragen", - "Nessuna richiesta in attesa di approvazione.": "Keine Anfragen zur Genehmigung ausstehend.", - "Nessuna selezione": "Keine Auswahl", - "Nessuna sessione attiva. Le sessioni vengono create quando accedi con 'Ricordami' selezionato.": "Keine aktiven Sitzungen. Sitzungen werden erstellt, wenn Sie sich mit aktiviertem 'Angemeldet bleiben' anmelden.", - "Nessuno": "Keine", - "Nessuno scaffale. Creane uno per iniziare!": "Keine Regalgestelle vorhanden. Erstellen Sie eines, um zu beginnen!", - "Nessuno storico": "Kein Verlauf", - "No": "Nein", - "Nodo mancante di codice a profondità %d.": "Knoten ohne Code auf Tiefe %d.", - "Nome": "Vorname", - "Nome *": "Name *", - "Nome Applicazione": "Anwendungsname", - "Nome Categoria": "Kategoriename", - "Nome Cognome": "Vor- und Nachname", - "Nome Database": "Datenbankname", - "Nome Editore": "Verlagsname", - "Nome File": "Dateiname", - "Nome Indice": "Indexname", - "Nome Inglese": "Englischer Name", - "Nome Nativo": "Einheimischer Name", - "Nome Referente": "Name der Kontaktperson", - "Nome Server": "Servername", - "Nome applicazione": "Anwendungsname", - "Nome autore": "Autorenname", - "Nome backup non specificato": "Backup-Name nicht angegeben", - "Nome backup non valido": "Ungültiger Backup-Name", - "Nome categoria esistente": "Vorhandener Kategoriename", - "Nome completo": "Vollständiger Name", - "Nome cookie analitici": "Name der Analyse-Cookies", - "Nome cookie essenziali": "Name der essentiellen Cookies", - "Nome cookie marketing": "Name der Marketing-Cookies", - "Nome d'arte o pseudonimo": "Künstlername oder Pseudonym", - "Nome del traduttore (se applicabile)": "Name des Übersetzers (falls zutreffend)", - "Nome dell'editore": "Verlagsname", - "Nome dell'illustratore (se applicabile)": "Name des Illustrators (falls zutreffend)", - "Nome della casa editrice": "Verlagsname", - "Nome della classificazione": "Name der Klassifikation", - "Nome della lingua in inglese (es. Italian, English, Spanish)": "Name der Sprache auf Englisch (z. B. Italian, English, Spanish)", - "Nome della lingua nella lingua stessa (es. Italiano, English, Español)": "Name der Sprache in der Sprache selbst (z. B. Italiano, English, Español)", - "Nome e cognome del referente": "Vor- und Nachname der Kontaktperson", - "Nome e cognome dell'autore": "Vor- und Nachname des Autors", - "Nome e cognome sono obbligatori.": "Vor- und Nachname sind erforderlich.", - "Nome editore": "Verlagsname", - "Nome editore...": "Verlagsname...", - "Nome file non valido.": "Ungültiger Dateiname.", - "Nome o cognome troppo lungo (massimo 100 caratteri)": "Vor- oder Nachname zu lang (maximal 100 Zeichen)", - "Nome plugin non valido. Usa solo lettere, numeri, trattini o underscore.": "Ungültiger Plugin-Name. Verwenden Sie nur Buchstaben, Zahlen, Bindestriche oder Unterstriche.", - "Nome, cognome, email...": "Name, Nachname, E-Mail...", - "Nome, pseudonimo, biografia...": "Name, Pseudonym, Biografie...", - "Nome:": "Name:", - "Non Disponibile": "Nicht verfügbar", - "Non Disponibili": "Nicht verfügbar", - "Non ancora restituito": "Noch nicht zurückgegeben", - "Non assegnata": "Nicht zugewiesen", - "Non autenticato": "Nicht authentifiziert", - "Non autorizzato": "Nicht autorisiert", - "Non autorizzato.": "Nicht autorisiert.", - "Non chiudere questa finestra": "Schließen Sie dieses Fenster nicht", - "Non ci sono azioni urgenti da completare.": "Keine dringenden Aktionen zu erledigen.", - "Non ci sono dati da esportare": "Keine Daten zum Exportieren vorhanden", - "Non ci sono nuovi arrivi al momento.": "Derzeit gibt es keine Neuerscheinungen.", - "Non ci sono recensioni in attesa di approvazione.": "Keine Rezensionen zur Genehmigung ausstehend.", - "Non ci sono richieste di prestito in attesa di approvazione.": "Keine Ausleih-Anfragen zur Genehmigung ausstehend.", - "Non disponibile": "Nicht verfügbar", - "Non disponibile nella data selezionata": "Am gewählten Datum nicht verfügbar", - "Non disponibile ora": "Derzeit nicht verfügbar", - "Non eliminabile": "Nicht löschbar", - "Non hai ancora creato nessun evento. Inizia creando il tuo primo evento.": "Sie haben noch keine Veranstaltungen erstellt. Beginnen Sie mit der Erstellung Ihrer ersten Veranstaltung.", - "Non hai ancora lasciato recensioni": "Sie haben noch keine Rezensionen verfasst", - "Non hai libri in prestito al momento": "Sie haben derzeit keine ausgeliehenen Bücher", - "Non hai prenotazioni attive al momento": "Sie haben derzeit keine aktiven Vormerkungen", - "Non hai prestiti in corso al momento.": "Sie haben derzeit keine aktiven Ausleihen.", - "Non hai prestiti passati": "Sie haben keine vergangenen Ausleihen", - "Non hai un account?": "Sie haben noch kein Konto?", - "Non includere tag": "Keine Tags einfügen", - "Non includere tag ": "Keine -Tags einfügen", - "Non installato": "Nicht installiert", - "Non letto": "Ungelesen", - "Non puoi eliminare l'installer finché non completi l'installazione delle dipendenze PHP.": "Sie können den Installer erst löschen, wenn die Installation der PHP-Abhängigkeiten abgeschlossen ist.", - "Non puoi recensire questo libro (devi averlo preso in prestito e non averlo già recensito)": "Sie können dieses Buch nicht rezensieren (Sie müssen es ausgeliehen haben und dürfen es nicht bereits rezensiert haben)", - "Non rinnovabile: prestito in ritardo": "Nicht verlängerbar: Ausleihe überfällig", - "Non scrivibile": "Nicht beschreibbar", - "Non selezionato": "Nicht ausgewählt", - "Non specificata": "Nicht angegeben", - "Non specificato": "Nicht angegeben", - "Non usare spazi nelle route": "Verwenden Sie keine Leerzeichen in Routen", - "Non è possibile creare la directory: %s": "Verzeichnis kann nicht erstellt werden: %s", - "Non è stato possibile eliminare l'utente. Controlla la console.": "Der Benutzer konnte nicht gelöscht werden. Überprüfen Sie die Konsole.", - "Non è stato trovato alcun aggiornamento": "Keine Aktualisierungen gefunden", - "Nota:": "Hinweis:", - "Nota: Impostare come predefinita disattiverà lo status di predefinita per tutte le altre lingue.": "Hinweis: Das Festlegen als Standard deaktiviert den Standardstatus für alle anderen Sprachen.", - "Nota: in produzione limita questa funzione agli amministratori.": "Hinweis: In der Produktionsumgebung diese Funktion auf Administratoren beschränken.", - "Note": "Notizen", - "Note (opzionali)": "Notizen (optional)", - "Note Importanti": "Wichtige Hinweise", - "Note Varie": "Verschiedene Notizen", - "Note aggiuntive o osservazioni particolari...": "Zusätzliche Notizen oder besondere Anmerkungen...", - "Note importanti:": "Wichtige Hinweise:", - "Note interne": "Interne Notizen", - "Note sul prestito": "Ausleihe-Notizen", - "Note sulla restituzione": "Rückgabe-Notizen", - "Note tecniche": "Technische Hinweise", - "Notifica agli amministratori quando viene inoltrata una nuova richiesta di prestito.": "Benachrichtigt Administratoren, wenn eine neue Ausleihanfrage eingereicht wird.", - "Notifica agli utenti quando il prestito è scaduto e deve essere restituito.": "Benachrichtigt die Benutzer, wenn die Ausleihe abgelaufen ist und das Buch zurückgegeben werden muss.", - "Notifica copia non disponibile creata": "Benachrichtigung über nicht verfügbares Exemplar erstellt", - "Notifica prenotazione disponibile inviata": "Benachrichtigung über verfügbare Vormerkung gesendet", - "Notifica prestito fallita": "Ausleihbenachrichtigung fehlgeschlagen", - "Notifica richiesta prestito fallita": "Benachrichtigung über Ausleihanfrage fehlgeschlagen", - "Notifiche": "Benachrichtigungen", - "Notifiche Automatiche": "Automatische Benachrichtigungen", - "Notifiche Prestiti": "Ausleihe-Benachrichtigungen", - "Notifiche disponibilità libri in wishlist": "Benachrichtigungen zur Verfügbarkeit von Büchern auf der Wunschliste", - "Notifiche prestiti scaduti": "Benachrichtigungen über überfällige Ausleihen", - "Novità nelle versioni successive": "Neuigkeiten in kommenden Versionen", - "Numero Inventario": "Inventarnummer", - "Numero Libri": "Anzahl Bücher", - "Numero Pagine": "Seitenzahl", - "Numero Serie": "Reihennummer", - "Numero di Pagine": "Seitenzahl", - "Numero di copie non valido.": "Ungültige Anzahl von Exemplaren.", - "Numero di libri": "Anzahl der Bücher", - "Numero inventario": "Inventarnummer", - "Numero massimo di righe superato (%d)": "Maximale Zeilenanzahl überschritten (%d)", - "Numero massimo di righe superato (%d). Dividi il file in parti più piccole.": "Maximale Zeilenanzahl überschritten (%d). Teilen Sie die Datei in kleinere Teile auf.", - "Numero o descrizione dell'edizione": "Ausgabenummer oder -beschreibung", - "Numero prenotazioni attive": "Anzahl aktiver Vormerkungen", - "Numero serie": "Reihennummer", - "Numero tessera": "Ausweisnummer", - "Nuova Collocazione": "Neuer Standort", - "Nuova Password": "Neues Passwort", - "Nuova password": "Neues Passwort", - "Nuova prenotazione": "Neue Vormerkung", - "Nuova recensione (Admin)": "Neue Rezension (Admin)", - "Nuova recensione da approvare": "Neue Rezension zur Genehmigung", - "Nuova registrazione utente": "Neue Benutzerregistrierung", - "Nuova ricerca": "Neue Suche", - "Nuova richiesta di prestito": "Neue Ausleih-Anfrage", - "Nuovo": "Neu", - "Nuovo Autore": "Neuer Autor", - "Nuovo Editore": "Neuer Verlag", - "Nuovo Evento": "Neue Veranstaltung", - "Nuovo Genere": "Neues Genre", - "Nuovo Libro": "Neues Buch", - "Nuovo Prestito": "Neue Ausleihe", - "Nuovo Utente": "Neuer Benutzer", - "Nuovo aggiornamento disponibile!": "Neue Aktualisierung verfügbar!", - "Nuovo editore:": "Neuer Verlag:", - "Nuovo libro": "Neues Buch", - "Nuovo messaggio di contatto": "Neue Kontaktnachricht", - "Nuovo nome (opzionale)": "Neuer Name (optional)", - "Nuovo utente": "Neuer Benutzer", - "OFF": "Aus", - "OK": "OK", - "ON": "Ein", - "Obbligatorio": "Erforderlich", - "Obbligatorio per utenti non amministratori.": "Erforderlich für Benutzer ohne Administratorrechte.", - "Obsoleto": "Veraltet", - "Occupato": "Belegt", - "Occupato (in ritardo)": "Belegt (überfällig)", - "Occupato (prestito attivo)": "Belegt (aktive Ausleihe)", - "Offline": "Offline", - "Oggetto": "Betreff", - "Oggetto dell'email": "E-Mail-Betreff", - "Oggi": "Heute", - "Ogni 15 minuti nei giorni lavorativi (8:00-18:00)": "Alle 15 Minuten an Werktagen (8:00–18:00)", - "Ogni errore include: numero riga, titolo libro, tipo errore e messaggio dettagliato": "Jeder Fehler enthält: Zeilennummer, Buchtitel, Fehlertyp und detaillierte Meldung", - "Ogni route deve iniziare con": "Jede Route muss beginnen mit", - "Online": "Online", - "Open Graph (Facebook)": "Open Graph (Facebook)", - "Open Graph (Facebook, LinkedIn)": "Open Graph (Facebook, LinkedIn)", - "Operation completed": "Vorgang abgeschlossen", - "Operation failed": "Vorgang fehlgeschlagen", - "Operatore": "Operator", - "Operazione annullata": "Vorgang abgebrochen", - "Operazione completata": "Vorgang abgeschlossen", - "Operazione fallita": "Vorgang fehlgeschlagen", - "Operazione non consentita": "Vorgang nicht erlaubt", - "Operazione non riuscita": "Vorgang fehlgeschlagen", - "Operazioni": "Vorgänge", - "Opere": "Werke", - "Oppure accedere a /installer/?force=1 per forzare una nuova procedura": "Oder gehen Sie zu /installer/?force=1, um eine Neuinstallation zu erzwingen", - "Oppure naviga per categorie": "Oder nach Kategorien durchsuchen", - "Oppure naviga per categorie:": "Oder nach Kategorien durchsuchen:", - "Oppure usa il terminale SSH del tuo hosting (cPanel, Plesk, etc.)": "Oder verwenden Sie das SSH-Terminal Ihres Hostings (cPanel, Plesk, etc.)", - "Ops, qualcosa è andato storto": "Hoppla, etwas ist schiefgelaufen", - "Opzionale": "Optional", - "Opzionale per amministratori": "Optional für Administratoren", - "Opzione 1:": "Option 1:", - "Opzione 2:": "Option 2:", - "Opzione 3:": "Option 3:", - "Ora Evento": "Veranstaltungszeit", - "Ora puoi accedere con la tua nuova password.": "Sie können sich jetzt mit Ihrem neuen Passwort anmelden.", - "Ora puoi ricaricare questa pagina - il warning sparirà se tutto è OK.": "Sie können diese Seite jetzt neu laden – die Warnung verschwindet, wenn alles in Ordnung ist.", - "Ordina Sezioni Homepage": "Homepage-Bereiche sortieren", - "Ordina per": "Sortieren nach", - "Ordinamento": "Sortierung", - "Ordinamento libri": "Büchersortierung", - "Ordine salvato con successo!": "Reihenfolge erfolgreich gespeichert!", - "Ordine:": "Reihenfolge:", - "Organizza e gestisci i generi letterari della biblioteca": "Literarische Genres der Bibliothek organisieren und verwalten", - "Organizza scaffali, mensole e posizioni per la biblioteca fisica": "Regale, Regalböden und Positionen für die physische Bibliothek organisieren", - "Ospite": "Gast", - "Ottieni le chiavi da Google reCAPTCHA": "Schlüssel von Google reCAPTCHA erhalten", - "Ottimizza l'evento per i motori di ricerca e i social media": "Veranstaltung für Suchmaschinen und soziale Medien optimieren", - "Ottimizzato": "Optimiert", - "Ottimizzazione": "Optimierung", - "Ottimizzazione Indici Database": "Datenbank-Indexoptimierung", - "Ottimizzazione SEO (Meta Tags)": "SEO-Optimierung (Meta-Tags)", - "Ottimizzazione SEO e Social Media": "SEO- und Social-Media-Optimierung", - "Output atteso: cartella vendor/ con sottocartelle (slim, monolog, etc.)": "Erwartete Ausgabe: Ordner vendor/ mit Unterordnern (slim, monolog, etc.)", - "PDF": "PDF", - "PDF generato!": "PDF erstellt!", - "PDF o ePub, max 100 MB": "PDF oder ePub, max. 100 MB", - "PDF prestito non generato": "Ausleih-PDF nicht erstellt", - "PHP mail()": "PHP mail()", - "PHP mail() - Predefinito": "PHP mail() – Standard", - "PHPMailer": "PHPMailer", - "PNG, SVG, JPG o WebP (max 2MB)": "PNG, SVG, JPG oder WebP (max. 2 MB)", - "Pacchetto di aggiornamento non valido: manca %s": "Ungültiges Aktualisierungspaket: %s fehlt", - "Paese": "Land", - "Pagina": "Seite", - "Pagina Cookie": "Cookie-Seite", - "Pagina Cookie Policy": "Cookie-Richtlinien-Seite", - "Pagina Non Trovata": "Seite nicht gefunden", - "Pagina \\": "Seite \\", - "Pagina aggiornata con successo.": "Seite erfolgreich aktualisiert.", - "Pagina attiva (visibile sul sito)": "Aktive Seite (auf der Website sichtbar)", - "Pagina non trovata.": "Seite nicht gefunden.", - "Pagina precedente": "Vorherige Seite", - "Pagina successiva": "Nächste Seite", - "Paginazione eventi": "Veranstaltungspaginierung", - "Pagine": "Seiten", - "Pannello": "Bereich", - "Panoramica completa di prestiti, ritiri e prenotazioni": "Vollständige Übersicht über Ausleihen, Abholungen und Vormerkungen", - "Panoramica generale": "Allgemeine Übersicht", - "Panoramica generale di Pinakes": "Allgemeine Übersicht über Pinakes", - "Paragrafo": "Absatz", - "Paragraph": "Absatz", - "Parametri di Ricerca": "Suchparameter", - "Parametri non validi": "Ungültige Parameter.", - "Parametro ISBN mancante.": "Fehlender ISBN-Parameter.", - "Parametro category_id obbligatorio.": "Parameter category_id ist erforderlich.", - "Parametro code obbligatorio.": "Parameter code ist erforderlich.", - "Parametro cover_url mancante.": "Fehlender Parameter cover_url.", - "Parametro division_id obbligatorio.": "Parameter division_id ist erforderlich.", - "Parole Chiave": "Schlüsselwörter", - "Parole Chiave SEO": "SEO-Schlüsselwörter", - "Parole chiave": "Schlüsselwörter", - "Parole chiave SEO": "SEO-Schlüsselwörter", - "Parole chiave per i motori di ricerca (impatto SEO limitato). Separate da virgola.": "Schlüsselwörter für Suchmaschinen (begrenzter SEO-Einfluss). Durch Komma getrennt.", - "Passo": "Schritt", - "Password": "Passwort", - "Password aggiornata con successo.": "Passwort erfolgreich aktualisiert.", - "Password dimenticata": "Passwort vergessen", - "Password dimenticata?": "Passwort vergessen?", - "Password iniziale": "Anfangspasswort", - "Password resettata con successo!": "Passwort erfolgreich zurückgesetzt!", - "Password troppo lunga (massimo 128 caratteri)": "Passwort zu lang (maximal 128 Zeichen)", - "Pattern URL": "URL-Muster", - "Pendente": "Ausstehend", - "Pending": "Ausstehend", - "Per aggiornare automaticamente la sitemap ogni giorno:": "Um die Sitemap täglich automatisch zu aktualisieren:", - "Per assistenza, contatta l'amministrazione della biblioteca.": "Für Unterstützung wenden Sie sich an die Bibliotheksverwaltung.", - "Per inserire il codice JavaScript Analytics (Google Analytics, Matomo, ecc.), vai su {{variabile}} per inserire dati dinamici.": "Passen Sie den Inhalt der automatischen E-Mails mit dem TinyMCE-Editor an. Verwenden Sie Platzhalter {{variable}}, um dynamische Daten einzufügen.", - "Personalizza il contenuto delle mail automatiche con l'editor TinyMCE. Usa i segnaposto sospeso e richiede approvazione. Scegli un'opzione:": "Dieser Benutzer ist im Status gesperrt und erfordert Genehmigung. Wählen Sie eine Option:", - "Radice": "Stammverzeichnis", - "Rallenta l'importazione": "Verlangsamt den Import", - "Recati in biblioteca durante gli orari di apertura per ritirare il libro.": "Besuchen Sie die Bibliothek während der Öffnungszeiten, um das Buch abzuholen.", - "Recensione (opzionale)": "Rezension (optional)", - "Recensione approvata": "Rezension genehmigt", - "Recensione del": "Rezension vom", - "Recensione eliminata": "Rezension gelöscht", - "Recensione inviata con successo!": "Rezension erfolgreich eingereicht!", - "Recensione inviata con successo! Sarà pubblicata dopo l'approvazione di un amministratore.": "Rezension erfolgreich eingereicht! Sie wird nach der Genehmigung durch einen Administrator veröffentlicht.", - "Recensione inviata!": "Rezension eingereicht!", - "Recensione per \"%s\" da %s - %s": "Rezension für \"%s\" von %s – %s", - "Recensione rifiutata": "Rezension abgelehnt", - "Recensioni": "Rezensionen", - "Recensioni Approvate": "Genehmigte Rezensionen", - "Recensioni Rifiutate": "Abgelehnte Rezensionen", - "Recensioni utenti": "Benutzerrezensionen", - "Recente": "Aktuell", - "Recupera Password": "Passwort wiederherstellen", - "Referente": "Ansprechperson", - "Registra Restituzione": "Rückgabe erfassen", - "Registra prestito": "Ausleihe erfassen", - "Registra restituzione": "Rückgabe erfassen", - "Registra restituzione prestito": "Ausleih-Rückgabe erfassen", - "Registra una prenotazione per permettere ad un utente di riservare un libro specifico": "Erfassen Sie eine Vormerkung, um einem Benutzer die Reservierung eines bestimmten Buches zu ermöglichen", - "Registrati": "Registrieren", - "Registrati Ora": "Jetzt registrieren", - "Registrato da": "Registriert von", - "Registrato il": "Registriert am", - "Registrazione": "Registrierung", - "Registrazione Completata": "Registrierung abgeschlossen", - "Registrazione completata": "Registrierung abgeschlossen", - "Registrazione completata! Effettua l'accesso": "Registrierung abgeschlossen! Bitte melden Sie sich an", - "Registrazione ricevuta": "Registrierung eingegangen", - "Registro delle migrazioni database applicate": "Register der angewendeten Datenbankmigrationen", - "Reimposta password": "Passwort zurücksetzen", - "Reindirizza automaticamente tutte le richieste HTTP a HTTPS": "Alle HTTP-Anfragen automatisch auf HTTPS umleiten", - "Reindirizzamento verso dominio non autorizzato bloccato.": "Weiterleitung zu einer nicht autorisierten Domain blockiert.", - "Reinstalla da Capo": "Von Grund auf neu installieren", - "Remoto": "Remote", - "Report": "Bericht", - "Report Integrità Dati": "Datenintegritätsbericht", - "Report e analisi": "Berichte und Analysen", - "Requisiti": "Anforderungen", - "Requisiti del plugin:": "Plugin-Anforderungen:", - "Requisiti di Sistema": "Systemanforderungen", - "Requisiti di sistema non soddisfatti": "Systemanforderungen nicht erfüllt", - "Requisiti:": "Voraussetzungen:", - "Requisito '%s' non soddisfatto": "Voraussetzung '%s' nicht erfüllt", - "Reset": "Zurücksetzen", - "Reset Filtri": "Filter zurücksetzen", - "Reset anni": "Jahre zurücksetzen", - "Resetta Password": "Passwort zurücksetzen", - "Recupera la tua password": "Stellen Sie Ihr Passwort wieder her", - "Abbiamo ricevuto una richiesta di reset della password per il tuo account.": "Wir haben eine Anfrage zum Zurücksetzen des Passworts für Ihr Konto erhalten.", - "Clicca sul pulsante qui sotto per resettare la tua password:": "Klicken Sie auf die Schaltfläche unten, um Ihr Passwort zurückzusetzen:", - "Oppure copia e incolla questo link nel tuo browser:": "Oder kopieren Sie diesen Link und fügen Sie ihn in Ihren Browser ein:", - "Questo link scadrà tra 2 ore.": "Dieser Link läuft in 2 Stunden ab.", - "Se non hai richiesto il reset della password, puoi ignorare questa email. Il tuo account rimane sicuro.": "Wenn Sie kein Zurücksetzen des Passworts angefordert haben, können Sie diese E-Mail ignorieren. Ihr Konto bleibt sicher.", - "Ciao": "Hallo", - "Restituito": "Zurückgegeben", - "Restituito in ritardo": "Verspätet zurückgegeben", - "Restituito regolarmente": "Fristgerecht zurückgegeben", - "Restituzione": "Rückgabe", - "Restituzione prestito": "Ausleih-Rückgabe", - "Restituzione prestito #%s": "Ausleih-Rückgabe #%s", - "Retention: 90 giorni": "Aufbewahrung: 90 Tage", - "Revocate %d sessioni": "%d Sitzungen widerrufen", - "Riassegnazione copia fallita": "Exemplar-Neuzuweisung fehlgeschlagen", - "Riassegnazione prenotazione nuova copia fallita": "Neuzuweisung der Vormerkung auf neues Exemplar fehlgeschlagen", - "Ricalcola Disponibilità": "Verfügbarkeit neu berechnen", - "Ricarica Dewey (seed)": "Dewey neu laden (Seed)", - "Ricarica Pagina": "Seite neu laden", - "Ricerca": "Suche", - "Ricerca Libro": "Buch suchen", - "Ricerca Utente": "Benutzer suchen", - "Ricerca in corso...": "Suche läuft...", - "Ricerca rapida": "Schnellsuche", - "Ricerche recenti": "Kürzliche Suchen", - "Riceverai un link di reset via email. Il link sarà valido per 24 ore.": "Sie erhalten einen Zurücksetzungslink per E-Mail. Der Link ist 24 Stunden gültig.", - "Riceverai una conferma via email appena la richiesta sarà approvata.": "Sie erhalten eine E-Mail-Bestätigung, sobald die Anfrage genehmigt wurde.", - "Ricevuta di Prestito": "Ausleihquittung", - "Ricevuta di prestito bibliotecario": "Bibliotheks-Ausleihquittung", - "Ricevuto": "Empfangen", - "Richiede App:": "Erfordert App:", - "Richiede PHP:": "Erfordert PHP:", - "Richiedi Prestito": "Ausleihe anfordern", - "Richiedi approvazione admin dopo la conferma email": "Administrator-Genehmigung nach E-Mail-Bestätigung erforderlich", - "Richiedono attenzione immediata": "Erfordern sofortige Aufmerksamkeit", - "Richiesta Inviata!": "Anfrage gesendet!", - "Richiesta Pendente": "Ausstehende Anfrage", - "Richiesta Prestito": "Ausleihanfrage", - "Richiesta del %s": "Anfrage vom %s", - "Richiesta di prestito dal %1$s al %2$s": "Ausleihanfrage vom %1$s bis %2$s", - "Richiesta di prestito dal %s per 1 mese": "Ausleihanfrage ab %s für 1 Monat", - "Richiesta di prestito inviata con successo": "Ausleihanfrage erfolgreich gesendet", - "Richiesta di prestito per \"%s\" da %s dal %s al %s": "Ausleihanfrage für \"%s\" von %s vom %s bis %s", - "Richiesta di prestito per \\": "Ausleihanfrage für \\", - "Richiesta fallita:": "Anfrage fehlgeschlagen:", - "Richiesta inviata con successo!": "Anfrage erfolgreich gesendet!", - "Richiesta inviata!": "Anfrage gesendet!", - "Richiesta manuale": "Manuelle Anfrage", - "Richiesta prestito": "Ausleihanfrage", - "Richiesta rifiutata": "Anfrage abgelehnt", - "Richieste Manuali": "Manuelle Anfragen", - "Richieste Pendenti": "Ausstehende Anfragen", - "Richieste di Prestito": "Ausleihanfragen", - "Richieste di Prestito in Attesa": "Ausstehende Ausleihanfragen", - "Richieste in Attesa": "Ausstehende Anfragen", - "Richieste in Sospeso": "Ausstehende Anfragen", - "Richieste in sospeso": "Ausstehende Anfragen", - "Richieste pendenti": "Ausstehende Anfragen", - "Richiesto": "Erforderlich", - "Richiesto il": "Angefordert am", - "Richiesto il %s": "Angefordert am %s", - "Richiesto:": "Erforderlich:", - "Ricordami": "Angemeldet bleiben", - "Ricordi la password?": "Erinnern Sie sich an Ihr Passwort?", - "Riepilogo Installazione": "Installationszusammenfassung", - "Riepilogo wishlist": "Wunschlisten-Zusammenfassung", - "Rifiuta": "Ablehnen", - "Rifiuta Prestito?": "Ausleihe ablehnen?", - "Rifiuta non essenziali": "Nicht-essentielle ablehnen", - "Rifiuta prestito": "Ausleihe ablehnen", - "Rifiuta recensione": "Rezension ablehnen", - "Rifiutata": "Abgelehnt", - "Rifiutata il": "Abgelehnt am", - "Rifiutato": "Abgelehnt", - "Rifiuterai questa richiesta di prestito?": "Möchten Sie diese Ausleihanfrage ablehnen?", - "Riga %d (%s): %s": "Zeile %d (%s): %s", - "Riga %d: numero di colonne non corrispondente": "Zeile %d: Spaltenanzahl stimmt nicht überein", - "Rigenera Sitemap": "Sitemap neu generieren", - "Rigenera adesso": "Jetzt neu generieren", - "Rimuovere dalla wishlist?": "Von der Wunschliste entfernen?", - "Rimuovere i libri associati prima di eliminare l'autore": "Entfernen Sie die zugehörigen Bücher, bevor Sie den Autor löschen", - "Rimuovere i libri dell'editore prima di eliminarlo": "Entfernen Sie die Bücher des Verlags, bevor Sie ihn löschen", - "Rimuovi": "Entfernen", - "Rimuovi dai Preferiti": "Aus Favoriten entfernen", - "Rimuovi dalla wishlist": "Von der Wunschliste entfernen", - "Rimuovi editore": "Verlag entfernen", - "Rimuovi filtro": "Filter entfernen", - "Rimuovi immagine": "Bild entfernen", - "Rimuovi immagine attuale": "Aktuelles Bild entfernen", - "Rimuovi immagine di sfondo attuale": "Aktuelles Hintergrundbild entfernen", - "Rimuovi logo attuale": "Aktuelles Logo entfernen", - "Rimuovi tutti i filtri": "Alle Filter entfernen", - "Rinnova": "Verlängern", - "Rinnova prestito (+14 giorni)": "Ausleihe verlängern (+14 Tage)", - "Rinnova prestito?": "Ausleihe verlängern?", - "Rinnovare il prestito? La scadenza verrà estesa di 14 giorni.": "Ausleihe verlängern? Das Fälligkeitsdatum wird um 14 Tage verlängert.", - "Rinnovi": "Verlängerungen", - "Rinnovi Effettuati:": "Durchgeführte Verlängerungen:", - "Rinnovi effettuati": "Durchgeführte Verlängerungen", - "Rinnovo prestito fallito": "Ausleihverlängerung fehlgeschlagen", - "Riordina trascinando gli elementi": "Durch Ziehen der Elemente neu anordnen", - "Ripara automaticamente gli errori rilevati": "Erkannte Fehler automatisch reparieren", - "Ripeti la password": "Passwort wiederholen", - "Ripristina": "Zurücksetzen", - "Ripristina Default": "Standard wiederherstellen", - "Ripristinare i colori?": "Farben zurücksetzen?", - "Ripristinare questo backup?": "Diese Sicherung wiederherstellen?", - "Ripristinato": "Wiederhergestellt", - "Ripristino": "Wiederherstellung", - "Riprova": "Erneut versuchen", - "Riservato": "Reserviert", - "Risolvi i problemi indicati sopra e ricarica la pagina.": "Beheben Sie die oben angegebenen Probleme und laden Sie die Seite neu.", - "Risorsa": "Ressource", - "Risorse esterne": "Externe Ressourcen", - "Rispettiamo il tuo diritto alla privacy. Puoi scegliere di non consentire alcuni tipi di cookie. Le tue preferenze si applicheranno all'intero sito web.": "Wir respektieren Ihr Recht auf Datenschutz. Sie können bestimmte Arten von Cookies ablehnen. Ihre Einstellungen gelten für die gesamte Website.", - "Rispondi": "Antworten", - "Risposta": "Antwort", - "Risposta JSON": "JSON-Antwort", - "Risposta non valida dal servizio ISBN.": "Ungültige Antwort vom ISBN-Dienst.", - "Risposta non valida. Controlla la console per dettagli.": "Ungültige Antwort. Überprüfen Sie die Konsole für Details.", - "Risultati": "Ergebnisse", - "Risultati per '%s' - Catalogo Biblioteca": "Ergebnisse für '%s' – Bibliothekskatalog", - "Ritiri da Confermare": "Zu bestätigende Abholungen", - "Ritiri scaduti elaborati": "Abgelaufene Abholungen verarbeitet", - "Ritiro annullato": "Abholung storniert", - "Ritiro annullato con successo": "Abholung erfolgreich storniert", - "Ritiro confermato con successo": "Abholung erfolgreich bestätigt", - "Ritiro confermato!": "Abholung bestätigt!", - "Ritiro confermato! Il prestito è ora in corso.": "Abholung bestätigt! Die Ausleihe ist jetzt aktiv.", - "Ritiro già confermato o modificato": "Abholung bereits bestätigt oder geändert", - "Ritiro non effettuato": "Abholung nicht erfolgt", - "Ritiro non effettuato entro il termine previsto": "Abholung nicht innerhalb der Frist erfolgt", - "Ritiro scaduto": "Abholung abgelaufen", - "Ritiro scaduto il": "Abholung abgelaufen am", - "Rossi": "Mustermann", - "Route Comuni": "Allgemeine Routen", - "Route Tradotte": "Übersetzte Routen", - "Route aggiornate con successo": "Routen erfolgreich aktualisiert", - "Ruolo": "Rolle", - "Ruolo:": "Rolle:", - "SBN Italia - Integrato": "SBN Italien - Integriert", - "SDK": "SDK", - "SEO - Meta Description": "SEO – Meta-Beschreibung", - "SEO Base": "SEO-Grundlagen", - "SEO Base (Meta Tags)": "SEO-Grundlagen (Meta-Tags)", - "SMTP (custom)": "SMTP (benutzerdefiniert)", - "SMTP Host": "SMTP-Host", - "SMTP Password": "SMTP-Passwort", - "SMTP Personalizzato": "Benutzerdefiniertes SMTP", - "SMTP Port": "SMTP-Port", - "SMTP Username": "SMTP-Benutzername", - "SMTP personalizzato": "Benutzerdefiniertes SMTP", - "SSL": "SSL", - "Salva": "Speichern", - "Salva API Key": "API-Schlüssel speichern", - "Salva Autore": "Autor speichern", - "Salva Configurazione": "Konfiguration speichern", - "Salva Contatti": "Kontakte speichern", - "Salva Editore": "Verlag speichern", - "Salva Identità": "Identität speichern", - "Salva Impostazioni": "Einstellungen speichern", - "Salva Impostazioni Avanzate": "Erweiterte Einstellungen speichern", - "Salva Libro": "Buch speichern", - "Salva Lingua": "Sprache speichern", - "Salva Modifiche": "Änderungen speichern", - "Salva Privacy Policy": "Datenschutzerklärung speichern", - "Salva Route": "Routen speichern", - "Salva Template": "Vorlage speichern", - "Salva Testi Cookie Banner": "Cookie-Banner-Texte speichern", - "Salva filtri correnti": "Aktuelle Filter speichern", - "Salva identità": "Identität speichern", - "Salva impostazioni email": "E-Mail-Einstellungen speichern", - "Salva impostazioni etichette": "Etiketteneinstellungen speichern", - "Salva in UTF-8": "Als UTF-8 speichern", - "Salva la API key in un luogo sicuro. Non sarà possibile visualizzarla nuovamente dopo la creazione.": "Speichern Sie den API-Schlüssel an einem sicheren Ort. Er kann nach der Erstellung nicht erneut angezeigt werden.", - "Salva modifiche": "Änderungen speichern", - "Salva modifiche Homepage": "Homepage-Änderungen speichern", - "Salva template": "Vorlage speichern", - "Salva testi banner": "Banner-Texte speichern", - "Salva utente": "Benutzer speichern", - "Salvataggio in corso...": "Wird gespeichert...", - "Salvataggio...": "Wird gespeichert...", - "Salvato con successo.": "Erfolgreich gespeichert.", - "Sarà pubblicata dopo l'approvazione di un amministratore.": "Wird nach der Genehmigung durch einen Administrator veröffentlicht.", - "Sarà utilizzata per accedere al sistema": "Wird für die Anmeldung am System verwendet", - "Sarà visualizzato nell'header e in tutto il sito": "Wird in der Kopfzeile und auf der gesamten Website angezeigt", - "Scade": "Läuft ab", - "Scadenza": "Fälligkeitsdatum", - "Scadenza Mancante": "Fehlendes Fälligkeitsdatum", - "Scadenza prenotazione": "Ablauf der Vormerkung", - "Scadenza ritiro": "Abholfrist", - "Scadenza ritiro:": "Abholfrist:", - "Scadenza tessera": "Kartenablauf", - "Scadenza:": "Fälligkeitsdatum:", - "Scadenza: %s": "Ablauf: %s", - "Scaduta": "Abgelaufen", - "Scaduta il": "Abgelaufen am", - "Scaduto": "Abgelaufen", - "Scaduto il:": "Abgelaufen am:", - "Scaffale": "Regal", - "Scaffale *": "Regal *", - "Scaffale Narrativa": "Belletristik-Regal", - "Scaffale creato": "Schrank erstellt", - "Scaffale eliminato": "Schrank gelöscht", - "Scaffale obbligatorio": "Schrank erforderlich", - "Scaffali": "Regale", - "Scaffali e mensole": "Regale und Regalböden", - "Scarica": "Herunterladen", - "Scarica Audiobook": "Hörbuch herunterladen", - "Scarica Errori": "Fehler herunterladen", - "Scarica JSON": "JSON herunterladen", - "Scarica PDF": "PDF herunterladen", - "Scarica Ricevuta PDF": "PDF-Quittung herunterladen", - "Scarica Script SQL": "SQL-Skript herunterladen", - "Scarica automaticamente la ricevuta PDF dopo la creazione del prestito.": "Die PDF-Quittung nach der Erstellung der Ausleihe automatisch herunterladen.", - "Scarica copertine": "Cover abrufen", - "Scarica eBook": "eBook herunterladen", - "Scarica esempio_import_libri.csv": "beispiel_import_buecher.csv herunterladen", - "Scarica il CSV di esempio con 3 libri già compilati per capire il formato corretto e iniziare subito.": "Laden Sie die Beispiel-CSV-Datei mit 3 vorausgefüllten Büchern herunter, um das richtige Format zu verstehen und sofort loszulegen.", - "Scarica il file CSV di esempio": "Beispiel-CSV-Datei herunterladen", - "Scarica il report CSV per analizzare gli errori in dettaglio": "Laden Sie den CSV-Bericht herunter, um Fehler im Detail zu analysieren", - "Scarica l'eBook in formato digitale": "Das eBook im digitalen Format herunterladen", - "Scarica ricevuta PDF": "PDF-Quittung herunterladen", - "Scaricamento copertine...": "Cover werden abgerufen...", - "Scarso": "Mangelhaft", - "Scegli": "Auswählen", - "Scegli Icona Font Awesome": "Font Awesome Icon auswählen", - "Scegli come inviare le email dal sistema. Puoi usare la funzione PHP mail(), PHPMailer o un server SMTP esterno.": "Wählen Sie, wie E-Mails vom System gesendet werden sollen. Sie können die PHP-Funktion mail(), PHPMailer oder einen externen SMTP-Server verwenden.", - "Scegli come inviare le email dal sistema. Puoi usare la funzione PHP /usr/bin/php con il percorso corretto di PHP sul tuo server": "Ersetzen Sie /usr/bin/php durch den korrekten PHP-Pfad auf Ihrem Server", - "Sottocategoria": "Unterkategorie", - "Sottodomini devono supportare HTTPS (se usati)": "Subdomains müssen HTTPS unterstützen (falls verwendet)", - "Sottogenere": "Untergenre", - "Sottogenere specifico (opzionale)": "Spezifisches Untergenre (optional)", - "Sottogeneri": "Untergenres", - "Sottotitolo": "Untertitel", - "Sottotitolo CTA": "CTA-Untertitel", - "Sottotitolo del libro (opzionale)": "Buchuntertitel (optional)", - "Sottotitolo sezione": "Bereichsuntertitel", - "Spazio libero": "Freier Speicherplatz", - "Staff": "Mitarbeiter", - "Staff:": "Mitarbeiter:", - "Stai per aggiornare Pinakes alla versione": "Sie sind dabei, Pinakes auf Version zu aktualisieren", - "Stai per eliminare": "Sie sind dabei zu löschen", - "Stai per unire": "Sie sind dabei zusammenzuführen", - "Stai utilizzando l'ultima versione disponibile.": "Sie verwenden die neueste verfügbare Version.", - "Stai utilizzando l'ultima versione.": "Sie verwenden die neueste Version.", - "Stampa": "Drucken", - "Stampa etichetta": "Etikett drucken", - "Standard": "Standard", - "Standard Tirrenia catalogazione": "Standard Tirrenia-Katalogisierung", - "Standard dorso libri (più comune)": "Standard-Buchrücken (am häufigsten)", - "Statistiche": "Statistiken", - "Statistiche Prestiti": "Ausleihstatistiken", - "Statistiche Rapide": "Schnellstatistiken", - "Statistiche aggiornate per": "Statistiken aktualisiert für", - "Statistiche:": "Statistiken:", - "Stato": "Status", - "Stato API": "API-Status", - "Stato API key aggiornato con successo.": "API-Schlüssel-Status erfolgreich aktualisiert.", - "Stato Incongruente": "Statusabweichung", - "Stato aggiornato per %d libri": "Status für %d Bücher aktualisiert", - "Stato attuale:": "Aktueller Status:", - "Stato dell'installazione:": "Installationsstatus:", - "Stato della copia": "Exemplar-Status", - "Stato della copia aggiornato con successo.": "Exemplar-Status erfolgreich aktualisiert.", - "Stato e Gestione": "Status und Verwaltung", - "Stato non valido": "Ungültiger Status", - "Stato non valido.": "Ungültiger Status.", - "Stato prestito": "Ausleihstatus", - "Stato prestito corrente": "Aktueller Ausleihstatus", - "Stato prestito non valido.": "Ungültiger Ausleihstatus.", - "Stato:": "Status:", - "Status attuale di questa copia del libro": "Aktueller Status dieses Buchexemplars", - "Step 1: Creazione backup": "Schritt 1: Backup erstellen", - "Step 2: Download aggiornamento": "Schritt 2: Aktualisierung herunterladen", - "Step 3: Installazione aggiornamento": "Schritt 3: Aktualisierung installieren", - "Storico Import": "Importverlauf", - "Storico Prestiti": "Ausleihverlauf", - "Nella stessa collana": "In derselben Reihe", - "Volumi di quest'opera": "Bände dieses Werks", - "volumi": "Bände", - "Questo libro è il volume %s dell'opera": "Dieses Buch ist Band %s des Werks", - "Gestione Collane": "Reihenverwaltung", - "Gestisci le collane e le serie di libri": "Buchreihen und Serien verwalten", - "Collane totali": "Reihen insgesamt", - "Libri nelle collane": "Bücher in Reihen", - "Nessuna collana trovata. Aggiungi una collana a un libro per iniziare.": "Keine Reihen gefunden. Fügen Sie einem Buch eine Reihe hinzu.", - "Collane": "Reihen", - "Serie e collane di libri": "Serien und Buchreihen", - "Rinomina collana": "Reihe umbenennen", - "Rinomina": "Umbenennen", - "Unisci con altra collana": "Mit anderer Reihe zusammenführen", - "Nome collana di destinazione": "Name der Zielreihe", - "Unisci": "Zusammenführen", - "Sei sicuro? Tutti i libri verranno spostati nella collana di destinazione.": "Sind Sie sicher? Alle Bücher werden in die Zielreihe verschoben.", - "Crea opera multi-volume": "Mehrbändiges Werk erstellen", - "Crea un libro padre che raccoglie tutti i volumi di questa collana.": "Erstellen Sie ein übergeordnetes Buch, das alle Bände dieser Reihe enthält.", - "Titolo dell'opera completa": "Titel des Gesamtwerks", - "Crea opera": "Werk erstellen", - "Collana rinominata: %d libri aggiornati": "Reihe umbenannt: %d Bücher aktualisiert", - "Nome collana non valido": "Ungültiger Reihenname", - "Collane unite: %d libri spostati in \"%s\"": "Reihen zusammengeführt: %d Bücher in \"%s\" verschoben", - "Parametri non validi per l'unione": "Ungültige Parameter für Zusammenführung", - "Opera \"%s\" creata con %d volumi": "Werk \"%s\" erstellt mit %d Bänden", - "Errore nella creazione dell'opera": "Fehler beim Erstellen des Werks", - "Aggiungi volume": "Band hinzufügen", - "Cartaceo": "Taschenbuch", - "eBook": "eBook", - "Audiolibro": "Hörbuch", - "CD Audio": "Audio-CD", - "Vinile": "Schallplatte", - "LP": "LP", - "Cassetta": "Kassette", - "DVD": "DVD", - "Blu-ray": "Blu-ray", - "Digitale": "Digital", - "Altro": "Sonstiges", - "Cerca libro": "Buch suchen", - "Titolo o ISBN...": "Titel oder ISBN...", - "Numero volume": "Bandnummer", - "Seleziona un libro": "Buch auswählen", - "Volume aggiunto": "Band hinzugefügt", - "Rimuovi volume?": "Band entfernen?", - "Il libro non sarà eliminato, solo la relazione.": "Das Buch wird nicht gelöscht, nur die Verknüpfung.", - "Volume rimosso": "Band entfernt", - "Configura come opera multi-volume": "Als mehrbändiges Werk konfigurieren", - "Errore database": "Datenbankfehler", - "Nuova Collana": "Neue Reihe", - "Collana \"%s\" creata": "Reihe \"%s\" erstellt", - "Descrizione della collana...": "Beschreibung der Reihe...", - "Salva descrizione": "Beschreibung speichern", - "Descrizione salvata": "Beschreibung gespeichert", - "Assegna collana": "Reihe zuweisen", - "Collana assegnata": "Reihe zugewiesen", - "%d libri assegnati alla collana \"%s\"": "%d Bücher der Reihe \"%s\" zugewiesen", - "Elimina collana": "Reihe löschen", - "Rimuove la collana da tutti i libri. I libri non verranno eliminati.": "Entfernen Sie die Reihe von allen Büchern. Die Bücher werden nicht gelöscht.", - "Sei sicuro? La collana verrà rimossa da tutti i libri.": "Sind Sie sicher? Die Reihe wird von allen Büchern entfernt.", - "Collana \"%s\" eliminata (%d libri aggiornati)": "Reihe \"%s\" gelöscht (%d Bücher aktualisiert)", - "International Standard Serial Number (per periodici)": "International Standard Serial Number (für Zeitschriften)", - "ISSN Non Valido": "Ungültige ISSN", - "ISSN deve essere nel formato XXXX-XXXX (8 cifre, l'ultima può essere X).": "ISSN muss im Format XXXX-XXXX sein (8 Ziffern, die letzte kann X sein).", - "ISSN non valido. Il formato corretto è XXXX-XXXX (8 cifre, l'ultima può essere X).": "Ungültige ISSN. Das korrekte Format ist XXXX-XXXX (8 Ziffern; die letzte kann X sein).", - "Relazione ciclica: questo libro è già opera padre del libro selezionato": "Zyklische Beziehung: Dieses Buch ist bereits ein übergeordnetes Werk des ausgewählten Buches", - "Assegna": "Zuweisen", - "es. 1234-5678": "z.B. 1234-5678", - "es. Harry Potter": "z.B. Harry Potter", - "Identificatori": "Kennungen", - "Inserisci un nome": "Namen eingeben", - "Nome della collana": "Reihenname", - "ISSN": "ISSN", - "Volumi": "Bände", - "Successiva": "Nächste", - "Successivo": "Nächste", - "Successo": "Erfolg", - "Successo!": "Erfolg!", - "Suggerimenti": "Tipps", - "Suggerimento": "Tipp", - "Suggerimento:": "Tipp:", - "Suggerisci collocazione": "Standort vorschlagen", - "Suggerito scaffale #${data.scaffale_id}": "Vorgeschlagenes Regal #${data.scaffale_id}", - "Suggerito:": "Vorgeschlagen:", - "Summary (Immagine Piccola)": "Summary (kleines Bild)", - "Summary Large Image (Immagine Grande)": "Summary Large Image (großes Bild)", - "Supporto": "Support", - "Sì": "Ja", - "Sì, Aggiorna": "Ja, aktualisieren", - "Sì, Annulla": "Ja, stornieren", - "Sì, Salva": "Ja, speichern", - "Sì, aggiorna": "Ja, aktualisieren", - "Sì, applica": "Ja, anwenden", - "Sì, approva": "Ja, genehmigen", - "Sì, attiva": "Ja, aktivieren", - "Sì, correggi": "Ja, beheben", - "Sì, crea indici": "Ja, Indizes erstellen", - "Sì, crea tabelle": "Ja, Tabellen erstellen", - "Sì, disattiva": "Ja, deaktivieren", - "Sì, disinstalla": "Ja, deinstallieren", - "Sì, elimina": "Ja, löschen", - "Sì, elimina!": "Ja, löschen!", - "Sì, esegui": "Ja, ausführen", - "Sì, rimuovi": "Ja, entfernen", - "Sì, sincronizza": "Ja, synchronisieren", - "TLS": "TLS", - "Tabella": "Tabelle", - "Tabella %s creata": "Tabelle %s erstellt", - "Tabelle create:": "Erstellte Tabellen:", - "Tabelle di Sistema": "Systemtabellen", - "Tabelle richieste per l'aggiornamento": "Für Aktualisierungen erforderliche Tabellen", - "Tag": "Tag", - "Telefono": "Telefon", - "Telefono *": "Telefon *", - "Telefono Referente": "Telefon Ansprechpartner", - "Telefono:": "Telefon:", - "Tema": "Design", - "Tema Attivo": "Aktives Theme", - "Tema attivato con successo": "Theme erfolgreich aktiviert", - "Tema non trovato": "Theme nicht gefunden", - "Tema salvato con successo": "Theme erfolgreich gespeichert", - "Temi": "Themes", - "Temi Disponibili": "Verfügbare Themes", - "Template": "Vorlagen", - "Template Email": "E-Mail-Vorlagen", - "Template aggiornato con successo!": "Vorlage erfolgreich aktualisiert!", - "Template email": "E-Mail-Vorlagen", - "Termini": "Bedingungen", - "Termini di Servizio": "Nutzungsbedingungen", - "Tessera biblioteca": "Bibliotheksausweis", - "Test": "Test", - "Test Connessione": "Verbindungstest", - "Test Endpoint": "Endpoint testen", - "Test del cron job:": "Cron-Job-Test:", - "Testi Banner": "Banner-Texte", - "Testi Banner Cookie": "Cookie-Banner-Texte", - "Testi Banner Iniziale": "Texte des initialen Banners", - "Testi Cookie Banner": "Cookie-Banner-Texte", - "Testi Modale Preferenze": "Texte des Einstellungsdialogs", - "Testi categorie cookie": "Texte der Cookie-Kategorien", - "Testo Bottone": "Schaltflächentext", - "Testo Privacy": "Datenschutztext", - "Testo che apparirà nel footer del sito": "Text, der in der Fußzeile der Website angezeigt wird", - "Testo checkbox": "Checkbox-Text", - "Testo della checkbox privacy nel form": "Datenschutz-Checkbox-Text im Formular", - "Testo introduttivo": "Einleitungstext", - "Testo principale mostrato nel banner. Puoi usare HTML.": "Haupttext im Banner. Sie können HTML verwenden.", - "Testo pulsante": "Schaltflächentext", - "Testo pulsante \"Accetta tutti\"": "Schaltflächentext \"Alle akzeptieren\"", - "Testo pulsante \"Preferenze\"": "Schaltflächentext \"Einstellungen\"", - "Testo pulsante \"Rifiuta non essenziali\"": "Schaltflächentext \"Nicht erforderliche ablehnen\"", - "Testo pulsante \"Salva selezionati\"": "Schaltflächentext \"Auswahl speichern\"", - "Ti abbiamo inviato un'email con il link per confermare l'indirizzo.": "Wir haben Ihnen eine E-Mail mit dem Bestätigungslink gesendet.", - "Timeout (secondi)": "Timeout (Sekunden)", - "Timestamp": "Zeitstempel", - "Tipo": "Typ", - "Tipo Acquisizione": "Erwerbungsart", - "Tipo Card": "Kartentyp", - "Tipo Contenuto": "Inhaltstyp", - "Tipo MIME non valido. Solo file CSV sono accettati.": "Ungültiger MIME-Typ. Es werden nur CSV-Dateien akzeptiert.", - "Tipo OG": "OG-Typ", - "Tipo Twitter Card": "Twitter Card-Typ", - "Tipo Utente": "Benutzertyp", - "Tipo acquisizione": "Erwerbungsart", - "Tipo di contenuto per Open Graph. Scegli 'Website' per la homepage.": "Inhaltstyp für Open Graph. Wählen Sie 'Website' für die Startseite.", - "Tipo di file non consentito. Sono ammessi solo: %s": "Dateityp nicht erlaubt. Nur erlaubt: %s", - "Tipo di file non supportato. Solo JPEG e PNG sono consentiti.": "Nicht unterstützter Dateityp. Nur JPEG und PNG sind erlaubt.", - "Tipo di file non valido.": "Ungültiger Dateityp.", - "Tipo di file non valido. Carica un'immagine reale.": "Ungültiger Dateityp. Bitte laden Sie ein echtes Bild hoch.", - "Tipo di issue non valido": "Ungültiger Problem-Typ", - "Tipo non valido": "Ungültiger Typ.", - "Tipo utente": "Benutzertyp", - "Tipologia account": "Kontotyp", - "Tipologia:": "Typ:", - "Titolo": "Titel", - "Titolo (opzionale)": "Titel (optional)", - "Titolo 1": "Überschrift 1", - "Titolo 2": "Überschrift 2", - "Titolo 3": "Überschrift 3", - "Titolo A-Z": "Titel A–Z", - "Titolo CTA": "CTA-Titel", - "Titolo Evento": "Veranstaltungstitel", - "Titolo Modale": "Dialog-Titel", - "Titolo OG": "OG-Titel", - "Titolo Open Graph": "Open-Graph-Titel", - "Titolo Pagina": "Seitentitel", - "Titolo SEO": "SEO-Titel", - "Titolo Twitter": "Twitter-Titel", - "Titolo Z-A": "Titel Z–A", - "Titolo del libro": "Buchtitel", - "Titolo della sezione e le 4 card con le caratteristiche": "Bereichstitel und die 4 Funktionskarten", - "Titolo e descrizione mostrati sopra i caroselli dei generi": "Titel und Beschreibung über den Genre-Karussells", - "Titolo libro": "Buchtitel", - "Titolo modale": "Modal-Titel", - "Titolo mostrato quando condividi su Facebook/LinkedIn. Se vuoto, usa il titolo SEO o hero.": "Titel, der beim Teilen auf Facebook/LinkedIn angezeigt wird. Wenn leer, wird der SEO- oder Hero-Titel verwendet.", - "Titolo non disponibile": "Titel nicht verfügbar", - "Titolo obbligatorio mancante": "Pflichtfeld Titel fehlt", - "Titolo pagina": "Seitentitel", - "Titolo per Twitter/X. Se vuoto, usa il titolo Open Graph.": "Titel für Twitter/X. Wenn leer, wird der Open Graph-Titel verwendet.", - "Titolo principale (H1)": "Haupttitel (H1)", - "Titolo sezione": "Bereichstitel", - "Titolo troppo lungo (max 255 caratteri)": "Titel zu lang (max. 255 Zeichen)", - "Titolo, sottotitolo, descrizione...": "Titel, Untertitel, Beschreibung...", - "Titolo...": "Titel...", - "Titolo:": "Titel:", - "Toggle menu": "Menü umschalten", - "Toggle search": "Suche umschalten", - "Token CSRF non valido": "Ungültiges CSRF-Token.", - "Token CSRF non valido. Riprova.": "Ungültiges CSRF-Token. Bitte versuchen Sie es erneut.", - "Token di sicurezza non valido. Riprova.": "Ungültiges Sicherheitstoken. Bitte versuchen Sie es erneut.", - "Top 10 Lettori Più Attivi": "Top 10 der aktivsten Leser", - "Top 10 Libri Più Prestati": "Top 10 der am häufigsten ausgeliehenen Bücher", - "Torna Indietro": "Zurück", - "Torna agli Eventi": "Zurück zu Veranstaltungen", - "Torna agli eventi": "Zurück zu Veranstaltungen", - "Torna ai Libri": "Zurück zu Bücher", - "Torna ai Prestiti": "Zurück zu Ausleihen", - "Torna ai temi": "Zurück zu den Themes", - "Torna al login": "Zurück zur Anmeldung", - "Torna all'Applicazione": "Zurück zur Anwendung", - "Torna all'elenco": "Zurück zur Liste", - "Torna alla Configurazione Database": "Zurück zur Datenbankkonfiguration", - "Torna alla Home": "Zurück zur Startseite", - "Torna alla categoria superiore": "Zurück zur übergeordneten Kategorie", - "Torna alla dashboard": "Zurück zum Dashboard", - "Torna alla lista": "Zurück zur Liste", - "Torna alla panoramica eventi": "Zurück zur Veranstaltungsübersicht", - "Torna alle Impostazioni": "Zurück zu Einstellungen", - "Torna alle Impostazioni CMS": "Zurück zu CMS-Einstellungen", - "Torna alle Lingue": "Zurück zu Sprachen", - "Torna alle Prenotazioni": "Zurück zu Vormerkungen", - "Total users:": "Benutzer gesamt:", - "Totale": "Gesamt", - "Totale Autori": "Autoren gesamt", - "Totale Generi": "Genres gesamt", - "Totale Libri": "Bücher gesamt", - "Totale Prestiti": "Ausleihen gesamt", - "Totale autori": "Autoren gesamt", - "Totale editori:": "Verlage gesamt:", - "Totale libri": "Bücher gesamt", - "Totale libri presenti": "Bücher im Bestand gesamt", - "Totale utenti:": "Benutzer gesamt:", - "Totale: %s righe": "Gesamt: %s Zeilen", - "Totali": "Gesamt", - "Tracce": "Titel", - "Tracklist": "Titelliste", - "Traduttore": "Übersetzer", - "Traduzioni e localizzazione": "Übersetzungen und Lokalisierung", - "Trascina le sezioni per riordinarle. L'ordine sarà salvato automaticamente e rispecchiato nella homepage.": "Ziehen Sie die Bereiche zum Neuordnen. Die Reihenfolge wird automatisch gespeichert und auf der Startseite übernommen.", - "Trascina per riordinare • Il codice deve essere univoco": "Zum Neuordnen ziehen – Der Code muss eindeutig sein", - "Trascina per riordinare • Ogni scaffale + livello deve essere univoco": "Zum Neuordnen ziehen – Jede Regal- und Fachkombination muss eindeutig sein", - "Trascina qui il file CSV o %{browse}": "CSV-Datei hierher ziehen oder %{browse}", - "Trascina qui il file ZIP del plugin o %{browse}": "Plugin-ZIP-Datei hierher ziehen oder %{browse}", - "Trascina qui il logo o %{browse}": "Logo hierher ziehen oder %{browse}", - "Trascina qui l'immagine di sfondo o %{browse}": "Hintergrundbild hierher ziehen oder %{browse}", - "Trascina qui l'immagine o %{browse}": "Bild hierher ziehen oder %{browse}", - "Trascina qui l'immagine, %{browse} o importa da": "Bild hierher ziehen, %{browse} oder importieren von", - "Trascina qui la copertina del libro o %{browse}": "Buchcover hierher ziehen oder %{browse}", - "Trascina qui la copertina del libro o clicca per selezionare": "Buchcover hierher ziehen oder klicken zum Auswählen", - "Trasforma Pinakes in un catalogo di sola consultazione": "Pinakes in einen reinen Katalog umwandeln", - "Trigger database configurati": "Datenbank-Trigger konfiguriert", - "Trigger database: azione manuale richiesta": "Datenbank-Trigger: manuelle Aktion erforderlich", - "Trigger importati OK": "Trigger erfolgreich importiert", - "Troppi errori durante l'import dei dati (%d errori). Primi errori:\n%s": "Zu viele Fehler beim Daten-Import (%d Fehler). Erste Fehler:\n%s", - "Troppi errori durante l'import dello schema (%d errori). Primi errori:\n%s": "Zu viele Fehler beim Schema-Import (%d Fehler). Erste Fehler:\n%s", - "Troppi tentativi. Attendi qualche minuto prima di riprovare": "Zu viele Versuche. Bitte warten Sie einige Minuten, bevor Sie es erneut versuchen", - "Trovate tabelle da backuppare": "Zu sichernde Tabellen gefunden", - "Trovato": "Gefunden", - "Tutorial": "Anleitung", - "Tutte le copie di questo libro hanno già un prestito attivo o prenotato. Attendi che una copia venga restituita.": "Alle Exemplare dieses Buches haben bereits eine aktive oder geplante Ausleihe. Bitte warten Sie, bis ein Exemplar zurückgegeben wird.", - "Tutte le copie in prestito": "Alle Exemplare ausgeliehen", - "Tutte le copie prenotate": "Alle Exemplare vorgemerkt", - "Tutte le date sono in formato ISO 8601 (YYYY-MM-DD HH:MM:SS)": "Alle Daten sind im ISO-8601-Format (YYYY-MM-DD HH:MM:SS)", - "Tutte le mensole": "Alle Fächer", - "Tutte le notifiche del sistema": "Alle Systembenachrichtigungen", - "Tutte le richieste sono state gestite.": "Alle Anfragen wurden bearbeitet.", - "Tutte le risorse del sito devono essere HTTPS": "Alle Website-Ressourcen müssen über HTTPS geladen werden", - "Tutte le route devono iniziare con": "Alle Routen müssen beginnen mit", - "Tutte le tabelle di sistema sono presenti!": "Alle Systemtabellen sind vorhanden!", - "Tutti": "Alle", - "Tutti gli anni": "Alle Jahre", - "Tutti gli autori": "Alle Autoren", - "Tutti gli editori": "Alle Verlage", - "Tutti gli eventi": "Alle Veranstaltungen", - "Tutti gli indici di performance sono presenti.": "Alle Performance-Indizes sind vorhanden.", - "Tutti gli scaffali": "Alle Regale", - "Tutti gli stati": "Alle Status", - "Tutti i controlli di integrità sono passati con successo!": "Alle Integritätsprüfungen wurden erfolgreich bestanden!", - "Tutti i diritti riservati.": "Alle Rechte vorbehalten.", - "Tutti i filtri sono stati rimossi": "Alle Filter wurden entfernt", - "Tutti i generi": "Alle Genres", - "Tutti i libri": "Alle Bücher", - "Tutti i messaggi ricevuti tramite il form contatti": "Alle über das Kontaktformular eingegangenen Nachrichten", - "Tutti i requisiti sono soddisfatti! Puoi procedere con l'installazione.": "Alle Anforderungen sind erfüllt! Sie können mit der Installation fortfahren.", - "Tutti i ruoli": "Alle Rollen", - "Tutti soddisfatti": "Alle erfüllt", - "Tutto": "Alle", - "Tutto aggiornato!": "Alles auf dem neuesten Stand!", - "Tutto sotto controllo!": "Alles unter Kontrolle!", - "Twitter": "Twitter", - "Twitter Card": "Twitter Card", - "Twitter Cards (X)": "Twitter Cards (X)", - "URL Canonico": "Kanonische URL", - "URL Canonico (opzionale)": "Kanonische URL (optional)", - "URL Canonico Mancante": "Fehlende kanonische URL", - "URL Canonico Non Valido": "Ungültige kanonische URL", - "URL Canonico Vuoto": "Leere kanonische URL", - "URL Endpoint API": "API-Endpoint-URL", - "URL Endpoint SRU": "SRU-Endpoint-URL", - "URL Non Valido": "Ungültige URL", - "URL OG": "OG-URL", - "URL completo del sito (es: https://biblioteca.example.com). Usato per link nelle email (verifica account, reset password). Se lasciato vuoto, verrà auto-rilevato.": "Vollständige Website-URL (z. B. https://biblioteca.example.com). Wird für Links in E-Mails verwendet (Kontobestätigung, Passwort zurücksetzen). Wenn leer, wird sie automatisch erkannt.", - "URL completo della pagina (auto-generato se vuoto)": "Vollständige Seiten-URL (wird automatisch generiert, wenn leer)", - "URL della pagina con la cookie policy": "URL der Seite mit der Cookie-Richtlinie", - "URL della pagina con le tecnologie dei cookie": "URL der Seite mit den Cookie-Technologien", - "URL di download non trovato": "Download-URL nicht gefunden", - "URL non valido o non permesso.": "Ungültige oder nicht erlaubte URL.", - "URL non valido.": "Ungültige URL.", - "URL principale del sito. Se vuoto, usa l'URL corrente.": "Haupt-URL der Website. Wenn leer, wird die aktuelle URL verwendet.", - "URL pubblico:": "Öffentliche URL:", - "URL sito web...": "Website-URL...", - "URL...": "URL...", - "Ultima": "Letzte", - "Ultima Versione": "Neueste Version", - "Ultima generazione:": "Letzte Generierung:", - "Ultima modifica": "Zuletzt geändert", - "Ultimi Arrivi": "Neueste Zugänge", - "Ultimi Libri Aggiunti": "Zuletzt hinzugefügte Bücher", - "Ultimi Libri Inseriti": "Zuletzt hinzugefügte Bücher", - "Ultimi aggiunti (data creazione)": "Zuletzt hinzugefügt (Erstellungsdatum)", - "Ultimi modificati (data aggiornamento)": "Zuletzt bearbeitet (Aktualisierungsdatum)", - "Ultimo": "Letzter", - "Ultimo Aggiornamento": "Letzte Aktualisierung", - "Ultimo accesso": "Letzter Zugriff", - "Ultimo aggiornamento": "Letzte Aktualisierung", - "Ultimo uso:": "Letzte Nutzung:", - "Ultimo utilizzo": "Zuletzt verwendet", - "Umberto Eco": "Umberto Eco", - "Un altro aggiornamento è già in corso. Riprova più tardi.": "Ein anderes Update läuft bereits. Bitte versuchen Sie es später erneut.", - "Un backup viene creato automaticamente prima di salvare": "Vor dem Speichern wird automatisch ein Backup erstellt", - "Un'esperienza di lettura moderna, intuitiva e sempre a portata di mano": "Ein modernes, intuitives Leseerlebnis – immer griffbereit", - "Una chiave è attualmente salvata e funzionante. Puoi aggiornarla inserendo un nuovo valore o lasciarla vuota per rimuoverla.": "Ein Schlüssel ist derzeit gespeichert und funktioniert. Sie können ihn aktualisieren, indem Sie einen neuen Wert eingeben, oder leer lassen, um ihn zu entfernen.", - "Una chiave è già salvata. Inserisci un nuovo valore per aggiornarla oppure lascia vuoto per rimuoverla.": "Ein Schlüssel ist bereits gespeichert. Geben Sie einen neuen Wert ein, um ihn zu aktualisieren, oder lassen Sie das Feld leer, um ihn zu entfernen.", - "Una descrizione completa aiuta gli utenti a conoscere meglio l'autore": "Eine ausführliche Beschreibung hilft den Benutzern, den Autor besser kennenzulernen", - "Una mensola con livello %d esiste già in questo scaffale. Usa un livello diverso.": "Ein Fach mit Ebene %d existiert bereits in diesem Regal. Verwenden Sie eine andere Ebene.", - "Una panoramica dei libri che hai salvato per non perderli di vista.": "Eine Übersicht der Bücher, die Sie gespeichert haben, um sie im Blick zu behalten.", - "Unisci autori": "Autoren zusammenführen", - "Unisci editori": "Verlage zusammenführen", - "Unisciti alla nostra community di lettori e scopri il piacere della lettura con la nostra piattaforma moderna.": "Werden Sie Teil unserer Lesergemeinschaft und entdecken Sie die Freude am Lesen mit unserer modernen Plattform.", - "Upload non valido": "Ungültiger Upload", - "Uploader non disponibile": "Uploader nicht verfügbar", - "Usa": "Verwenden", - "Usa 'localhost' (raccomandato, rileva automaticamente TCP/socket). Puoi forzare '127.0.0.1' per TCP.": "Verwenden Sie 'localhost' (empfohlen, erkennt TCP/Socket automatisch). Sie können '127.0.0.1' für TCP erzwingen.", - "Usa codici semplici (A, B, C...)": "Verwenden Sie einfache Codes (A, B, C...)", - "Usa formato: 599 oppure 599.9 oppure 599.93": "Format verwenden: 599 oder 599.9 oder 599.93", - "Usa gli endpoint specifici per il formato legacy": "Verwenden Sie die spezifischen Endpoints für das Legacy-Format", - "Usa i servizi online per precompilare automaticamente i dati del libro": "Nutzen Sie Online-Dienste, um die Buchdaten automatisch auszufüllen", - "Usa il pulsante \"Rigenera adesso\" per crearla": "Verwenden Sie die Schaltfläche \"Jetzt neu generieren\", um sie zu erstellen", - "Usa il separatore %s": "Verwenden Sie das Trennzeichen %s", - "Usa l'editor per formattare il testo, aggiungere link, immagini e altro": "Verwenden Sie den Editor, um Text zu formatieren, Links, Bilder und mehr hinzuzufügen", - "Usa l'editor per formattare il testo, aggiungere link, immagini e altro.": "Verwenden Sie den Editor, um Text zu formatieren, Links, Bilder und mehr hinzuzufügen.", - "Usa le frecce ← → per saltare": "Verwenden Sie die Pfeiltasten ← →, um zu springen", - "Usa questa azione dopo aver importato un grande numero di libri o modifiche ai contenuti CMS.": "Verwenden Sie diese Aktion nach dem Import einer großen Anzahl von Büchern oder CMS-Inhaltsänderungen.", - "Usa questo campo per personalizzare lo stile del sito senza modificare i file di tema.": "Verwenden Sie dieses Feld, um den Stil der Website anzupassen, ohne die Theme-Dateien zu ändern.", - "Usata per login e comunicazioni.": "Wird für Anmeldung und Kommunikation verwendet.", - "Username": "Benutzername", - "Users": "Benutzer", - "Utente": "Benutzer", - "Utente %s (%s) si è registrato": "Benutzer %s (%s) hat sich registriert", - "Utente admin creato:": "Admin-Benutzer erstellt:", - "Utente aggiornato con successo!": "Benutzer erfolgreich aktualisiert!", - "Utente approvato con successo!": "Benutzer erfolgreich genehmigt!", - "Utente attivato direttamente!": "Benutzer direkt aktiviert!", - "Utente creato con successo!": "Benutzer erfolgreich erstellt!", - "Utente eliminato con successo.": "Benutzer erfolgreich gelöscht.", - "Utente prenotante": "Vormerkender Benutzer", - "Utente preselezionato": "Vorausgewählter Benutzer", - "Utente sconosciuto": "Unbekannter Benutzer", - "Utente senza nome": "Unbenannter Benutzer", - "Utente:": "Benutzer:", - "Utenti": "Benutzer", - "Utenti Attivi": "Aktive Benutzer", - "Utenti in Attesa di Approvazione": "Benutzer mit ausstehender Genehmigung", - "Utenti registrati": "Registrierte Benutzer", - "Utilizza l'editor TinyMCE per formattare il testo e Uppy per caricare immagini di alta qualità. Le modifiche saranno immediatamente visibili nella pagina pubblica.": "Verwenden Sie den TinyMCE-Editor, um Text zu formatieren, und Uppy, um hochwertige Bilder hochzuladen. Änderungen werden sofort auf der öffentlichen Seite sichtbar.", - "Utilizziamo i cookie per migliorare la tua esperienza. Continuando a visitare questo sito, accetti il nostro uso dei cookie.": "Wir verwenden Cookies, um Ihre Erfahrung zu verbessern. Durch die weitere Nutzung dieser Website akzeptieren Sie unsere Verwendung von Cookies.", - "Vai": "Los", - "Vai al Login": "Zur Anmeldung", - "Vai al login": "Zur Anmeldung", - "Vai all'Applicazione": "Zur Anwendung", - "Vai all'applicazione": "Zur Anwendung", - "Vai alla Home": "Zur Startseite", - "Validazione prestito fallita": "Ausleihvalidierung fehlgeschlagen", - "Valore applicato": "Wert übernommen", - "Valore compreso tra 1 e 30 giorni. Consigliato: 3 giorni": "Wert zwischen 1 und 30 Tagen. Empfohlen: 3 Tage", - "Valore non valido": "Ungültiger Wert", - "Valutazione *": "Bewertung *", - "Valutazione non valida (1-5 stelle)": "Ungültige Bewertung (1–5 Sterne)", - "Variabili disponibili:": "Verfügbare Variablen:", - "Vecchio": "Alt", - "Vedi": "Anzeigen", - "Vedi Dettagli": "Details anzeigen", - "Vedi alternative": "Alternativen anzeigen", - "Vedi dettagli": "Details anzeigen", - "Vedi istruzioni sotto per correggere manualmente.": "Siehe Anleitung unten zur manuellen Korrektur.", - "Vedi tutte le notifiche": "Alle Benachrichtigungen anzeigen", - "Vedi tutti": "Alle anzeigen", - "Vedi tutti gli eventi": "Alle Veranstaltungen anzeigen", - "Verifica Leggibilità": "Lesbarkeit prüfen", - "Verifica che il database sia accessibile e configurato correttamente nel file .env": "Überprüfen Sie, ob die Datenbank erreichbar und in der .env-Datei korrekt konfiguriert ist", - "Verifica che le credenziali del database nel file .env siano corrette": "Überprüfen Sie, ob die Datenbank-Zugangsdaten in der .env-Datei korrekt sind", - "Verifica coerenza e integrità del database": "Datenbankkonsistenz und -integrität prüfen", - "Verifica completata OK": "Überprüfung erfolgreich abgeschlossen", - "Verifica i permessi di esecuzione: chmod +x cron/automatic-notifications.php": "Überprüfen Sie die Ausführungsberechtigungen: chmod +x cron/automatic-notifications.php", - "Verifica in corso...": "Überprüfung läuft...", - "Verifica installazione...": "Installation wird überprüft...", - "Verifica reCAPTCHA fallita. Riprova.": "reCAPTCHA-Überprüfung fehlgeschlagen. Bitte versuchen Sie es erneut.", - "Verifica versioni": "Versionen prüfen", - "Verificato": "Verifiziert", - "Verrà creato automaticamente un backup prima dell'aggiornamento.": "Vor der Aktualisierung wird automatisch ein Backup erstellt.", - "Verrà creato un backup completo del database.": "Es wird ein vollständiges Datenbank-Backup erstellt.", - "Versione": "Version", - "Versione Installata": "Installierte Version", - "Versione Installer:": "Installer-Version:", - "Versione non specificata": "Version nicht angegeben", - "Versione non trovata": "Version nicht gefunden", - "Versione:": "Version:", - "Via Roma 123, 00100 Roma RM, Italia": "Musterstraße 123, 10115 Berlin, Deutschland", - "Via, numero civico, città, CAP": "Straße, Hausnummer, Stadt, PLZ", - "Via, numero...": "Straße, Nummer...", - "Video": "Video", - "Video tutorial": "Video-Tutorial", - "Visibile": "Sichtbar", - "Visibile pubblicamente sulla pagina contatti": "Öffentlich sichtbar auf der Kontaktseite", - "Visibilità Sezione Eventi": "Sichtbarkeit des Veranstaltungsbereichs", - "Visibilità aggiornata!": "Sichtbarkeit aktualisiert!", - "Visita il sito ufficiale": "Offizielle Website besuchen", - "Vista griglia": "Rasteransicht", - "Vista tabella": "Tabellenansicht", - "Visualizza": "Anzeigen", - "Visualizza Libro": "Buch anzeigen", - "Visualizza Tutte le Categorie": "Alle Kategorien anzeigen", - "Visualizza Tutto il Catalogo": "Gesamten Katalog anzeigen", - "Visualizza dettagli": "Details anzeigen", - "Visualizza dettagli libro": "Buchdetails anzeigen", - "Visualizza e esporta l'elenco dei libri per posizione fisica": "Bücherliste nach physischem Standort anzeigen und exportieren", - "Visualizza e gestisci tutti i prestiti della biblioteca": "Alle Ausleihen der Bibliothek anzeigen und verwalten", - "Visualizza la cronologia degli import CSV e LibraryThing con report errori dettagliati": "Zeigen Sie den Verlauf der CSV- und LibraryThing-Importe mit detaillierten Fehlerberichten an", - "Visualizza pagina live": "Live-Seite anzeigen", - "Visualizzazione da _START_ a _END_ di _TOTAL_ libri": "Anzeige von _START_ bis _END_ von _TOTAL_ Büchern", - "Visualizzazione gerarchica di generi e sottogeneri": "Hierarchische Ansicht von Genres und Untergenres", - "Voci totali": "Einträge gesamt", - "Vuoi aggiornare il libro \"${title}\"?": "Möchten Sie das Buch \"${title}\" aktualisieren?", - "Vuoi aggiornare il libro \"%s\"?": "Möchten Sie das Buch \"%s\" aktualisieren?", - "Vuoi aggiornare lo stato di questa copia?": "Möchten Sie den Status dieses Exemplars aktualisieren?", - "Vuoi approvare questa recensione e renderla visibile sul sito?": "Möchten Sie diese Rezension genehmigen und auf der Website sichtbar machen?", - "Vuoi attivare questo plugin?": "Möchten Sie dieses Plugin aktivieren?", - "Vuoi aumentare il numero di copie di questo libro?": "Möchten Sie die Anzahl der Exemplare dieses Buches erhöhen?", - "Vuoi correggere automaticamente i problemi di integrità rilevati?": "Möchten Sie die erkannten Integritätsprobleme automatisch beheben?", - "Vuoi creare gli indici mancanti? Questa operazione migliorerà le performance del database.": "Möchten Sie die fehlenden Indizes erstellen? Dieser Vorgang verbessert die Datenbankleistung.", - "Vuoi creare le tabelle di sistema mancanti? Queste sono necessarie per il sistema di aggiornamento.": "Möchten Sie die fehlenden Systemtabellen erstellen? Diese sind für das Aktualisierungssystem erforderlich.", - "Vuoi disattivare questo plugin?": "Möchten Sie dieses Plugin deaktivieren?", - "Vuoi disconnettere questo dispositivo?": "Möchten Sie dieses Gerät abmelden?", - "Vuoi disconnettere tutti i dispositivi? Dovrai effettuare nuovamente l'accesso su ogni dispositivo.": "Möchten Sie alle Geräte abmelden? Sie müssen sich auf jedem Gerät erneut anmelden.", - "Vuoi eliminare definitivamente questa recensione? Questa azione non può essere annullata.": "Möchten Sie diese Rezension endgültig löschen? Diese Aktion kann nicht rückgängig gemacht werden.", - "Vuoi eliminare questo elemento?": "Möchten Sie dieses Element löschen?", - "Vuoi eseguire la manutenzione completa del sistema? Questa operazione potrebbe richiedere alcuni minuti.": "Möchten Sie die vollständige Systemwartung ausführen? Dieser Vorgang kann einige Minuten dauern.", - "Vuoi impostare APP_CANONICAL_URL a:": "Möchten Sie APP_CANONICAL_URL setzen auf:", - "Vuoi procedere?": "Möchten Sie fortfahren?", - "Vuoi rifiutare questa recensione? L'utente verrà avvisato dell'esito.": "Möchten Sie diese Rezension ablehnen? Der Benutzer wird über das Ergebnis benachrichtigt.", - "WCAG AA Conforme": "WCAG AA konform", - "Website (Sito Web)": "Website", - "Wishlist": "Wunschliste", - "Wishlist disponibile": "Wunschliste verfügbar", - "Working...": "In Bearbeitung...", - "Yes, fix": "Ja, beheben", - "Yes, run": "Ja, ausführen", - "Zona Pericolosa": "Gefahrenbereich", - "acquisto": "Kauf", - "agosto": "August", - "al": "bis", - "altamente consigliato": "dringend empfohlen", - "aprile": "April", - "attivata": "aktiviert", - "autori": "Autoren", - "autori. Questa azione non può essere annullata.": "Autoren. Diese Aktion kann nicht rückgängig gemacht werden.", - "autori. Tutti i libri verranno assegnati all'autore risultante.": "Autoren. Alle Bücher werden dem resultierenden Autor zugeordnet.", - "biblioteca, prestito libri, catalogo online, scopri libri, prenotazioni": "Bibliothek, Buchausleihe, Online-Katalog, Bücher entdecken, Vormerkungen", - "bottoni nelle card": "Schaltflächen in Karten", - "bottoni principali": "Hauptschaltflächen", - "chiavi": "Schlüssel", - "chiavi tradotte": "übersetzte Schlüssel", - "classe principale": "Hauptklasse", - "come nuovo autore": "als neuer Autor", - "completamento": "Abschluss", - "con successo": "erfolgreich", - "copi": "Exemplar(e)", - "copia": "Exemplar", - "copie": "Exemplare", - "crontab -e": "crontab -e", - "danneggiato": "beschädigt", - "della lingua desiderata.": "der gewünschten Sprache.", - "deve iniziare con": "muss beginnen mit", - "di": "von", - "di %s": "von %s", - "dicembre": "Dezember", - "directory": "Verzeichnisse", - "disattivata": "deaktiviert", - "disponibile": "verfügbar", - "disponibili ora": "jetzt verfügbar", - "donazione": "Spende", - "dopo aver completato l'installazione.": "nach Abschluss der Installation.", - "eBook (PDF/ePub)": "eBook (PDF/ePub)", - "eBook caricato!": "eBook hochgeladen!", - "eBook disponibile": "eBook verfügbar", - "editori": "Verlage", - "editori. Questa azione non può essere annullata.": "Verlage. Diese Aktion kann nicht rückgängig gemacht werden.", - "editori. Tutti i libri verranno assegnati all'editore risultante.": "Verlage. Alle Bücher werden dem resultierenden Verlag zugeordnet.", - "elementi": "Elemente", - "elemento": "Element", - "elimina la cartella": "den Ordner löschen", - "errore di comunicazione con il server": "Kommunikationsfehler mit dem Server", - "es. 0.450": "z. B. 0,450", - "es. 15": "z. B. 15", - "es. 19.90": "z. B. 19,90", - "es. 2020": "z. B. 2020", - "es. 2024": "z. B. 2024", - "es. 2025": "z. B. 2025", - "es. 21x14 cm": "z. B. 21x14 cm", - "es. 26 agosto 2025": "z. B. 26. August 2025", - "es. 320": "z. B. 320", - "es. 599.9, 004.6782, 641.5945": "z.B. 599.9, 004.6782, 641.5945", - "es. 599.9, 004.6782, 641.5945, 599.1": "z.B. 599.9, 004.6782, 641.5945, 599.1", - "es. 8842935786": "z. B. 8842935786", - "es. 978-88-429-3578-0": "z. B. 978-88-429-3578-0", - "es. 9788842935780": "z. B. 9788842935780", - "es. Acquisto, Donazione, Prestito": "z. B. Kauf, Spende, Ausleihe", - "es. Biblioteca Civica": "z. B. Stadtbibliothek", - "es. Copertina rigida, Brossura": "z. B. Hardcover, Taschenbuch", - "es. Fantasy contemporaneo": "z. B. Zeitgenössische Fantasy", - "es. Gianni De Conno": "z. B. Gianni De Conno", - "es. I Classici": "z. B. Die Klassiker", - "es. INV-2024-001": "z. B. INV-2024-001", - "es. Integrazione Sito Web": "z. B. Website-Integration", - "es. Italiano, Inglese": "z. B. Italienisch, Englisch", - "es. La morale anarchica": "z. B. Die anarchistische Moral", - "es. Mario Rossi": "z. B. Max Mustermann", - "es. Noir mediterraneo": "z. B. Mediterraner Noir", - "es. Prima edizione": "z. B. Erstausgabe", - "es. RSSMRA80A01H501U": "z. B. RSSMRA80A01H501U", - "es. Urban fantasy": "z. B. Urban Fantasy", - "es. noreply@biblioteca.local": "z. B. noreply@bibliothek.local", - "es. romanzo, fantasy, avventura (separare con virgole)": "z. B. Roman, Fantasy, Abenteuer (mit Kommas trennen)", - "eventi": "Veranstaltungen", - "eventi, biblioteca, cultura": "Veranstaltungen, Bibliothek, Kultur", - "fallite.": "fehlgeschlagen.", - "fas fa-users": "fas fa-users", - "febbraio": "Februar", - "gennaio": "Januar", - "giorni prima della scadenza": "Tage vor Ablauf", - "giugno": "Juni", - "https://www.editore.com": "https://www.verlag.de", - "icone disponibili": "verfügbare Symbole", - "in attesa": "ausstehend", - "in_corso": "laufend", - "in_ritardo": "überfällig", - "info@editore.com": "info@verlag.de", - "installazione inglese usa": "Englische Installation verwendet", - "kg": "kg", - "libri": "Bücher", - "libri eliminati": "Bücher gelöscht", - "libri trovati": "Bücher gefunden", - "libri. Questa azione non può essere annullata.": "Bücher. Diese Aktion kann nicht rückgängig gemacht werden.", - "libro": "Buch", - "libro trovato": "Buch gefunden", - "linea": "Zeile", - "lingue": "Sprachen", - "lingue. Errori:": "Sprachen. Fehler:", - "link, accenti": "Links, Akzente", - "luglio": "Juli", - "maggio": "Mai", - "manutenzione": "Wartung", - "mario.rossi@email.it": "max.mustermann@email.de", - "marzo": "März", - "minuti fa": "vor Minuten", - "nell'header. Non includere i tag": "im Header. Fügen Sie keine Tags ein", - "nella directory dell'applicazione.": "im Anwendungsverzeichnis.", - "nella nostra biblioteca.": "in unserer Bibliothek.", - "nella root del progetto impedisce qualsiasi accesso non autorizzato.": "im Projektstammverzeichnis verhindert jeden unbefugten Zugriff.", - "non può contenere spazi": "darf keine Leerzeichen enthalten", - "non può essere vuota": "darf nicht leer sein", - "novembre": "November", - "o multipli separati da |": "oder mehrere getrennt durch |", - "o multipli: Engels;Marx": "oder mehrere: Engels;Marx", - "opzionale": "optional", - "opzionali": "optional", - "ordine:": "Reihenfolge:", - "ore fa": "vor Stunden", - "ottobre": "Oktober", - "pagina": "Seite", - "pagine": "Seiten", - "per conformità GDPR.": "zur DSGVO-Konformität.", - "per evitare blocchi (delay di 3 secondi tra ogni richiesta).": "um Blockierungen zu vermeiden (3 Sekunden Verzögerung zwischen jeder Anfrage).", - "per il giorno": "für den Tag", - "per pagina": "pro Seite", - "perso": "verloren", - "preferiti": "Favoriten", - "premi Invio per crearne uno nuovo.": "drücken Sie die Eingabetaste, um einen neuen zu erstellen.", - "prenotato": "vorgemerkt", - "prenotazione attiva": "aktive Vormerkung", - "prenotazioni": "Vormerkungen", - "prenotazioni attive": "aktive Vormerkungen", - "prestato": "ausgeliehen", - "prestiti attivi": "aktive Ausleihen", - "prestiti passati": "vergangene Ausleihen", - "prestiti totali": "Ausleihen gesamt", - "prestito attivo": "aktive Ausleihe", - "prestito passato": "vergangene Ausleihe", - "prima di procedere.": "bevor Sie fortfahren.", - "recensione": "Rezension", - "recensioni": "Rezensionen", - "referente@editore.com": "kontakt@verlag.de", - "restituito": "zurückgegeben", - "richiesta in sospeso": "ausstehende Anfrage", - "richieste in sospeso": "ausstehende Anfragen", - "risultati": "Ergebnisse", - "risultato": "Ergebnis", - "secondi (min: 5, max: 60)": "Sekunden (min: 5, max: 60)", - "seleziona": "durchsuchen", - "seleziona file": "Datei auswählen", - "selezionati": "ausgewählt", - "sessioni attive": "aktive Sitzungen", - "settembre": "September", - "sfoglia": "durchsuchen", - "sottogeneri": "Untergenres", - "sul server tramite SSH.": "auf dem Server über SSH.", - "titoli": "Titel", - "utente@example.com": "benutzer@beispiel.de", - "utenti": "Benutzer", - "verranno automaticamente selezionati.": "werden automatisch ausgewählt.", - "visualizzazione per copia": "Ansicht nach Exemplar", - "Български (BG)": "Bulgarisch (BG)", - "עברית (HE)": "Hebräisch (HE)", - "– Nessuno –": "– Keine –", - "••••••••": "••••••••", - "⚙️ Comportamento Automatico: Se inserisci codice in \"JavaScript Analitici\" o \"JavaScript Marketing\", i rispettivi toggle in Impostazioni Privacy verranno automaticamente selezionati.": "⚙️ Automatisches Verhalten: Wenn Sie Code in \"Analytics JavaScript\" oder \"Marketing JavaScript\" einfügen, werden die entsprechenden Schalter in den Datenschutzeinstellungen automatisch aktiviert.", - "⚠️ AZIONE RICHIESTA: Installazione Dipendenze PHP": "⚠️ AKTION ERFORDERLICH: Installation der PHP-Abhängigkeiten", - "⚠️ Privacy: Le mappe esterne vengono caricate solo se l'utente accetta i cookie Analytics.": "⚠️ Datenschutz: Externe Karten werden nur geladen, wenn der Benutzer Analytics-Cookies akzeptiert.", - "✅ Dipendenze PHP installate correttamente": "✅ PHP-Abhängigkeiten korrekt installiert", - "✓ Connessione riuscita! Database è vuoto e pronto per l'installazione.": "✓ Verbindung erfolgreich! Datenbank ist leer und bereit für die Installation.", - "✓ Crea autori mancanti": "✓ Fehlende Autoren erstellen", - "✓ Crea editori mancanti": "✓ Fehlende Verlage erstellen", - "✓ Report errori": "✓ Fehlerbericht", - "✓ Validazione dati": "✓ Datenvalidierung", - "❌ Errore di comunicazione con il server": "Kommunikationsfehler mit dem Server", - "💡 Non hai accesso SSH?": "💡 Sie haben keinen SSH-Zugang?", - "📋 Importante: Devi elencare manualmente i cookie tracciati da questi script nella Pagina Cookie per conformità GDPR.": "📋 Wichtig: Sie müssen die von diesen Skripten erfassten Cookies manuell auf der Cookie-Seite auflisten, um die DSGVO-Konformität zu gewährleisten.", - "📋 Istruzioni SSH (Click per espandere/chiudere)": "📋 SSH-Anleitung (Klicken zum Ein-/Ausklappen)", - "🔒 Sicurezza Importante": "🔒 Wichtige Sicherheit", - "Leggi PDF": "PDF lesen", - "Chiudi Visualizzatore": "Viewer schließen", - "Visualizzatore PDF": "PDF-Viewer", - "Usa la funzione di ricerca del browser per trovare testo nel documento": "Verwenden Sie die Suchfunktion des Browsers, um Text im Dokument zu finden", - "Usa il controllo schermo intero del viewer o del browser": "Verwenden Sie die Vollbildsteuerung des Viewers oder Browsers", - "Condivisione": "Teilen", - "Seleziona i pulsanti di condivisione da mostrare nella pagina del libro.": "Wählen Sie die Teilen-Schaltflächen aus, die auf der Buchseite angezeigt werden sollen.", - "Nessun pulsante selezionato": "Keine Schaltflächen ausgewählt", - "Salva impostazioni condivisione": "Freigabeeinstellungen speichern", - "Impostazioni di condivisione aggiornate.": "Freigabeeinstellungen aktualisiert.", - "Condividi su X": "Auf X teilen", - "Condividi su Telegram": "Auf Telegram teilen", - "Condividi su LinkedIn": "Auf LinkedIn teilen", - "Condividi su Reddit": "Auf Reddit teilen", - "Condividi su Pinterest": "Auf Pinterest teilen", - "Condividi su Threads": "Auf Threads teilen", - "Condividi su Bluesky": "Auf Bluesky teilen", - "Condividi su Tumblr": "Auf Tumblr teilen", - "Salva su Pocket": "Auf Pocket speichern", - "Condividi su VK": "Auf VK teilen", - "Condividi su LINE": "Auf LINE teilen", - "Invia via SMS": "Per SMS senden", - "Invia per email": "Per E-Mail senden", - "Copia link": "Link kopieren", - "Collezione: %d libri, %d autori, %d editori.": "Sammlung: %d Bücher, %d Autoren, %d Verlage.", - "Catalogo bibliotecario gestito con [Pinakes](https://github.com/fabiodalez-dev/Pinakes). Disponibile in: %s.": "Bibliothekskatalog betrieben mit [Pinakes](https://github.com/fabiodalez-dev/Pinakes). Verfügbar in: %s.", - "Pagine Principali": "Hauptseiten", - "Sfoglia e cerca la collezione completa": "Die gesamte Buchsammlung durchsuchen", - "Informazioni sulla biblioteca": "Über diese Bibliothek", - "Calendario eventi culturali": "Kulturveranstaltungskalender", - "Informativa sulla privacy": "Datenschutzerklärung", - "Feed e Scoperta": "Feeds & Entdecken", - "Feed RSS": "RSS-Feed", - "Ultime aggiunte al catalogo (RSS 2.0)": "Neueste Katalogeinträge (RSS 2.0)", - "Indice completo degli URL": "Vollständiges URL-Verzeichnis", - "Interoperabilità bibliotecaria (MARCXML, Dublin Core)": "Bibliotheksinteroperabilität (MARCXML, Dublin Core)", - "Autenticazione utente": "Benutzeranmeldung", - "Registrazione nuovo utente": "Neue Benutzerregistrierung", - "Genera automaticamente un file llms.txt per rendere la biblioteca comprensibile ai modelli linguistici (LLM)": "Automatische Generierung einer llms.txt-Datei, damit die Bibliothek für große Sprachmodelle (LLMs) verständlich wird", - "Cos'è llms.txt:": "Was ist llms.txt:", - "È uno standard emergente (llmstxt.org) che fornisce ai motori AI un sommario strutturato del sito in formato Markdown. Quando attivo, il file viene generato dinamicamente con le statistiche della biblioteca, le pagine pubbliche e le informazioni API.": "Ein aufkommender Standard (llmstxt.org), der KI-Systemen eine strukturierte Markdown-Zusammenfassung der Website bereitstellt. Wenn aktiviert, wird die Datei dynamisch mit Bibliotheksstatistiken, öffentlichen Seiten und API-Informationen generiert.", - "Abilita llms.txt": "llms.txt aktivieren", - "Rende disponibile /llms.txt e lo aggiunge a robots.txt": "Macht /llms.txt verfügbar und fügt es zur robots.txt hinzu", - "Disattivato": "Deaktiviert" -} + "\"%s\" prestato a %s è in ritardo di %d giorni": "\"%s\" ausgeliehen an %s ist %d Tage überfällig", + "$1": "$1", + "$2": "$2", + "%d Indici Mancanti": "%d fehlende Indizes", + "%d Problemi": "%d Probleme", + "%d Tabelle Mancanti": "%d fehlende Tabellen", + "%d autori eliminati": "%d Autoren gelöscht", + "%d copie disponibili su %d": "%d Exemplare von %d verfügbar", + "%d editori eliminati": "%d Verlage gelöscht", + "%d file sensibili protetti": "%d sensible Dateien geschützt", + "%d giorni": "%d Tage", + "%d import logs eliminati (più vecchi di %d giorni)": "%d Importprotokolle gelöscht (älter als %d Tage)", + "%d import registrati": "%d Importe aufgezeichnet", + "%d import registrato": "%d Import aufgezeichnet", + "%d indici creati con successo": "%d Indizes erfolgreich erstellt", + "%d indici mancanti trovati": "%d fehlende Indizes gefunden", + "%d libri eliminati": "%d Bücher gelöscht", + "%d minuti fa": "vor %d Minuten", + "%d minuto fa": "vor %d Minute", + "%d notifica non letta": "%d ungelesene Benachrichtigung", + "%d notifiche non lette": "%d ungelesene Benachrichtigungen", + "%d ora fa": "vor %d Stunde", + "%d ore fa": "vor %d Stunden", + "%d prenotazione attiva": "%d aktive Vormerkung", + "%d prenotazioni attive": "%d aktive Vormerkungen", + "%d prestiti attivi": "%d aktive Ausleihen", + "%d prestiti in ritardo": "%d überfällige Ausleihen", + "%d prestiti passati": "%d vergangene Ausleihen", + "%d prestito attivo": "%d aktive Ausleihe", + "%d prestito in ritardo": "%d überfällige Ausleihe", + "%d prestito passato": "%d vergangene Ausleihe", + "%d problemi rilevati": "%d Probleme erkannt", + "%d recensione": "%d Rezension", + "%d recensioni": "%d Rezensionen", + "%d richiesta in sospeso": "%d ausstehende Anfrage", + "%d richieste in sospeso": "%d ausstehende Anfragen", + "%d tabelle create con successo": "%d Tabellen erfolgreich erstellt", + "%d titoli": "%d Titel", + "%s ha prenotato \"%s\"": "%s hat \"%s\" vorgemerkt", + "%s non è valido": "%s ist ungültig", + "%s è richiesto": "%s ist erforderlich", + "%s è richiesta": "%s ist erforderlich", + "%s deve essere di almeno 8 caratteri": "%s muss mindestens 8 Zeichen lang sein", + "%s non può superare i 72 caratteri": "%s darf nicht länger als 72 Zeichen sein", + "(codici ISO e nomi inglesi accettati)": "(ISO-Codes und englische Namen akzeptiert)", + "(filtrati da _MAX_ libri totali)": "(gefiltert von insgesamt _MAX_ Büchern)", + "(opzionale - URL completo)": "(optional – vollständige URL)", + "(opzionale - max 160 caratteri)": "(optional – max. 160 Zeichen)", + "(opzionale - max 200 caratteri)": "(optional - max. 200 Zeichen)", + "(opzionale - max 60 caratteri)": "(optional – max. 60 Zeichen)", + "(opzionale - max 70 caratteri)": "(optional - max. 70 Zeichen)", + "(opzionale - separate da virgola)": "(optional – kommagetrennt)", + "(opzionale)": "(optional)", + "(percorso legacy)": "(Legacy-Pfad)", + "+ 15 campi aggiuntivi disponibili (vedi CSV di esempio)": "+ 15 zusätzliche Felder verfügbar (siehe Beispiel-CSV)", + "+ Aggiungi da preset...": "+ Aus Vorlage hinzufügen...", + "+39 02 1234567": "+49 30 1234567", + "+39 123 456 7890": "+49 123 456 7890", + ", %d errori": ", %d Fehler", + ", %d libri arricchiti con scraping": ", %d Bücher per Scraping angereichert", + "-- Seleziona --": "-- Auswählen --", + "-- Seleziona un template --": "-- Vorlage auswählen --", + "... e altri %d errori": "... und %d weitere Fehler", + ".env caricato OK": ".env erfolgreich geladen", + "/* Inserisci il tuo codice CSS qui */\n/* Esempio: */\n/* body { font-size: 16px; } */": "/* Geben Sie hier Ihren CSS-Code ein */\n/* Beispiel: */\n/* body { font-size: 16px; } */", + "// Script analytics (es. Google Analytics)\n// Esempio Google Analytics 4:\n// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n// ga('create', 'UA-XXXXX-Y', 'auto');\n// ga('send', 'pageview');": "// Analytics-Skripte (z. B. Google Analytics)\n// Google Analytics 4 Beispiel:\n// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n// ga('create', 'UA-XXXXX-Y', 'auto');\n// ga('send', 'pageview');", + "// Script essenziali (es. chat, accessibility)\n// Esempio:\n// console.log('Essential JS loaded');": "// Essentielle Skripte (z. B. Chat, Barrierefreiheit)\n// Beispiel:\n// console.log('Essential JS loaded');", + "// Script marketing (es. Facebook Pixel)\n// Esempio Facebook Pixel:\n// !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n// n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n// n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n// t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n// document,'script','https://connect.facebook.net/en_US/fbevents.js');\n// fbq('init', 'YOUR_PIXEL_ID');\n// fbq('track', 'PageView');": "// Marketing-Skripte (z. B. Facebook Pixel)\n// Facebook Pixel Beispiel:\n// !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n// n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n// n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n// t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n// document,'script','https://connect.facebook.net/en_US/fbevents.js');\n// fbq('init', 'YOUR_PIXEL_ID');\n// fbq('track', 'PageView');", + "/catalogo": "/catalog", + "0-10 libri": "0–10 Bücher", + "1 copia disponibile su %d": "1 Exemplar von %d verfügbar", + "1 evento": "1 Veranstaltung", + "1. Accesso al server": "1. Serverzugang", + "1. Collegati al server via SSH:": "1. Verbinden Sie sich per SSH mit dem Server:", + "101-500 libri": "101–500 Bücher", + "11-50 libri": "11–50 Bücher", + "2. Aggiungi una delle configurazioni seguenti:": "2. Fügen Sie eine der folgenden Konfigurationen hinzu:", + "2. Vai nella directory dell'applicazione:": "2. Wechseln Sie in das Anwendungsverzeichnis:", + "3. Installa le dipendenze con Composer:": "3. Installieren Sie die Abhängigkeiten mit Composer:", + "4. Verifica che le dipendenze siano state installate:": "4. Überprüfen Sie, ob die Abhängigkeiten installiert wurden:", + "51-100 libri": "51–100 Bücher", + ": attiva per ordinare la colonna in ordine crescente": ": aktivieren, um die Spalte aufsteigend zu sortieren", + ": attiva per ordinare la colonna in ordine decrescente": ": aktivieren, um die Spalte absteigend zu sortieren", + "A": "A", + "AA Testo Grande": "AA Großer Text", + "API": "API", + "API Key": "API-Schlüssel", + "API Key già configurata": "API-Schlüssel bereits konfiguriert", + "API Keys": "API-Schlüssel", + "API Pubblica": "Öffentliche API", + "API abilitata con successo.": "API erfolgreich aktiviert.", + "API configurata": "API konfiguriert", + "API disabilitata con successo.": "API erfolgreich deaktiviert.", + "API key creata con successo.": "API-Schlüssel erfolgreich erstellt.", + "API key eliminata con successo.": "API-Schlüssel erfolgreich gelöscht.", + "APP_CANONICAL_URL configurato con valore non valido: '%s'. Link nelle email potrebbero non funzionare. Valore suggerito: %s": "APP_CANONICAL_URL mit ungültigem Wert konfiguriert: '%s'. E-Mail-Links funktionieren möglicherweise nicht. Empfohlener Wert: %s", + "APP_CANONICAL_URL configurato ma vuoto nel file .env. Link nelle email useranno fallback a HTTP_HOST. Valore suggerito: %s": "APP_CANONICAL_URL konfiguriert, aber leer in der .env-Datei. E-Mail-Links verwenden HTTP_HOST als Fallback. Empfohlener Wert: %s", + "APP_CANONICAL_URL non configurato nel file .env. Link nelle email potrebbero non funzionare correttamente. Valore suggerito: %s": "APP_CANONICAL_URL nicht in der .env-Datei konfiguriert. Links in E-Mails funktionieren möglicherweise nicht korrekt. Empfohlener Wert: %s", + "ATTENZIONE: Disinstallazione Irreversibile": "ACHTUNG: Unwiderrufliche Deinstallation", + "AVVISO Trigger:": "Trigger-WARNUNG:", + "Abilita": "Aktivieren", + "Abilita Client SRU": "SRU-Client aktivieren", + "Abilita Cookie Banner": "Cookie-Banner aktivieren", + "Abilita HSTS": "HSTS aktivieren", + "Abilita Modalità Catalogo": "Katalogmodus aktivieren", + "Abilita Modalità Solo Catalogo": "Reinen Katalogmodus aktivieren", + "Abilita Plugin": "Plugin aktivieren", + "Abilita Server SRU": "SRU-Server aktivieren", + "Abilita o disabilita l'accesso all'API pubblica": "Öffentlichen API-Zugang aktivieren oder deaktivieren", + "Abilitata": "Aktiviert", + "Abilitata - Visibile nel frontend": "Aktiviert – Im Frontend sichtbar", + "Abilitato": "Aktiviert", + "Accedi": "Anmelden", + "Accedi a /installer/?force=1 per forzare una reinstallazione": "Rufen Sie /installer/?force=1 auf, um eine Neuinstallation zu erzwingen", + "Accedi al server tramite SSH e modifica il crontab:": "Greifen Sie per SSH auf den Server zu und bearbeiten Sie den Crontab:", + "Accedi al tuo account": "Melden Sie sich bei Ihrem Konto an", + "Accedi all'area admin con le credenziali sopra indicate": "Melden Sie sich mit den oben angegebenen Zugangsdaten im Adminbereich an", + "Accedi e Procedi": "Anmelden und fortfahren", + "Accedi per Prenotare": "Anmelden zum Vormerken", + "Accedi per aggiungere ai Preferiti": "Melden Sie sich an, um zu den Favoriten hinzuzufügen", + "Accento": "Akzent", + "Accesso": "Anmeldung", + "Accesso Richiesto": "Anmeldung erforderlich", + "Accesso in corso...": "Anmeldung läuft...", + "Accesso negato. Permessi insufficienti.": "Zugriff verweigert. Unzureichende Berechtigungen.", + "Accesso non autorizzato": "Unbefugter Zugriff", + "Accetta selezionati": "Ausgewählte akzeptieren", + "Accetta tutti": "Alle akzeptieren", + "Accetto la": "Ich akzeptiere die", + "Account": "Konto", + "Account In Attesa": "Konto ausstehend", + "Account Sospeso": "Konto gesperrt", + "Account attivato": "Konto aktiviert", + "Account creato con successo! Verifica la tua email.": "Konto erfolgreich erstellt! Überprüfen Sie Ihre E-Mail.", + "Account creato! In attesa di approvazione da parte dell'amministratore.": "Konto erstellt! Warten auf Genehmigung durch den Administrator.", + "Acquisito a": "Erworben um", + "Acquisito da": "Erworben von", + "Acquisto": "Kauf", + "Adesso": "Gerade eben", + "Admin": "Admin", + "Admin Dewey": "Dewey-Verwaltung", + "Aggiorna": "Aktualisieren", + "Aggiorna Dati": "Daten aktualisieren", + "Aggiorna Evento": "Veranstaltung aktualisieren", + "Aggiorna Ora": "Jetzt aktualisieren", + "Aggiorna Statistiche": "Statistiken aktualisieren", + "Aggiorna da ISBN": "Von ISBN aktualisieren", + "Aggiorna i dettagli del libro:": "Buchdetails aktualisieren:", + "Aggiorna i dettagli dell'autore: %s": "Autorendetails aktualisieren: %s", + "Aggiorna i dettagli dell'editore:": "Verlagsdetails aktualisieren:", + "Aggiorna il conteggio delle copie disponibili": "Anzahl der verfügbaren Exemplare aktualisieren", + "Aggiorna le informazioni del profilo selezionato.": "Ausgewählte Profilinformationen aktualisieren.", + "Aggiorna password": "Passwort aktualisieren", + "Aggiornamenti": "Aktualisierungen", + "Aggiornamento alla versione %s completato": "Aktualisierung auf Version %s abgeschlossen", + "Aggiornamento completato con successo": "Aktualisierung erfolgreich abgeschlossen", + "Aggiornamento completato!": "Aktualisierung abgeschlossen!", + "Aggiornamento disponibile!": "Aktualisierung verfügbar!", + "Aggiornamento fallito": "Aktualisierung fehlgeschlagen", + "Aggiornamento già in corso": "Aktualisierung läuft bereits", + "Aggiornamento in corso. Riprova tra qualche minuto.": "Aktualisierung läuft. Bitte versuchen Sie es in einigen Minuten erneut.", + "Aggiornamento in corso...": "Aktualisierung läuft...", + "Aggiornamento...": "Aktualisierung...", + "Aggiornata in base a scaffale, mensola e posizione.": "Aktualisiert basierend auf Regal, Regalboden und Position.", + "Aggiornate %d righe": "%d Zeilen aktualisiert", + "Aggiornati": "Aktualisiert", + "Aggiungere una Nuova Lingua": "Eine neue Sprache hinzufügen", + "Aggiungi": "Hinzufügen", + "Aggiungi Genere Rapido": "Genre schnell hinzufügen", + "Aggiungi Lingua": "Sprache hinzufügen", + "Aggiungi Nuova Lingua": "Neue Sprache hinzufügen", + "Aggiungi Nuovo Autore": "Neuen Autor hinzufügen", + "Aggiungi Nuovo Editore": "Neuen Verlag hinzufügen", + "Aggiungi Nuovo Libro": "Neues Buch hinzufügen", + "Aggiungi Prima Lingua": "Erste Sprache hinzufügen", + "Aggiungi Sottogenere": "Untergenre hinzufügen", + "Aggiungi ai Preferiti": "Zu Favoriten hinzufügen", + "Aggiungi al file .env: APP_CANONICAL_URL=%s": "In der .env-Datei hinzufügen: APP_CANONICAL_URL=%s", + "Aggiungi alla collezione": "Zur Sammlung hinzufügen", + "Aggiungi decimale": "Dezimalstelle hinzufügen", + "Aggiungi eventuali note sul prestito": "Fügen Sie eventuelle Anmerkungen zur Ausleihe hinzu", + "Aggiungi eventuali note...": "Anmerkungen hinzufügen...", + "Aggiungi i libri che ti interessano dalla scheda di dettaglio per ricevere un promemoria quando tornano disponibili.": "Fügen Sie Bücher, die Sie interessieren, über die Detailseite hinzu, um eine Erinnerung zu erhalten, wenn sie wieder verfügbar sind.", + "Aggiungi la tua API key per interrogare Google Books quando importi un ISBN. Google viene utilizzato prima di Open Library, ma dopo Scraping Pro.": "Fügen Sie Ihren API-Schlüssel hinzu, um Google Books bei ISBN-Importen abzufragen. Google wird vor Open Library, aber nach Scraping Pro verwendet.", + "Aggiungi le mensole (livelli) a ogni scaffale": "Fügen Sie jedem Regal Regalböden (Ebenen) hinzu", + "Aggiungi nuovo libro": "Neues Buch hinzufügen", + "Aggiungi primo libro": "Erstes Buch hinzufügen", + "Aggiungi scaffali e mensole per la tua biblioteca": "Fügen Sie Regale und Regalböden für Ihre Bibliothek hinzu", + "Aggiungi un motivo (opzionale)": "Grund hinzufügen (optional)", + "Aggiungi un nuovo titolo per arricchire il catalogo di questo editore.": "Fügen Sie einen neuen Titel hinzu, um den Katalog dieses Verlags zu erweitern.", + "Aggiunti di recente al catalogo": "Kürzlich zum Katalog hinzugefügt", + "Aggiunto il": "Hinzugefügt am", + "Aiuto": "Hilfe", + "Al": "Bis", + "Al momento non ci sono eventi attivi. Continua a seguirci per restare aggiornato sui prossimi appuntamenti.": "Derzeit gibt es keine aktiven Veranstaltungen. Folgen Sie uns weiterhin, um über kommende Termine informiert zu bleiben.", + "Al momento non ci sono eventi programmati. Torna a visitare questa pagina per scoprire i prossimi appuntamenti.": "Derzeit sind keine Veranstaltungen geplant. Besuchen Sie diese Seite erneut, um kommende Termine zu entdecken.", + "Al:": "Bis:", + "Alcune date richieste non sono disponibili": "Einige angeforderte Termine sind nicht verfügbar", + "Alcuni mancanti": "Einige fehlen", + "Alcuni requisiti non sono soddisfatti. Risolvi i problemi prima di continuare.": "Einige Anforderungen sind nicht erfüllt. Beheben Sie die Probleme, bevor Sie fortfahren.", + "Alert prestito in ritardo (Admin)": "Überfällige Ausleihe – Warnung (Admin)", + "Allegato": "Anhang", + "Almeno uno dei seguenti parametri è richiesto:": "Mindestens einer der folgenden Parameter ist erforderlich:", + "Altri eventi in programma": "Weitere geplante Veranstaltungen", + "Altri filtri": "Weitere Filter", + "Altro": "Sonstiges", + "Amministratore": "Administrator", + "Analitici:": "Analyse:", + "Anni di Vita": "Lebensjahre", + "Anno": "Jahr", + "Anno (YYYY)": "Jahr (JJJJ)", + "Anno a": "Jahr bis", + "Anno da": "Jahr von", + "Anno di Pubblicazione": "Erscheinungsjahr", + "Anno di pubblicazione": "Erscheinungsjahr", + "Anno di Uscita": "Erscheinungsjahr", + "Anno max": "Jahr max.", + "Anno min": "Jahr min.", + "Anno numerico (usato per filtri e ordinamento)": "Numerisches Jahr (wird für Filter und Sortierung verwendet)", + "Anno pubblicazione": "Erscheinungsjahr", + "Anno pubblicazione a": "Erscheinungsjahr bis", + "Anno pubblicazione da": "Erscheinungsjahr von", + "Anno:": "Jahr:", + "Annulla": "Abbrechen", + "Annulla Prestito": "Ausleihe stornieren", + "Annulla Prestito Scaduto": "Überfällige Ausleihe stornieren", + "Annulla prenotazione": "Vormerkung stornieren", + "Annullare il prestito scaduto?": "Die überfällige Ausleihe stornieren?", + "Annullare questa prenotazione?": "Diese Vormerkung stornieren?", + "Annullata": "Storniert", + "Annullato": "Storniert", + "Anteprima": "Vorschau", + "Anteprima Banner": "Banner-Vorschau", + "Anteprima copertina": "Covervorschau", + "Anteprima immagine caricata": "Vorschau des hochgeladenen Bildes", + "Anteprima logo": "Logo-Vorschau", + "Anteprima non disponibile": "Vorschau nicht verfügbar", + "Anteprima:": "Vorschau:", + "Apparirà nei risultati di ricerca Google. Se vuoto, usa il titolo hero o il nome dell'app.": "Erscheint in den Google-Suchergebnissen. Wenn leer, wird der Hero-Titel oder der App-Name verwendet.", + "Apparirà sotto il titolo nei risultati di ricerca. Se vuoto, usa il sottotitolo hero o una descrizione generica.": "Erscheint unter dem Titel in den Suchergebnissen. Wenn leer, wird der Hero-Untertitel oder eine allgemeine Beschreibung verwendet.", + "Applica": "Anwenden", + "Applica Filtri": "Filter anwenden", + "Applica Fix": "Fix anwenden", + "Applicazione Già Installata": "Anwendung bereits installiert", + "Applicazione configurata:": "Anwendung konfiguriert:", + "Applicazione del fix...": "Fix wird angewendet...", + "Applicazione già installata": "Anwendung bereits installiert", + "Approva": "Genehmigen", + "Approva Prestiti": "Ausleihen genehmigen", + "Approva Prestito?": "Ausleihe genehmigen?", + "Approva e Invia Email Attivazione": "Genehmigen und Aktivierungs-E-Mail senden", + "Approva o rifiuta le recensioni degli utenti": "Benutzerrezensionen genehmigen oder ablehnen", + "Approva o rifiuta le richieste degli utenti": "Benutzeranfragen genehmigen oder ablehnen", + "Approva prestito?": "Ausleihe genehmigen?", + "Approva recensione": "Rezension genehmigen", + "Approvata": "Genehmigt", + "Approvata il": "Genehmigt am", + "Approvato": "Genehmigt", + "Approvato il %s": "Genehmigt am %s", + "Approvato!": "Genehmigt!", + "Approverai questa richiesta di prestito?": "Möchten Sie diese Ausleihanfrage genehmigen?", + "Apri": "Öffnen", + "Apri Editor": "Editor öffnen", + "Apri Google Cloud Console": "Google Cloud Console öffnen", + "Apri file": "Datei öffnen", + "Apri menu": "Menü öffnen", + "Archivia": "Archivieren", + "Archiviato": "Archiviert", + "Archivio": "Archiv", + "Arricchimento automatico dati": "Automatische Datenanreicherung", + "Arricchisci dati con scraping web (copertine, descrizioni, etc.)": "Daten mit Web-Scraping anreichern (Cover, Beschreibungen usw.)", + "Article (Articolo/Blog)": "Article (Artikel/Blog)", + "Articolo": "Artikel", + "Artista": "Künstler", + "Artista sconosciuto": "Unbekannter Künstler", + "Artisti": "Künstler", + "Ascolta Audiobook": "Hörbuch anhören", + "Ascolta l'audiobook": "Hörbuch anhören", + "Assicurati che corrisponda al tipo di carta per etichette che utilizzi.": "Stellen Sie sicher, dass es mit dem von Ihnen verwendeten Etikettenpapier übereinstimmt.", + "Assicurati che il path assoluto dello script sia corretto": "Stellen Sie sicher, dass der absolute Pfad zum Skript korrekt ist", + "Assicurati che sia configurato correttamente per evitare URL duplicati.": "Stellen Sie sicher, dass die Konfiguration korrekt ist, um doppelte URLs zu vermeiden.", + "At least one search parameter is required (ean, isbn13, isbn10, or author)": "At least one search parameter is required (ean, isbn13, isbn10, or author)", + "Attendere prego": "Bitte warten", + "Attendere prego...": "Bitte warten...", + "Attenzione": "Achtung", + "Attenzione!": "Achtung!", + "Attenzione:": "Achtung:", + "Attenzione: %d prestiti in ritardo": "Achtung: %d überfällige Ausleihen", + "Attenzione: %d prestito in ritardo": "Achtung: %d überfällige Ausleihe", + "Attenzione: Azione Manuale Richiesta": "Achtung: Manueller Eingriff erforderlich", + "Attenzione: Non è stato possibile rimuovere tutte le copie richieste. Alcune copie sono attualmente in prestito.": "Achtung: Es konnten nicht alle angeforderten Exemplare entfernt werden. Einige Exemplare sind derzeit ausgeliehen.", + "Attiva": "Aktiv", + "Attiva Direttamente": "Direkt aktivieren", + "Attiva HTTP Strict Transport Security (max-age: 1 anno, include sottodomini)": "HTTP Strict Transport Security aktivieren (max-age: 1 Jahr, einschließlich Subdomains)", + "Attiva HTTPS solo se hai un certificato SSL valido installato. Attivare HSTS rende permanente il reindirizzamento HTTPS nel browser.": "Aktivieren Sie HTTPS nur, wenn ein gültiges SSL-Zertifikat installiert ist. Die Aktivierung von HSTS macht die HTTPS-Weiterleitung im Browser dauerhaft.", + "Attiva questa opzione solo se il tuo server supporta HTTPS. Se il tuo hosting forza già HTTPS automaticamente, non è necessario abilitarla (potrebbe causare redirect loop).": "Aktivieren Sie diese Option nur, wenn Ihr Server HTTPS unterstützt. Falls Ihr Hosting bereits automatisch HTTPS erzwingt, müssen Sie sie nicht aktivieren (könnte eine Weiterleitungsschleife verursachen).", + "Attivando questa modalità verranno disabilitati completamente i prestiti, le prenotazioni e la wishlist. Gli utenti potranno solo consultare il catalogo.": "Durch Aktivierung dieses Modus werden Ausleihen, Vormerkungen und Wunschliste vollständig deaktiviert. Benutzer können nur den Katalog einsehen.", + "Attivare questo tema?": "Dieses Theme aktivieren?", + "Attivato:": "Aktiviert:", + "Attivi": "Aktiv", + "Attività": "Aktivität", + "Attivo": "Aktiv", + "Attivo:": "Aktiv:", + "Attuale": "Aktuell", + "Attualmente prestati": "Derzeit ausgeliehen", + "Audio": "Audio", + "Audio URL": "Audio-URL", + "Audiobook": "Hörbuch", + "Audiobook (MP3/M4A/OGG)": "Hörbuch (MP3/M4A/OGG)", + "Audiobook caricato!": "Hörbuch hochgeladen!", + "Audiobook disponibile": "Hörbuch verfügbar", + "Aumenta Copie": "Exemplare erhöhen", + "Autenticazione": "Authentifizierung", + "Autenticazione Admin Richiesta": "Admin-Authentifizierung erforderlich", + "Autenticazione Richiesta": "Authentifizierung erforderlich", + "Autenticazione richiesta.": "Authentifizierung erforderlich.", + "Auto": "Auto", + "Auto-attivazione:": "Auto-Aktivierung:", + "Auto-attivazione: Se compili questo campo, il toggle \"Mostra Cookie Analitici\" in Privacy verrà attivato automaticamente.": "Automatische Aktivierung: Wenn Sie dieses Feld ausfüllen, wird der Schalter \"Analyse-Cookies anzeigen\" unter Datenschutz automatisch aktiviert.", + "Auto-attivazione: Se compili questo campo, il toggle \"Mostra Cookie Marketing\" in Privacy verrà attivato automaticamente.": "Automatische Aktivierung: Wenn Sie dieses Feld ausfüllen, wird der Schalter \"Marketing-Cookies anzeigen\" unter Datenschutz automatisch aktiviert.", + "Auto-detect se vuoto": "Automatische Erkennung wenn leer", + "Automatismi": "Automatisierungen", + "Autore": "Autor", + "Autore \"${normalizedLabel}\" pronto per essere creato": "Autor \"${normalizedLabel}\" bereit zur Erstellung", + "Autore \"${normalizedLabel}\" è già selezionato": "Autor \"${normalizedLabel}\" ist bereits ausgewählt", + "Autore \"%s\" pronto per essere creato": "Autor \"%s\" bereit zur Erstellung", + "Autore \"%s\" è già selezionato": "Autor \"%s\" ist bereits ausgewählt", + "Autore A-Z": "Autor A–Z", + "Autore Z-A": "Autor Z–A", + "Autore eliminato con successo.": "Autor erfolgreich gelöscht.", + "Autore non specificato": "Autor nicht angegeben", + "Autore principale": "Hauptautor", + "Autore sconosciuto": "Unbekannter Autor", + "Autore/i:": "Autor(en):", + "Autore:": "Autor:", + "Autori": "Autoren", + "Autori con biografie": "Autoren mit Biografien", + "Autori ed editori vengono creati automaticamente": "Autoren und Verlage werden automatisch erstellt", + "Autori multipli separati da %s": "Mehrere Autoren getrennt durch %s", + "Autori multipli separati da %s o %s": "Mehrere Autoren getrennt durch %s oder %s", + "Autori pubblicati": "Veröffentlichte Autoren", + "Autori uniti": "Autoren zusammengeführt", + "Autori uniti con successo": "Autoren erfolgreich zusammengeführt", + "Autori:": "Autoren:", + "Avanti": "Weiter", + "Avanzate": "Erweitert", + "Avvio aggiornamento": "Aktualisierung wird gestartet", + "Avvio backup database": "Datenbank-Backup wird gestartet", + "Avvisa gli amministratori quando un prestito entra in ritardo.": "Warnt Administratoren, wenn eine Ausleihe überfällig wird.", + "Avvisi scadenza prestiti (configurabile in Impostazioni → Avanzate, default 3 giorni prima)": "Erinnerungen zum Ablauf der Ausleihe (konfigurierbar unter Einstellungen → Erweitert, Standard 3 Tage vorher)", + "Avviso": "Warnung", + "Azione richiesta:": "Erforderliche Aktion:", + "Azioni": "Aktionen", + "Azioni Rapide": "Schnellaktionen", + "Azioni Veloci": "Schnellaktionen", + "Azioni di Approvazione": "Genehmigungsaktionen", + "Azioni di Manutenzione": "Wartungsaktionen", + "Azzera": "Zurücksetzen", + "Backup": "Backup", + "Backup Automatico": "Automatisches Backup", + "Backup Salvati": "Gespeicherte Backups", + "Backup completato": "Backup abgeschlossen", + "Backup creato con successo": "Backup erfolgreich erstellt", + "Backup creato!": "Sicherung erstellt!", + "Backup database completato": "Datenbank-Backup abgeschlossen", + "Backup disponibili": "Verfügbare Backups", + "Backup e Sicurezza": "Backup und Sicherheit", + "Backup eliminato": "Backup gelöscht", + "Backup eliminato con successo": "Sicherung erfolgreich gelöscht", + "Backup fallito": "Backup fehlgeschlagen", + "Backup non trovato": "Backup nicht gefunden", + "Backup non trovato.": "Sicherung nicht gefunden.", + "Backup ripristinato con successo.": "Sicherung erfolgreich wiederhergestellt.", + "Backup tabella": "Tabelle wird gesichert", + "Barcode": "Barcode", + "Barra laterale": "Seitenleiste", + "Benvenuto": "Willkommen", + "Benvenuto nell'Installer": "Willkommen beim Installer", + "Benvenuto, %s!": "Willkommen, %s!", + "Biblioteca": "Bibliothek", + "Biblioteca Digitale": "Digitale Bibliothek", + "Biblioteca Digitale - La tua biblioteca online": "Digitale Bibliothek – Ihre Online-Bibliothek", + "Biblioteca Digitale - Scopri e Prenota i Tuoi Libri Preferiti": "Digitale Bibliothek – Entdecken und reservieren Sie Ihre Lieblingsbücher", + "Biblioteca digitale con catalogo completo di libri disponibili per il prestito": "Digitale Bibliothek mit vollständigem Katalog ausleihbarer Bücher", + "Biografia": "Biografie", + "Biografia dell'autore": "Autorenbiografie", + "Bluesky": "Bluesky", + "Books": "Books", + "Bottone": "Schaltfläche", + "Bottone CTA": "CTA-Schaltfläche", + "Bottone Primario": "Primäre Schaltfläche", + "Breadcrumb": "Breadcrumb", + "Breve descrizione per i motori di ricerca": "Kurzbeschreibung für Suchmaschinen", + "Breve descrizione per i motori di ricerca (max 160 caratteri)": "Kurzbeschreibung für Suchmaschinen (max. 160 Zeichen)", + "Buono": "Gut", + "CAP": "PLZ", + "CMS": "CMS", + "CSRF": "CSRF", + "CSRF Fallito": "CSRF fehlgeschlagen", + "CSRF non valido.": "Ungültiges CSRF-Token.", + "CSS Personalizzato": "Benutzerdefiniertes CSS", + "CSV": "CSV", + "Calendario Disponibilità": "Verfügbarkeitskalender", + "Calendario Prestiti e Prenotazioni": "Kalender für Ausleihen und Vormerkungen", + "Calendario eventi": "Veranstaltungskalender", + "Calendario non disponibile": "Kalender nicht verfügbar", + "Call to Action": "Call to Action", + "Call to Action (CTA)": "Call to Action (CTA)", + "Cambia lingua": "Sprache ändern", + "Cambia password": "Passwort ändern", + "Cambia vista": "Ansicht wechseln", + "Campi Database": "Datenbankfelder", + "Campi Supportati": "Unterstützte Felder", + "Campo": "Feld", + "Campo %s obbligatorio": "Feld %s ist erforderlich", + "Campo Obbligatorio": "Pflichtfeld", + "Campo obbligatorio": "Pflichtfeld", + "Campo obbligatorio mancante: %s": "Fehlendes Pflichtfeld: %s", + "Cancel": "Abbrechen", + "Cancella": "Löschen", + "Cancella filtri": "Filter löschen", + "Cancella tutti i filtri": "Alle Filter löschen", + "Caratteristica": "Eigenschaft", + "Carica": "Hochladen", + "Carica %{smart_count} file": "%{smart_count} Datei hochladen", + "Carica Altri": "Mehr laden", + "Carica File CSV": "CSV-Datei hochladen", + "Carica File JSON": "JSON-Datei hochladen", + "Carica File LibraryThing": "LibraryThing-Datei hochladen", + "Carica Nuovo File JSON": "Neue JSON-Datei hochladen", + "Carica Plugin": "Plugin hochladen", + "Carica il file JSON di traduzione (opzionale)": "Übersetzungs-JSON-Datei hochladen (optional)", + "Carica il file usando l'uploader": "Laden Sie die Datei mit dem Uploader hoch", + "Carica logo (PNG, JPG, SVG)": "Logo hochladen (PNG, JPG, SVG)", + "Carica o collega eBook (PDF/ePub) e audiobook (MP3/M4A) per renderli disponibili agli utenti.": "Laden Sie E-Books (PDF/ePub) und Hörbücher (MP3/M4A) hoch oder verknüpfen Sie diese, um sie den Benutzern zur Verfügung zu stellen.", + "Carica un file CSV per importare più libri contemporaneamente": "Laden Sie eine CSV-Datei hoch, um mehrere Bücher gleichzeitig zu importieren", + "Carica un file ZIP contenente il plugin. Il file deve includere un %s con le informazioni del plugin.": "Laden Sie eine ZIP-Datei mit dem Plugin hoch. Die Datei muss eine %s mit den Plugin-Informationen enthalten.", + "Carica un nuovo file per aggiornare le traduzioni (opzionale). Verrà creato un backup del file precedente.": "Laden Sie eine neue Datei hoch, um die Übersetzungen zu aktualisieren (optional). Ein Backup der vorherigen Datei wird erstellt.", + "Caricamento .env...": ".env wird geladen...", + "Caricamento automatico:": "Automatisches Laden:", + "Caricamento backup...": "Backups werden geladen...", + "Caricamento categorie...": "Kategorien werden geladen...", + "Caricamento completato": "Upload abgeschlossen", + "Caricamento condizionale:": "Bedingtes Laden:", + "Caricamento del logo non riuscito. Verifica le dimensioni e il formato del file.": "Logo-Upload fehlgeschlagen. Überprüfen Sie Dateigröße und Format.", + "Caricamento fallito": "Upload fehlgeschlagen", + "Caricamento file...": "Datei wird hochgeladen...", + "Caricamento in corso...": "Wird hochgeladen...", + "Caricamento libri...": "Bücher werden geladen...", + "Caricamento non riuscito. Riprova.": "Upload fehlgeschlagen. Bitte versuchen Sie es erneut.", + "Caricamento sessioni...": "Sitzungen werden geladen...", + "Caricamento...": "Wird geladen...", + "Caroselli Generi": "Genre-Karussells", + "Casa Editrice": "Verlag", + "Case editrici": "Verlage", + "Catalogo": "Katalog", + "Catalogo Completo Libri - Biblioteca Digitale": "Vollständiger Buchkatalog – Digitale Bibliothek", + "Catalogo Libri": "Buchkatalog", + "Catalogo Libri - Biblioteca": "Buchkatalog – Bibliothek", + "Catalogo libri": "Buchkatalog", + "Català (CA)": "Katalanisch (CA)", + "Categoria": "Kategorie", + "Categorie": "Kategorien", + "Categorie Cookie": "Cookie-Kategorien", + "Centro Impostazioni": "Einstellungscenter", + "Cerca": "Suchen", + "Cerca IP...": "IP suchen...", + "Cerca Libri": "Bücher suchen", + "Cerca Libro": "Buch suchen", + "Cerca Utente": "Benutzer suchen", + "Cerca autore...": "Autor suchen...", + "Cerca autori esistenti o aggiungine di nuovi...": "Vorhandene Autoren suchen oder neue hinzufügen...", + "Cerca codice o nome...": "Code oder Name suchen...", + "Cerca editore esistente o inserisci nuovo...": "Vorhandenen Verlag suchen oder neuen eingeben...", + "Cerca editore...": "Verlag suchen...", + "Cerca email...": "E-Mail suchen...", + "Cerca genere...": "Genre suchen...", + "Cerca icona... (es. user, home, book)": "Symbol suchen... (z. B. user, home, book)", + "Cerca libri, autori, ISBN...": "Bücher, Autoren, ISBN suchen...", + "Cerca libri, autori, editori, utenti...": "Bücher, Autoren, Verlage, Benutzer suchen...", + "Cerca libri, autori, editori...": "Bücher, Autoren, Verlage suchen...", + "Cerca libri, autori...": "Bücher, Autoren suchen...", + "Cerca libri...": "Bücher suchen...", + "Cerca nella biblioteca": "In der Bibliothek suchen", + "Cerca per ISBN-10": "Nach ISBN-10 suchen", + "Cerca per ISBN-13": "Nach ISBN-13 suchen", + "Cerca per codice EAN": "Nach EAN-Code suchen", + "Cerca per nome autore (corrispondenza parziale)": "Nach Autorenname suchen (Teilübereinstimmung)", + "Cerca per nome, cognome, telefono, email o tessera": "Nach Name, Nachname, Telefon, E-Mail oder Ausweis suchen", + "Cerca per nome...": "Nach Name suchen...", + "Cerca per pseudonimo...": "Nach Pseudonym suchen...", + "Cerca per titolo o sottotitolo": "Nach Titel oder Untertitel suchen", + "Cerca per titolo o stato (es. disponibile)": "Nach Titel oder Status suchen (z. B. verfügbar)", + "Cerca per titolo, ISBN o EAN": "Nach Titel, ISBN oder EAN suchen", + "Cerca posizione...": "Standort suchen...", + "Cerca pseudonimo...": "Pseudonym suchen...", + "Cerca rapido...": "Schnellsuche...", + "Cerca testo": "Text suchen", + "Cerca titoli": "Titel suchen", + "Cerca titoli, autori, ISBN...": "Titel, Autoren, ISBN suchen...", + "Cerca...": "Suchen...", + "Cerca:": "Suchen:", + "Certificato SSL/TLS valido": "Gültiges SSL/TLS-Zertifikat", + "Chi Siamo": "Über uns", + "Chiave": "Schlüssel", + "Chiave API Google Books": "Google Books API-Schlüssel", + "Chiave Google Books aggiornata.": "Google Books-Schlüssel aktualisiert.", + "Chiave Google Books rimossa.": "Google Books-Schlüssel entfernt.", + "Chiave Google Books salvata correttamente.": "Google Books-Schlüssel erfolgreich gespeichert.", + "Chiave Route": "Routen-Schlüssel", + "Chiedi al tuo amministratore di database di eseguire i comandi contenuti nel file": "Bitten Sie Ihren Datenbankadministrator, die in der Datei enthaltenen Befehle auszuführen", + "Chiudi": "Schließen", + "Chiudi Player": "Player schließen", + "Chiudi alternative": "Alternativen schließen", + "Chiudi menu": "Menü schließen", + "Citazione": "Zitat", + "Città": "Stadt", + "Classe (000-900)": "Klasse (000–900)", + "Classe principale mancante: %s.": "Fehlende Hauptklasse: %s.", + "Classi principali": "Hauptklassen", + "Classificazione Dewey": "Dewey-Klassifikation", + "Classificazione selezionata:": "Ausgewählte Klassifikation:", + "Clicca o trascina per caricare un logo": "Klicken oder ziehen Sie, um ein Logo hochzuladen", + "Clicca per selezionare": "Zum Auswählen klicken", + "Clicca su \"Esegui Manutenzione\" per correggere automaticamente i problemi riparabili.": "Klicken Sie auf \"Wartung ausführen\", um behebbare Probleme automatisch zu korrigieren.", + "Clicca su 'Aggiungi Lingua'": "Klicken Sie auf 'Sprache hinzufügen'", + "Clicca su \\": "Klicken Sie auf \\", + "Clicca su \\\"Esegui Manutenzione\\\" per correggere automaticamente i problemi riparabili.": "Klicken Sie auf \\\"Wartung ausführen\\\", um behebbare Probleme automatisch zu korrigieren.", + "Clicca su un'icona per selezionarla": "Klicken Sie auf ein Symbol, um es auszuwählen", + "Close menu": "Menü schließen", + "Coda": "Warteschlange", + "Codice": "Code", + "Codice *": "Code *", + "Codice CSS": "CSS-Code", + "Codice CSS da applicare a tutte le pagine del frontend": "CSS-Code, der auf alle Frontend-Seiten angewendet wird", + "Codice Dewey": "Dewey-Code", + "Codice Dewey non trovato": "Dewey-Code nicht gefunden", + "Codice Dewey selezionato:": "Ausgewählter Dewey-Code:", + "Codice Dewey trovato e impostato": "Dewey-Code gefunden und gesetzt", + "Codice Fiscale": "Steuernummer", + "Codice ISBN o EAN": "ISBN- oder EAN-Code", + "Codice ISO 2 lettere (es: IT, FR, GB)": "ISO-2-Buchstaben-Code (z. B. IT, FR, GB)", + "Codice JavaScript": "JavaScript-Code", + "Codice JavaScript Analytics": "Analytics-JavaScript-Code", + "Codice Lingua": "Sprachcode", + "Codice Tessera": "Ausweisnummer", + "Codice Tessera:": "Ausweisnummer:", + "Codice embed completo": "Vollständiger Einbettungscode", + "Codice fiscale": "Steuernummer", + "Codice fiscale dell'editore (opzionale)": "Steuernummer des Verlags (optional)", + "Codice fiscale italiano (opzionale)": "Italienische Steuernummer (optional)", + "Codice parent non trovato.": "Übergeordneter Code nicht gefunden.", + "Codice postale...": "Postleitzahl...", + "Codice scaffale obbligatorio": "Regalcode erforderlich", + "Codice tessera": "Ausweisnummer", + "Cognome": "Nachname", + "Collana": "Reihe", + "Collocazione": "Standort", + "Collocazione calcolata": "Berechneter Standort", + "Collocazione suggerita": "Vorgeschlagener Standort", + "Collocazione:": "Standort:", + "Colonne": "Spalten", + "Colore Bottoni CTA": "CTA-Schaltflächenfarbe", + "Colore Primario": "Primärfarbe", + "Colore Secondario": "Sekundärfarbe", + "Colore Testo Bottoni": "Schaltflächen-Textfarbe", + "Colore non valido": "Ungültige Farbe", + "Colori Tema": "Theme-Farben", + "Colori ripristinati ai valori predefiniti": "Farben auf Standardwerte zurückgesetzt", + "Come Esportare da LibraryThing": "So exportieren Sie aus LibraryThing", + "Come Funziona": "So funktioniert es", + "Come ottenere il codice": "So erhalten Sie den Code", + "Commento": "Kommentar", + "Communication error with the server": "Kommunikationsfehler mit dem Server", + "Compila con i dati dei tuoi libri": "Füllen Sie die Daten Ihrer Bücher aus", + "Compila i dettagli del libro per aggiungerlo alla biblioteca": "Füllen Sie die Buchdetails aus, um es zur Bibliothek hinzuzufügen", + "Compila i dettagli dell'autore per aggiungerlo alla biblioteca": "Füllen Sie die Autorendetails aus, um ihn zur Bibliothek hinzuzufügen", + "Compila i dettagli della casa editrice per aggiungerla alla biblioteca": "Füllen Sie die Verlagsdetails aus, um ihn zur Bibliothek hinzuzufügen", + "Compila nome e URL per tutti i server.": "Füllen Sie Name und URL für alle Server aus.", + "Compila tutti i campi obbligatori prima di salvare.": "Füllen Sie alle Pflichtfelder aus, bevor Sie speichern.", + "Compila tutti i campi obbligatori.": "Füllen Sie alle Pflichtfelder aus.", + "Compila tutti i campi per creare una nuova prenotazione": "Füllen Sie alle Felder aus, um eine neue Vormerkung zu erstellen", + "Compila tutti i campi richiesti": "Füllen Sie alle erforderlichen Felder aus", + "Completamento": "Fertigstellung", + "Completata": "Abgeschlossen", + "Completati": "Abgeschlossen", + "Completato": "Abgeschlossen", + "Completato!": "Abgeschlossen!", + "Complete": "Vollständig", + "Completo": "Vollständig", + "Complimenti!": "Herzlichen Glückwunsch!", + "Componente": "Komponente", + "Con valore 3, un prestito che scade il 15 Gennaio riceverà l'avviso il 12 Gennaio": "Bei Wert 3 erhält eine Ausleihe, die am 15. Januar abläuft, die Benachrichtigung am 12. Januar", + "Condividi": "Teilen", + "Condividi la tua opinione su questo libro...": "Teilen Sie Ihre Meinung zu diesem Buch...", + "Condividi su Facebook": "Auf Facebook teilen", + "Condividi su Twitter": "Auf Twitter teilen", + "Condividi su WhatsApp": "Auf WhatsApp teilen", + "Condiviso": "Geteilt", + "Condizioni": "Bedingungen", + "Conferma": "Bestätigen", + "Conferma Aggiornamento": "Aktualisierung bestätigen", + "Conferma Annullamento": "Stornierung bestätigen", + "Conferma Disinstallazione": "Deinstallation bestätigen", + "Conferma Password": "Passwort bestätigen", + "Conferma Ritiro": "Abholung bestätigen", + "Conferma Salvataggio": "Speichern bestätigen", + "Conferma aggiornamento": "Aktualisierung bestätigen", + "Conferma eliminazione": "Löschung bestätigen", + "Conferma la tua email": "Bestätigen Sie Ihre E-Mail", + "Conferma modifica": "Änderung bestätigen", + "Conferma password": "Passwort bestätigen", + "Conferma restituzione": "Rückgabe bestätigen", + "Confermare il ritiro?": "Abholung bestätigen?", + "Confermi di voler attivare direttamente questo utente senza richiedere verifica email?": "Möchten Sie diesen Benutzer wirklich direkt aktivieren, ohne eine E-Mail-Verifizierung zu verlangen?", + "Confermi di voler attivare direttamente questo utente?": "Sind Sie sicher, dass Sie diesen Benutzer direkt aktivieren möchten?", + "Confermi l'eliminazione dell'editore?": "Verlag wirklich löschen?", + "Confermi l'operazione?": "Vorgang bestätigen?", + "Confermi?": "Bestätigen?", + "Confermo di voler disinstallare il plugin e di aver effettuato un backup dei dati": "Ich bestätige, dass ich das Plugin deinstallieren möchte und eine Datensicherung durchgeführt habe", + "Configura API": "API konfigurieren", + "Configura Google Books": "Google Books konfigurieren", + "Configura Z39.50": "Z39.50 konfigurieren", + "Configura i testi mostrati all'interno del pannello delle preferenze dei cookie.": "Konfigurieren Sie die Texte, die im Cookie-Einstellungen-Panel angezeigt werden.", + "Configura i testi visualizzati agli utenti in ogni parte del cookie banner.": "Konfigurieren Sie die Texte, die den Benutzern in jedem Teil des Cookie-Banners angezeigt werden.", + "Configura i testi visualizzati agli utenti nel banner iniziale.": "Konfigurieren Sie die Texte, die den Benutzern im anfänglichen Banner angezeigt werden.", + "Configura l'identità dell'applicazione, i metodi di invio email e personalizza i template delle notifiche automatiche.": "Konfigurieren Sie die Anwendungsidentität, E-Mail-Versandmethoden und passen Sie die Vorlagen für automatische Benachrichtigungen an.", + "Configura le date della prenotazione": "Vormerkungsdaten konfigurieren", + "Configura le impostazioni di sicurezza per le connessioni HTTPS": "Sicherheitseinstellungen für HTTPS-Verbindungen konfigurieren", + "Configura le impostazioni email per l'invio di notifiche agli utenti.": "Konfigurieren Sie die E-Mail-Einstellungen für den Versand von Benachrichtigungen an Benutzer.", + "Configura le impostazioni rimanenti (privacy, contatti, etc.)": "Konfigurieren Sie die verbleibenden Einstellungen (Datenschutz, Kontakte usw.)", + "Configura quando inviare l'avviso di scadenza prestiti agli utenti": "Konfigurieren Sie, wann die Fälligkeitserinnerung für Ausleihen an die Benutzer gesendet werden soll", + "Configurazione": "Konfiguration", + "Configurazione Cron Job": "Cron-Job-Konfiguration", + "Configurazione Database": "Datenbank-Konfiguration", + "Configurazione Email": "E-Mail-Konfiguration", + "Configurazione Etichette Libri": "Buchetiketten-Konfiguration", + "Configurazione SMTP": "SMTP-Konfiguration", + "Configurazione aggiornata con successo!": "Konfiguration erfolgreich aktualisiert!", + "Configurazione del banner cookie": "Cookie-Banner-Konfiguration", + "Configurazione guidata in pochi passaggi.": "Geführte Konfiguration in wenigen Schritten.", + "Configurazione invio": "Versandkonfiguration", + "Configurazione sistema": "Systemkonfiguration", + "Confirm?": "Bestätigen?", + "Connessione al database fallita": "Datenbankverbindung fehlgeschlagen", + "Connessione database non disponibile": "Datenbankverbindung nicht verfügbar", + "Connessione fallita": "Verbindung fehlgeschlagen", + "Connesso": "Verbunden", + "Consegna immediata": "Sofortige Übergabe", + "Conserva queste informazioni in un luogo sicuro!": "Bewahren Sie diese Informationen an einem sicheren Ort auf!", + "Consigliato": "Empfohlen", + "Consigliato JPG o PNG ad alta risoluzione (min 1920x1080px). Max 5MB.": "Empfohlen: hochauflösendes JPG oder PNG (min. 1920x1080px). Max. 5MB.", + "Consigliato JPG, PNG o WebP (min 800x600px). Max 5MB.": "Empfohlen: JPG, PNG oder WebP (min. 800x600px). Max. 5MB.", + "Consigliato PNG o SVG con sfondo trasparente. Dimensione massima 2MB.": "Empfohlen: PNG oder SVG mit transparentem Hintergrund. Maximale Größe 2MB.", + "Consigliato: 150-160 caratteri": "Empfohlen: 150-160 Zeichen", + "Consigliato: 50-60 caratteri": "Empfohlen: 50-60 Zeichen", + "Consigliato: PHP mail() per semplicità, SMTP per maggiore controllo": "Empfohlen: PHP mail() für Einfachheit, SMTP für mehr Kontrolle", + "Consigliato: Summary Large Image per homepage.": "Empfohlen: Summary Large Image für die Startseite.", + "Contatta il tuo provider di hosting e chiedi di eseguire": "Kontaktieren Sie Ihren Hosting-Anbieter und bitten Sie ihn, Folgendes auszuführen", + "Contattaci": "Kontaktieren Sie uns", + "Contatti": "Kontakt", + "Contatti e accesso": "Kontakt und Zugang", + "Contenuti Digitali": "Digitale Inhalte", + "Contenuti homepage aggiornati con successo!": "Homepage-Inhalte erfolgreich aktualisiert!", + "Contenuto": "Inhalt", + "Contenuto Cookie Policy": "Cookie-Richtlinie Inhalt", + "Contenuto Pagina": "Seiteninhalt", + "Contenuto Privacy Policy": "Datenschutzrichtlinie Inhalt", + "Contenuto Testuale": "Textinhalt", + "Contenuto della pagina": "Seiteninhalt", + "Contenuto della pagina /cookies accessibile dal banner": "Inhalt der Seite /cookies, erreichbar über das Banner", + "Contenuto pagina": "Seiteninhalt", + "Contenuto testuale HTML con editor avanzato": "HTML-Textinhalt mit erweitertem Editor", + "Continua": "Weiter", + "Contrasto": "Kontrast", + "Contrasto insufficiente tra bottone e testo (minimo 3:1). Attuale": "Unzureichender Kontrast zwischen Schaltfläche und Text (Minimum 3:1). Aktuell", + "Controlla Aggiornamenti": "Auf Updates prüfen", + "Controlla la tua casella di posta e clicca sul link per resettare la password. Il link sarà valido per 2 ore.": "Überprüfen Sie Ihren Posteingang und klicken Sie auf den Link, um Ihr Passwort zurückzusetzen. Der Link ist 2 Stunden gültig.", + "Controllo aggiornamenti": "Suche nach Updates", + "Controllo pre-aggiornamento fallito": "Vorab-Aktualisierungsprüfung fehlgeschlagen", + "Cookie Analitici": "Analyse-Cookies", + "Cookie Banner": "Cookie-Banner", + "Cookie Essenziali": "Essentielle Cookies", + "Cookie di Marketing": "Marketing-Cookies", + "Cookies": "Cookies", + "Copertina": "Cover", + "Copertina Attuale": "Aktuelles Cover", + "Copertina applicata": "Cover übernommen", + "Copertina attuale": "Aktuelles Cover", + "Copertina del Libro": "Buchcover", + "Copertina del libro": "Buchcover", + "Copertina del libro \"%s\"": "Buchcover von \"%s\"", + "Copertina non trovata online:": "Cover online nicht gefunden:", + "Copertina recuperata automaticamente": "Cover automatisch abgerufen", + "Copertina:": "Cover:", + "Copertine già presenti: %s": "Bereits vorhandene Cover: %s", + "Copertine scaricate (LibraryThing):": "Heruntergeladene Cover (LibraryThing):", + "Copertine scaricate:": "Cover abgerufen:", + "Copertine sincronizzate: %s": "Synchronisierte Cover: %s", + "Copia": "Kopieren", + "Copia %d di %d": "Exemplar %d von %d", + "Copia Link": "Link kopieren", + "Copia eliminata con successo.": "Exemplar erfolgreich gelöscht.", + "Copia link negli appunti": "Link in die Zwischenablage kopieren", + "Copia non trovata.": "Exemplar nicht gefunden.", + "Copiato!": "Kopiert!", + "Copie": "Exemplare", + "Copie Aggiunte!": "Exemplare hinzugefügt!", + "Copie Disponibili": "Verfügbare Exemplare", + "Copie Eccessive": "Überschüssige Exemplare", + "Copie Fisiche": "Physische Exemplare", + "Copie Negative": "Negative Exemplare", + "Copie Totali": "Exemplare gesamt", + "Copie disponibili": "Verfügbare Exemplare", + "Copie disponibili:": "Verfügbare Exemplare:", + "Copie totali": "Exemplare gesamt", + "Copie totali:": "Exemplare gesamt:", + "Copyright": "Copyright", + "Corpo Email": "E-Mail-Text", + "Corpo email": "E-Mail-Text", + "Correggi Permessi Automaticamente": "Berechtigungen automatisch korrigieren", + "Correggi Problemi": "Probleme beheben", + "Correggi nel file .env: APP_CANONICAL_URL=%s": "In der .env-Datei korrigieren: APP_CANONICAL_URL=%s", + "Corrente": "Aktuell", + "Correzione Automatica Permessi": "Automatische Berechtigungskorrektur", + "Correzione Manuale via SSH (se automatica fallisce)": "Manuelle Korrektur per SSH (falls automatisch fehlschlägt)", + "Correzione parziale:": "Teilweise Korrektur:", + "Correzioni applicate: %d record aggiornati": "Korrekturen angewendet: %d Datensätze aktualisiert", + "Cos'è la Collocazione?": "Was ist die Standortbezeichnung?", + "Cosa fare:": "Was zu tun ist:", + "Cosa ne pensi di questo libro?": "Was denken Sie über dieses Buch?", + "Cosa sono le Route?": "Was sind Routen?", + "Cosa viene nascosto:": "Was ausgeblendet wird:", + "Cover": "Cover", + "Crea": "Erstellen", + "Crea API Key": "API-Key erstellen", + "Crea Admin": "Admin erstellen", + "Crea Backup": "Sicherung erstellen", + "Crea Backup Manuale": "Manuelles Backup erstellen", + "Crea Evento": "Veranstaltung erstellen", + "Crea Indici Automaticamente": "Indizes automatisch erstellen", + "Crea Nuova API Key": "Neuen API-Key erstellen", + "Crea Nuova Prenotazione": "Neue Vormerkung erstellen", + "Crea Nuovo Evento": "Neue Veranstaltung erstellen", + "Crea Nuovo Genere": "Neues Genre erstellen", + "Crea Nuovo Prestito": "Neue Ausleihe erstellen", + "Crea Prenotazione": "Vormerkung erstellen", + "Crea Prestito": "Ausleihe erstellen", + "Crea Prima API Key": "Ersten API-Key erstellen", + "Crea Primo Genere": "Erstes Genre erstellen", + "Crea Tabelle Mancanti": "Fehlende Tabellen erstellen", + "Crea Utente Admin": "Admin-Benutzer erstellen", + "Crea Utente Amministratore": "Administratorbenutzer erstellen", + "Crea e gestisci gli eventi della biblioteca": "Erstellen und verwalten Sie Bibliotheksveranstaltungen", + "Crea gli scaffali (es: A, B, C)": "Erstellen Sie Regale (z.B.: A, B, C)", + "Crea il primo utente amministratore. Questo account avrà accesso completo a tutte le funzionalità del sistema.": "Erstellen Sie den ersten Administratorbenutzer. Dieses Konto hat vollen Zugriff auf alle Systemfunktionen.", + "Crea il tuo primo evento": "Erstellen Sie Ihre erste Veranstaltung", + "Crea la cartella logs se non esiste: mkdir -p logs": "Erstellen Sie den Ordner logs, falls er nicht existiert: mkdir -p logs", + "Crea nuovo": "Neu erstellen", + "Crea nuovo \"${item.label}\"": "Neu erstellen \"${item.label}\"", + "Crea un backup manuale o attendi il prossimo aggiornamento.": "Erstellen Sie ein manuelles Backup oder warten Sie auf die nächste Aktualisierung.", + "Crea un nuovo account": "Neues Konto erstellen", + "Crea un nuovo profilo amministratore o lettore.": "Erstellen Sie ein neues Administrator- oder Leserprofil.", + "Creare backup?": "Backup erstellen?", + "Creata": "Erstellt", + "Creata il": "Erstellt am", + "Creata:": "Erstellt:", + "Creato il": "Erstellt am", + "Creazione backup database": "Datenbank-Backup wird erstellt", + "Creazione backup...": "Backup wird erstellt...", + "Creazione indici di ottimizzazione...": "Optimierungsindizes werden erstellt...", + "Creazione indici...": "Indizes werden erstellt...", + "Creazione tabelle...": "Tabellen werden erstellt...", + "Credenziali": "Zugangsdaten", + "Credenziali Admin:": "Admin-Zugangsdaten:", + "Credenziali Errate": "Ungültige Zugangsdaten", + "Credenziali non valide o utente non admin": "Ungültige Zugangsdaten oder Benutzer ist kein Administrator", + "Crediti": "Danksagungen", + "Crescente": "Aufsteigend", + "Crittografia": "Verschlüsselung", + "Cronologia": "Verlauf", + "Cronologia Aggiornamenti": "Update-Verlauf", + "Cronologia Import": "Importverlauf", + "Cronologia degli aggiornamenti eseguiti": "Verlauf der durchgeführten Aktualisierungen", + "Da": "Von", + "Da %s (%s)": "Von %s (%s)", + "Da Inventariare": "Zu inventarisieren", + "Da Ritirare": "Zur Abholung bereit", + "Da approvare": "Zu genehmigen", + "Da approvare o rifiutare": "Zu genehmigen oder abzulehnen", + "Da consegnare": "Auszuliefern", + "Da creare": "Zu erstellen", + "Da prenotazione": "Aus Vormerkung", + "Da prenotazioni": "Aus Vormerkungen", + "Da qui puoi gestire tutte le lingue disponibili nell'applicazione. Carica file JSON di traduzione e abilita/disabilita lingue.": "Von hier aus können Sie alle verfügbaren Sprachen in der Anwendung verwalten. Laden Sie JSON-Übersetzungsdateien hoch und aktivieren/deaktivieren Sie Sprachen.", + "Da ritirare": "Zur Abholung bereit", + "Dal": "Vom", + "Dal %s al %s": "Vom %s bis %s", + "Dal:": "Vom:", + "Danneggiato": "Beschädigt", + "Dansk (DA)": "Dänisch (DA)", + "Dashboard": "Dashboard", + "Data": "Datum", + "Data Acq.": "Erw.-Datum", + "Data Acquisizione": "Erwerbungsdatum", + "Data Evento": "Veranstaltungsdatum", + "Data Fine": "Enddatum", + "Data Inizio": "Startdatum", + "Data Prenotazione": "Vormerkungsdatum", + "Data Prestito": "Ausleihdatum", + "Data Prestito:": "Ausleihdatum:", + "Data Pubblicazione": "Erscheinungsdatum", + "Data Restituzione": "Rückgabedatum", + "Data Restituzione:": "Rückgabedatum:", + "Data Scadenza": "Fälligkeitsdatum", + "Data Scadenza:": "Fälligkeitsdatum:", + "Data acquisizione": "Erwerbungsdatum", + "Data acquisizione a": "Erwerbungsdatum bis", + "Data acquisizione da": "Erwerbungsdatum von", + "Data creazione": "Erstellt am", + "Data di Pubblicazione": "Erscheinungsdatum", + "Data di inizio della prenotazione (default: oggi)": "Startdatum der Vormerkung (Standard: heute)", + "Data di morte": "Sterbedatum", + "Data di nascita": "Geburtsdatum", + "Data di pubblicazione": "Erscheinungsdatum", + "Data di scadenza della prenotazione (default: +30 giorni)": "Ablaufdatum der Vormerkung (Standard: +30 Tage)", + "Data fine": "Enddatum", + "Data inizio": "Startdatum", + "Data inizio richiesta mancante": "Angefordertes Startdatum fehlt", + "Data morte a": "Sterbedatum bis", + "Data morte da": "Sterbedatum von", + "Data nascita a": "Geburtsdatum bis", + "Data nascita da": "Geburtsdatum von", + "Data non valida.": "Ungültiges Datum.", + "Data originale di pubblicazione (formato italiano)": "Ursprüngliches Erscheinungsdatum (italienisches Format)", + "Data prestito": "Ausleihdatum", + "Data prestito (A)": "Ausleihdatum (Bis)", + "Data prestito (Da)": "Ausleihdatum (Von)", + "Data pubblicazione da": "Erscheinungsdatum von", + "Data scadenza prevista": "Voraussichtliches Fälligkeitsdatum", + "Data/Ora": "Datum/Uhrzeit", + "Data:": "Datum:", + "DataIntegrity warning (store loan)": "DataIntegrity-Warnung (Ausleihe speichern)", + "Database": "Datenbank", + "Database '%s' non esiste. Crealo prima di procedere.": "Datenbank '%s' existiert nicht. Bitte erstellen Sie sie, bevor Sie fortfahren.", + "Database installato (30 tabelle)": "Datenbank installiert (30 Tabellen)", + "Database installato (41 tabelle)": "Datenbank installiert (41 Tabellen)", + "Database installato (46 tabelle)": "Datenbank installiert (46 Tabellen)", + "Database:": "Datenbank:", + "Date": "Termine", + "Date Non Valide": "Ungültige Daten", + "Dati Account": "Kontodaten", + "Dati Utente": "Benutzerdetails", + "Dati alternativi disponibili": "Alternative Daten verfügbar", + "Dati bibliografici completi (titolo, sottotitolo, ISBN, EAN, ecc.)": "Vollständige bibliografische Daten (Titel, Untertitel, ISBN, EAN usw.)", + "Dati della Prenotazione": "Vormerkungsdetails", + "Dati di classificazione mancanti": "Klassifikationsdaten fehlen", + "Dati essenziali caricati": "Wesentliche Daten geladen", + "Dati generi mancanti": "Genre-Daten fehlen", + "Dati iniziali importati OK": "Anfangsdaten erfolgreich importiert", + "Dati libro recuperati con successo da Open Library": "Buchdaten erfolgreich von Open Library abgerufen", + "Dati mancanti": "Fehlende Daten", + "Dati personali": "Persönliche Daten", + "Dati validi.": "Gültige Daten.", + "Debug": "Debug", + "Debug Log:": "Debug-Log:", + "Deceduto il %s": "Verstorben am %s", + "Decimali": "Dezimalstellen", + "Decrescente": "Absteigend", + "Default: un mese dopo la data inizio": "Standard: ein Monat nach dem Startdatum", + "Definisce i privilegi dell'utente.": "Definiert die Berechtigungen des Benutzers.", + "Demo": "Demo", + "Descrivi l'utilizzo di questa API key...": "Beschreiben Sie die Verwendung dieses API-Keys...", + "Descrizione": "Beschreibung", + "Descrizione Banner": "Banner-Beschreibung", + "Descrizione Evento": "Veranstaltungsbeschreibung", + "Descrizione Modale": "Modal-Beschreibung", + "Descrizione OG": "OG-Beschreibung", + "Descrizione Open Graph": "Open-Graph-Beschreibung", + "Descrizione SEO": "SEO-Beschreibung", + "Descrizione Twitter": "Twitter-Beschreibung", + "Descrizione banner": "Banner-Beschreibung", + "Descrizione breve": "Kurzbeschreibung", + "Descrizione completa dell'evento con possibilità di formattazione HTML": "Vollständige Veranstaltungsbeschreibung mit HTML-Formatierungsmöglichkeiten", + "Descrizione cookie analitici": "Beschreibung der Analyse-Cookies", + "Descrizione cookie essenziali": "Beschreibung der essentiellen Cookies", + "Descrizione cookie marketing": "Beschreibung der Marketing-Cookies", + "Descrizione del libro...": "Buchbeschreibung...", + "Descrizione footer": "Footer-Beschreibung", + "Descrizione modale": "Modal-Beschreibung", + "Descrizione nella modale preferenze. Puoi usare HTML.": "Beschreibung im Einstellungen-Modal. Sie können HTML verwenden.", + "Descrizione per Twitter/X. Se vuoto, usa la descrizione Open Graph.": "Beschreibung für Twitter/X. Wenn leer, wird die Open Graph-Beschreibung verwendet.", + "Descrizione per anteprima social. Se vuoto, usa la descrizione SEO.": "Beschreibung für die Social-Media-Vorschau. Wenn leer, wird die SEO-Beschreibung verwendet.", + "Descrizione troppo lunga (max 2000 caratteri)": "Beschreibung zu lang (max. 2000 Zeichen)", + "Descrizione:": "Beschreibung:", + "Deseleziona tutti": "Alle abwählen", + "Dettagli": "Details", + "Dettagli Acquisizione": "Erwerbungsdetails", + "Dettagli Fisici": "Physische Details", + "Dettagli Libro": "Buchdetails", + "Dettagli Messaggio": "Nachrichtendetails", + "Dettagli del Prestito": "Ausleihdetails", + "Dettagli evento": "Veranstaltungsdetails", + "Dettagli principali dell'evento": "Wichtigste Veranstaltungsdetails", + "Dettagli restituzione": "Rückgabedetails", + "Deutsch (DE)": "Deutsch (DE)", + "Deve contenere maiuscole, minuscole e numeri": "Muss Groß-, Kleinbuchstaben und Zahlen enthalten", + "Deve iniziare con": "Muss beginnen mit", + "Devi accettare la Privacy Policy per procedere": "Sie müssen die Datenschutzrichtlinie akzeptieren, um fortzufahren", + "Devi elencare manualmente i cookie tracciati da questi script nella": "Sie müssen die von diesen Skripten erfassten Cookies manuell auflisten in der", + "Devi eseguire": "Sie müssen ausführen", + "Dewey": "Dewey", + "Dimensione": "Größe", + "Dimensioni": "Abmessungen", + "Dipendenze": "Abhängigkeiten", + "Directory Upload Pubblici": "Verzeichnis für öffentliche Uploads", + "Directory non scrivibile: %s": "Verzeichnis nicht beschreibbar: %s", + "Directory plugin già esistente.": "Plugin-Verzeichnis existiert bereits.", + "Directory sorgente non trovata": "Quellverzeichnis nicht gefunden", + "Disabilita": "Deaktivieren", + "Disabilita prestiti, prenotazioni e wishlist. Gli utenti potranno solo consultare il catalogo.": "Deaktiviert Ausleihen, Vormerkungen und Wunschliste. Die Benutzer können nur den Katalog durchsuchen.", + "Disabilita se il tuo sito non usa cookie analitici (es. Google Analytics)": "Deaktivieren, wenn Ihre Website keine Analyse-Cookies verwendet (z.B. Google Analytics)", + "Disabilita se il tuo sito non usa cookie di marketing/advertising": "Deaktivieren, wenn Ihre Website keine Marketing-/Werbe-Cookies verwendet", + "Disabilita tutte le funzionalità di prestito e prenotazione": "Alle Ausleih- und Vormerkungsfunktionen deaktivieren", + "Disabilitata": "Deaktiviert", + "Disabilitata - Nascosta nel frontend": "Deaktiviert – Im Frontend ausgeblendet", + "Disabilitato": "Deaktiviert", + "Disattiva": "Deaktivieren", + "Disattiva modalità manutenzione": "Wartungsmodus deaktivieren", + "Disattivata": "Inaktiv", + "Discografia": "Diskografie", + "Disconnesso": "Getrennt", + "Disconnetti": "Abmelden", + "Disconnetti tutti": "Alle abmelden", + "Disinstalla": "Deinstallieren", + "Disinstalla Plugin": "Plugin deinstallieren", + "Disponibile": "Verfügbar", + "Disponibile dal:": "Verfügbar ab:", + "Disponibile nella data selezionata": "Am gewählten Datum verfügbar", + "Disponibile ora": "Jetzt verfügbar", + "Disponibile per il prestito.": "Zur Ausleihe verfügbar.", + "Disponibile solo con driver SMTP": "Nur mit SMTP-Treiber verfügbar", + "Disponibili": "Verfügbar", + "Disponibili e in prestito": "Verfügbar und ausgeliehen", + "Disponibilità": "Verfügbarkeit", + "Disponibilità copie": "Exemplarverfügbarkeit", + "Dispositivo sconosciuto": "Unbekanntes Gerät", + "Divisione (010-990)": "Abteilung (010-990)", + "Divisioni": "Abteilungen", + "Do you want to automatically fix the detected integrity issues?": "Möchten Sie die erkannten Integritätsprobleme automatisch beheben?", + "Do you want to run full system maintenance? This may take a few minutes.": "Möchten Sie die vollständige Systemwartung ausführen? Dies kann einige Minuten dauern.", + "Documentazione": "Dokumentation", + "Documentazione API": "API-Dokumentation", + "Documento": "Dokument", + "Documento generato il %s alle %s": "Dokument erstellt am %s um %s", + "Donazione": "Spende", + "Dopo la conferma, un amministratore approverà la tua iscrizione.": "Nach der Bestätigung wird ein Administrator Ihre Registrierung genehmigen.", + "Dopo la rigenerazione, invia l'URL della sitemap a Google Search Console e Bing Webmaster Tools": "Senden Sie nach der Neugenerierung die Sitemap-URL an Google Search Console und Bing Webmaster Tools", + "Download aggiornamento": "Update wird heruntergeladen", + "Download completato": "Download abgeschlossen", + "Download copertina fallito": "Cover-Download fehlgeschlagen", + "Download fallito": "Download fehlgeschlagen", + "Driver": "Treiber", + "Driver Email": "E-Mail-Treiber", + "Durata": "Dauer", + "EAN": "EAN", + "EAN:": "EAN:", + "ERRORE:": "FEHLER:", + "Eccellente": "Ausgezeichnet", + "Eccezione creazione %s su %s:": "Ausnahme beim Erstellen von %s auf %s:", + "Eccezione creazione tabella %s:": "Ausnahme beim Erstellen der Tabelle %s:", + "Editor Classificazione Dewey": "Dewey-Klassifikationseditor", + "Editore": "Verlag", + "Editore \"${item.label}\" selezionato": "Verlag \"${item.label}\" ausgewählt", + "Editore \"${value}\" pronto per essere creato": "Verlag \"${value}\" bereit zur Erstellung", + "Editore \"%s\" pronto per essere creato": "Verlag \"%s\" bereit zur Erstellung", + "Editore \"%s\" selezionato": "Verlag \"%s\" ausgewählt", + "Editore %s": "Verlag %s", + "Editore applicato": "Verlag übernommen", + "Editore eliminato con successo.": "Verlag erfolgreich gelöscht.", + "Editore principale": "Hauptverlag", + "Editore sconosciuto": "Unbekannter Verlag", + "Editore selezionato:": "Ausgewählter Verlag:", + "Editore trovato:": "Verlag gefunden:", + "Editore:": "Verlag:", + "Editore: %s": "Verlag: %s", + "Editori": "Verlage", + "Editori uniti": "Verlage zusammengeführt", + "Editori uniti con successo": "Verlage erfolgreich zusammengeführt", + "Edizione": "Ausgabe", + "Elaborato da": "Bearbeitet von", + "Elaborazione lista attesa fallita": "Wartelistenverarbeitung fehlgeschlagen", + "Elaborazione...": "Verarbeitung...", + "Elementi": "Elemente", + "Elenco Autori": "Autorenliste", + "Elenco Autori - Biblioteca": "Autorenliste – Bibliothek", + "Elenco Editori": "Verlagsliste", + "Elenco Editori - Biblioteca": "Verlagsliste – Bibliothek", + "Elenco Libri": "Bücherliste", + "Elenco Libri - Biblioteca": "Bücherliste – Bibliothek", + "Elenco Prestiti": "Ausleihliste", + "Elenco Utenti": "Benutzerliste", + "Elenco Utenti - Biblioteca": "Benutzerliste – Bibliothek", + "Elimina": "Löschen", + "Elimina Installer": "Installer löschen", + "Elimina Installer (Richiede Composer)": "Installer löschen (erfordert Composer)", + "Elimina Lingua": "Sprache löschen", + "Elimina copia": "Exemplar löschen", + "Elimina il file .installed dalla root del progetto e riprova": "Löschen Sie die Datei .installed aus dem Projektstammverzeichnis und versuchen Sie es erneut", + "Elimina questa lingua. Questa azione non può essere annullata.": "Diese Sprache löschen. Diese Aktion kann nicht rückgängig gemacht werden.", + "Elimina recensione": "Rezension löschen", + "Eliminare i libri selezionati?": "Ausgewählte Bücher löschen?", + "Eliminare il file .installed dalla root del progetto e rieseguire l'installer": "Löschen Sie die Datei .installed aus dem Projektstammverzeichnis und führen Sie den Installer erneut aus", + "Eliminare il libro?": "Buch löschen?", + "Eliminare l'utente?": "Benutzer löschen?", + "Eliminare questa mensola? (Solo se vuota)": "Dieses Regalbrett löschen? (Nur wenn leer)", + "Eliminare questo backup?": "Dieses Backup löschen?", + "Eliminare questo scaffale? (Solo se vuoto)": "Dieses Regal löschen? (Nur wenn leer)", + "Eliminati": "Gelöscht", + "Eliminato!": "Gelöscht!", + "Eliminazione in corso...": "Wird gelöscht...", + "Email": "E-Mail", + "Email *": "E-Mail *", + "Email Admin": "Admin-E-Mail", + "Email Contatto": "Kontakt-E-Mail", + "Email Non Valida": "Ungültige E-Mail", + "Email Non Verificata": "Nicht verifizierte E-Mail", + "Email Referente": "E-Mail der Kontaktperson", + "Email associata al tuo account": "Mit Ihrem Konto verknüpfte E-Mail", + "Email configurata": "E-Mail konfiguriert", + "Email di contatto": "Kontakt-E-Mail", + "Email di recupero inviata con successo!": "Wiederherstellungs-E-Mail erfolgreich gesendet!", + "Email dove ricevere i messaggi dal form contatti": "E-Mail-Adresse für den Empfang von Nachrichten aus dem Kontaktformular", + "Email e telefono visibili sulla pagina contatti": "E-Mail und Telefon sichtbar auf der Kontaktseite", + "Email già registrata": "E-Mail bereits registriert", + "Email non trovata nel nostro sistema": "E-Mail in unserem System nicht gefunden", + "Email non valida. Verifica il formato": "Ungültige E-Mail. Überprüfen Sie das Format", + "Email non verificata. Controlla la tua casella di posta e clicca sul link di verifica": "E-Mail nicht verifiziert. Überprüfen Sie Ihren Posteingang und klicken Sie auf den Bestätigungslink", + "Email o password non corretti. Verifica le credenziali e riprova": "E-Mail oder Passwort falsch. Überprüfen Sie Ihre Zugangsdaten und versuchen Sie es erneut", + "Email per notifiche": "E-Mail für Benachrichtigungen", + "Email troppo lunga (massimo 255 caratteri)": "E-Mail zu lang (maximal 255 Zeichen)", + "Email utente": "Benutzer-E-Mail", + "Email verificata con successo! Il tuo account è ora in attesa di approvazione da parte dell'amministratore. Riceverai un'email quando sarà attivato.": "E-Mail erfolgreich verifiziert! Ihr Konto wartet nun auf die Genehmigung durch den Administrator. Sie erhalten eine E-Mail, wenn es aktiviert wird.", + "Email:": "E-Mail:", + "Embed della mappa (Google Maps o OpenStreetMap). Puoi inserire l'URL o il codice iframe completo.": "Karteneinbettung (Google Maps oder OpenStreetMap). Sie können die URL oder den vollständigen iframe-Code einfügen.", + "Emoji Bandiera": "Flaggen-Emoji", + "Emoji della bandiera del paese (opzionale)": "Landesflaggen-Emoji (optional)", + "Emoji della bandiera del paese (opzionale, default: 🌐)": "Landesflaggen-Emoji (optional, Standard: 🌐)", + "Encryption": "Encryption", + "Endpoint": "Endpoint", + "Endpoint SRU:": "SRU-Endpoint:", + "English (EN)": "Englisch (EN)", + "Errore": "Fehler", + "Errore Installazione": "Installationsfehler", + "Errore SQL durante migrazione %s: %s": "SQL-Fehler bei Migration %s: %s", + "Errore Upload": "Upload-Fehler", + "Errore aggiornamento log": "Fehler beim Aktualisieren des Protokolls", + "Errore annullamento prenotazione": "Fehler bei der Stornierung der Vormerkung", + "Errore annullamento prestito": "Fehler bei der Stornierung der Ausleihe", + "Errore attivazione prestito schedulato": "Fehler bei der Aktivierung der geplanten Ausleihe", + "Errore backup database": "Fehler beim Datenbank-Backup", + "Errore caricamento Audiobook": "Fehler beim Laden des Hörbuchs", + "Errore caricamento classificazione Dewey": "Fehler beim Laden der Dewey-Klassifikation", + "Errore caricamento eBook": "Fehler beim Laden des E-Books", + "Errore connessione database": "Datenbankverbindungsfehler", + "Errore correzione dati:": "Fehler bei der Datenkorrektur:", + "Errore creazione %s su %s:": "Fehler beim Erstellen von %s auf %s:", + "Errore creazione indici:": "Fehler bei der Indexerstellung:", + "Errore creazione tabella %s:": "Fehler beim Erstellen der Tabelle %s:", + "Errore creazione tabella migrazioni": "Fehler beim Erstellen der Migrationstabelle", + "Errore creazione tabella update_logs": "Fehler beim Erstellen der Tabelle update_logs", + "Errore database:": "Datenbankfehler:", + "Errore del Server": "Serverfehler", + "Errore del database": "Datenbankfehler", + "Errore del database durante la registrazione. Riprova più tardi": "Datenbankfehler bei der Registrierung. Bitte versuchen Sie es später erneut", + "Errore del server": "Serverfehler", + "Errore del server. Riprova più tardi.": "Serverfehler. Bitte versuchen Sie es später erneut.", + "Errore di comunicazione con il server": "Kommunikationsfehler mit dem Server", + "Errore di configurazione del server.": "Serverkonfigurationsfehler.", + "Errore di configurazione.": "Konfigurationsfehler.", + "Errore di connessione": "Verbindungsfehler", + "Errore di connessione durante l'importazione": "Verbindungsfehler während des Imports", + "Errore di connessione:": "Verbindungsfehler:", + "Errore di rete": "Netzwerkfehler", + "Errore di salvataggio": "Speicherfehler", + "Errore di salvataggio. Riprova più tardi.": "Fehler beim Speichern. Bitte versuchen Sie es später erneut.", + "Errore di sicurezza": "Sicherheitsfehler", + "Errore di sicurezza, riprova": "Sicherheitsfehler, versuchen Sie es erneut", + "Errore di sicurezza. Aggiorna la pagina e riprova": "Sicherheitsfehler. Aktualisieren Sie die Seite und versuchen Sie es erneut", + "Errore di sicurezza. Ricarica la pagina e riprova": "Sicherheitsfehler. Laden Sie die Seite neu und versuchen Sie es erneut", + "Errore di sicurezza. Ricarica la pagina e riprova.": "Sicherheitsfehler. Laden Sie die Seite neu und versuchen Sie es erneut.", + "Errore di sicurezza. Riprova.": "Sicherheitsfehler. Bitte versuchen Sie es erneut.", + "Errore di sistema.": "Systemfehler.", + "Errore durante il caricamento dei dettagli del plugin.": "Fehler beim Laden der Plugin-Details.", + "Errore durante il caricamento del file (code: %s).": "Fehler beim Hochladen der Datei (Code: %s).", + "Errore durante il caricamento del file.": "Fehler beim Hochladen der Datei.", + "Errore durante il controllo": "Fehler bei der Überprüfung", + "Errore durante il recupero dei dati": "Fehler beim Abrufen der Daten", + "Errore durante il recupero delle sessioni": "Fehler beim Abrufen der Sitzungen", + "Errore durante il ricalcolo:": "Fehler bei der Neuberechnung:", + "Errore durante il rifiuto": "Fehler bei der Ablehnung", + "Errore durante il salvataggio": "Fehler beim Speichern", + "Errore durante il salvataggio delle impostazioni.": "Fehler beim Speichern der Einstellungen.", + "Errore durante il salvataggio delle impostazioni:": "Fehler beim Speichern der Einstellungen:", + "Errore durante il salvataggio nel database.": "Fehler beim Speichern in der Datenbank.", + "Errore durante il salvataggio.": "Fehler beim Speichern.", + "Errore durante il salvataggio:": "Fehler beim Speichern:", + "Errore durante il seed": "Fehler beim Seeding", + "Errore durante l'aggiornamento": "Fehler bei der Aktualisierung", + "Errore durante l'aggiornamento dell'evento.": "Fehler beim Aktualisieren der Veranstaltung.", + "Errore durante l'aggiornamento della chiave Google Books.": "Fehler beim Aktualisieren des Google-Books-Schlüssels.", + "Errore durante l'annullamento del ritiro": "Fehler beim Stornieren der Abholung", + "Errore durante l'applicazione del fix:": "Fehler beim Anwenden des Fixes:", + "Errore durante l'approvazione": "Fehler bei der Genehmigung", + "Errore durante l'attivazione": "Fehler bei der Aktivierung", + "Errore durante l'attivazione del plugin.": "Fehler beim Aktivieren des Plugins.", + "Errore durante l'attivazione del tema": "Fehler bei der Aktivierung des Themes", + "Errore durante l'attivazione: %s": "Fehler bei der Aktivierung: %s", + "Errore durante l'eliminazione dell'evento.": "Fehler beim Löschen der Veranstaltung.", + "Errore durante l'estrazione del plugin.": "Fehler beim Entpacken des Plugins.", + "Errore durante l'import: %s": "Importfehler: %s", + "Errore durante l'importazione (HTTP": "Fehler beim Import (HTTP", + "Errore durante l'importazione (HTTP %d)": "Importfehler (HTTP %d)", + "Errore durante l'importazione dati": "Fehler beim Datenimport", + "Errore durante l'installazione del plugin.": "Fehler bei der Plugin-Installation.", + "Errore durante l'installazione:": "Fehler bei der Installation:", + "Errore durante l'installazione: %s": "Fehler bei der Installation: %s", + "Errore durante l'invio dell'email. Riprova più tardi": "Fehler beim Senden der E-Mail. Bitte versuchen Sie es später erneut", + "Errore durante l'unione degli autori": "Fehler beim Zusammenführen der Autoren", + "Errore durante l'unione degli editori": "Fehler beim Zusammenführen der Verlage", + "Errore durante l'upload.": "Upload-Fehler.", + "Errore durante la conferma del ritiro": "Fehler bei der Abholungsbestätigung", + "Errore durante la correzione:": "Fehler bei der Korrektur:", + "Errore durante la creazione degli indici": "Fehler beim Erstellen der Indizes", + "Errore durante la creazione degli indici:": "Fehler beim Erstellen der Indizes:", + "Errore durante la creazione del prestito.": "Fehler beim Erstellen der Ausleihe.", + "Errore durante la creazione dell'evento.": "Fehler beim Erstellen der Veranstaltung.", + "Errore durante la creazione dell'utente:": "Fehler beim Erstellen des Benutzers:", + "Errore durante la creazione delle tabelle:": "Fehler beim Erstellen der Tabellen:", + "Errore durante la disattivazione del plugin.": "Fehler beim Deaktivieren des Plugins.", + "Errore durante la disattivazione: %s": "Fehler bei der Deaktivierung: %s", + "Errore durante la disinstallazione del plugin.": "Fehler bei der Deinstallation des Plugins.", + "Errore durante la finalizzazione:": "Fehler bei der Fertigstellung:", + "Errore durante la manutenzione:": "Fehler bei der Wartung:", + "Errore durante la prenotazione": "Fehler bei der Vormerkung", + "Errore durante la registrazione": "Registrierungsfehler", + "Errore durante la revoca della sessione": "Fehler beim Widerrufen der Sitzung", + "Errore durante la revoca delle sessioni": "Fehler beim Widerrufen der Sitzungen", + "Errore durante la ricerca": "Fehler bei der Suche", + "Errore durante la ricerca su": "Fehler bei der Suche auf", + "Errore durante la rimozione dal database.": "Fehler beim Entfernen aus der Datenbank.", + "Errore durante la verifica dei libri associati": "Fehler bei der Überprüfung der zugehörigen Bücher", + "Errore durante la verifica dei prestiti attivi": "Fehler bei der Überprüfung der aktiven Ausleihen", + "Errore elaborazione restituzione": "Fehler bei der Rückgabeverarbeitung", + "Errore elaborazione ritiro scaduto": "Fehler bei der Verarbeitung der abgelaufenen Abholung", + "Errore export CSV": "CSV-Export-Fehler", + "Errore fatale durante aggiornamento": "Schwerwiegender Fehler bei der Aktualisierung", + "Errore generazione PDF prestito": "Fehler bei der Erstellung des Ausleih-PDF", + "Errore generazione calendario": "Fehler bei der Kalendererstellung", + "Errore gestione cambio stato copia": "Fehler bei der Verarbeitung der Exemplar-Statusänderung", + "Errore gestione copia non disponibile": "Fehler bei der Behandlung des nicht verfügbaren Exemplars", + "Errore imprevisto durante l'unione degli autori": "Unerwarteter Fehler beim Zusammenführen der Autoren", + "Errore imprevisto durante l'unione degli editori": "Unerwarteter Fehler beim Zusammenführen der Verlage", + "Errore interno del database": "Interner Datenbankfehler", + "Errore interno del database durante la verifica": "Interner Datenbankfehler während der Überprüfung", + "Errore interno del database. Riprova più tardi.": "Interner Datenbankfehler. Bitte versuchen Sie es später erneut.", + "Errore interno durante l'approvazione": "Interner Fehler bei der Genehmigung", + "Errore interno: %s": "Interner Fehler: %s", + "Errore invio notifica differita": "Fehler beim Senden der verzögerten Benachrichtigung", + "Errore invio notifica ritiro pronto": "Fehler beim Senden der Abholbereitschafts-Benachrichtigung", + "Errore invio notifica ritiro scaduto": "Fehler beim Senden der Benachrichtigung über abgelaufene Abholung", + "Errore lettura calendario": "Fehler beim Lesen des Kalenders", + "Errore modifica data prenotazione": "Fehler bei der Änderung des Vormerkungsdatums", + "Errore nel caricamento dei backup.": "Fehler beim Laden der Sicherungen.", + "Errore nel caricamento dei libri": "Fehler beim Laden der Bücher", + "Errore nel caricamento del file": "Fehler beim Hochladen der Datei", + "Aggiunge badge cliccabili alla scheda libro per cercare su Anna's Archive, Z-Library e Project Gutenberg con un click. Ispirato all'estensione browser GoodLib.": "Fügt anklickbare Badges zur Buchdetailseite hinzu, um mit einem Klick auf Anna's Archive, Z-Library und Project Gutenberg zu suchen. Inspiriert von der GoodLib-Browsererweiterung.", + "Anna's Archive": "Anna's Archive", + "Catalogo pubblico": "Öffentlicher Katalog", + "Configura Fonti": "Quellen konfigurieren", + "Domini mirror": "Mirror-Domains", + "Dominio non valido. Inserisci solo host o host:porta, senza percorsi.": "Ungültige Domain. Geben Sie nur Host oder Host:Port ohne Pfade ein.", + "Dominio personalizzato...": "Benutzerdefinierte Domain...", + "Errore durante l'aggiornamento del profilo.": "Fehler beim Aktualisieren des Profils.", + "Cerca su:": "Suche auf:", + "Predefinita del sito": "Website-Standard", + "Cerca \"%s\" su %s": "Suche \"%s\" auf %s", + "Fonti attive": "Aktive Quellen", + "GoodLib — External Sources": "GoodLib — Externe Quellen", + "GoodLib — Fonti Esterne": "GoodLib — Externe Quellen", + "Impostazioni GoodLib salvate correttamente.": "GoodLib-Einstellungen erfolgreich gespeichert.", + "Mostra badge nella pagina dettaglio libro": "Badge auf der Buchdetailseite anzeigen", + "Mostra badge nell'area amministrazione": "Badge im Administrationsbereich anzeigen", + "Mostra i badge nella pagina dettaglio libro del catalogo": "Badges auf der Buchdetailseite im Katalog anzeigen", + "Mostra i badge nella scheda libro dell'area amministrazione": "Badges auf der Buchseite im Administrationsbereich anzeigen", + "Project Gutenberg": "Project Gutenberg", + "Puoi scegliere un mirror suggerito oppure selezionare dominio personalizzato.": "Sie können einen vorgeschlagenen Mirror auswählen oder eine benutzerdefinierte Domain wählen.", + "Puoi usare i mirror suggeriti oppure inserire un dominio custom.": "Sie können die vorgeschlagenen Mirror verwenden oder eine benutzerdefinierte Domain eingeben.", + "Questi siti cambiano dominio spesso. Seleziona un mirror funzionante.": "Diese Seiten ändern ihre Domain häufig. Wählen Sie einen funktionierenden Mirror aus.", + "Scheda libro admin": "Admin-Buchseite", + "Sono accettati anche domini personalizzati; se incolli un URL completo verrà salvato solo l'host.": "Benutzerdefinierte Domains werden ebenfalls akzeptiert; wenn Sie eine vollständige URL einfügen, wird nur der Host gespeichert.", + "Visibilita": "Sichtbarkeit", + "Visibilità": "Sichtbarkeit", + "Z-Library": "Z-Library", + "Errore nel caricamento del file JSON": "Fehler beim Laden der JSON-Datei", + "Errore nel caricamento.": "Fehler beim Laden.", + "Errore nel caricamento. Riprova.": "Fehler beim Laden. Bitte versuchen Sie es erneut.", + "Errore nel download della copertina.": "Fehler beim Herunterladen des Covers.", + "Errore nel parsing del file JSON.": "Fehler beim Parsen der JSON-Datei.", + "Errore nel recupero dati tabella %s": "Fehler beim Abrufen der Tabellendaten für %s", + "Errore nel recupero dei figli": "Fehler beim Abrufen der Unterkategorien", + "Errore nel recupero delle categorie.": "Fehler beim Abrufen der Kategorien.", + "Errore nel recupero delle divisioni.": "Fehler beim Abrufen der Abteilungen.", + "Errore nel recupero delle specifiche.": "Fehler beim Abrufen der Untergruppen.", + "Errore nel recupero delle tabelle": "Fehler beim Abrufen der Tabellen", + "Errore nel recupero struttura tabella %s": "Fehler beim Abrufen der Tabellenstruktur für %s", + "Errore nel rifiuto": "Fehler bei der Ablehnung", + "Errore nel rifiuto della richiesta": "Fehler beim Ablehnen der Anfrage", + "Errore nel ripristino dei colori": "Fehler beim Zurücksetzen der Farben", + "Errore nel ripristino.": "Fehler bei der Wiederherstellung.", + "Errore nel salvataggio del file di traduzione": "Fehler beim Speichern der Übersetzungsdatei", + "Errore nel salvataggio del file route": "Fehler beim Speichern der Route-Datei", + "Errore nel salvataggio del file.": "Fehler beim Speichern der Datei.", + "Errore nel salvataggio del tema": "Fehler beim Speichern des Themes", + "Errore nel salvataggio dell'immagine.": "Fehler beim Speichern des Bildes.", + "Errore nel salvataggio dell'ordine. Ricarica la pagina e riprova.": "Fehler beim Speichern der Reihenfolge. Bitte laden Sie die Seite neu und versuchen Sie es erneut.", + "Errore nell'aggiornamento del template": "Fehler beim Aktualisieren der Vorlage", + "Errore nell'aggiornamento dello stato dell'API key: %s": "Fehler beim Aktualisieren des API-Key-Status: %s", + "Errore nell'aggiornamento:": "Fehler bei der Aktualisierung:", + "Errore nell'aggiornare i preferiti.": "Fehler beim Aktualisieren der Favoriten.", + "Errore nell'approvazione": "Fehler bei der Genehmigung", + "Errore nell'eliminazione dell'API key: %s": "Fehler beim Löschen des API-Keys: %s", + "Errore nell'eliminazione:": "Fehler beim Löschen:", + "Errore nell'operazione:": "Fehler beim Vorgang:", + "Errore nella Verifica dell'Installazione": "Fehler bei der Installationsüberprüfung", + "Errore nella codifica JSON.": "JSON-Kodierungsfehler.", + "Errore nella comunicazione con il server": "Kommunikationsfehler mit dem Server", + "Errore nella conferma del ritiro": "Fehler bei der Abholungsbestätigung", + "Errore nella copia del file: %s": "Fehler beim Kopieren der Datei: %s", + "Errore nella copia:": "Fehler beim Kopieren:", + "Errore nella copia: ": "Fehler beim Kopieren: ", + "Errore nella creazione del genere.": "Fehler beim Erstellen des Genres.", + "Errore nella creazione dell'API key: %s": "Fehler beim Erstellen des API-Keys: %s", + "Errore nella creazione della recensione": "Fehler beim Erstellen der Rezension", + "Errore nella creazione della richiesta di prestito": "Fehler beim Erstellen der Ausleihanfrage", + "Errore nella creazione:": "Fehler beim Erstellen:", + "Errore nella lettura del backup.": "Fehler beim Lesen der Sicherungsdatei.", + "Errore nella lettura del file Dewey esistente.": "Fehler beim Lesen der vorhandenen Dewey-Datei.", + "Errore nella lettura del file.": "Fehler beim Lesen der Datei.", + "Errore nella prenotazione": "Fehler bei der Vormerkung", + "Errore nella prenotazione.": "Fehler bei der Vormerkung.", + "Errore nella query.": "Abfragefehler.", + "Errore nella ricerca": "Suchfehler", + "Errore nella ricerca.": "Fehler bei der Suche.", + "Errore nella richiesta di prestito.": "Fehler bei der Ausleihanfrage.", + "Errore prenotazione": "Vormerkungsfehler", + "Errore preparazione completamento log": "Fehler beim Vorbereiten des Protokollabschlusses", + "Errore preparazione insert migrazione": "Fehler beim Vorbereiten des Migrationseintrags", + "Errore preparazione log aggiornamento": "Fehler beim Vorbereiten des Aktualisierungsprotokolls", + "Errore preparazione query migrazioni": "Fehler beim Vorbereiten der Migrationsabfrage", + "Errore processamento immagine": "Fehler bei der Bildverarbeitung", + "Errore recupero batch migrazioni": "Fehler beim Abrufen des Migrationsbatches", + "Errore recupero risultati migrazioni": "Fehler beim Abrufen der Migrationsergebnisse", + "Errore riassegnazione copia": "Fehler bei der Exemplar-Neuzuweisung", + "Errore riassegnazione copia persa": "Fehler bei der Neuzuweisung des verlorenen Exemplars", + "Errore richiesta prestito": "Fehler bei der Ausleihanfrage", + "Errore salvataggio immagine": "Fehler beim Speichern des Bildes", + "Errore sconosciuto durante il caricamento": "Unbekannter Fehler beim Hochladen", + "Errore suggerimento": "Vorschlagsfehler", + "Errore validazione prestito:": "Fehler bei der Ausleihe-Validierung:", + "Errore verifica tabelle: %s": "Fehler bei der Tabellenüberprüfung: %s", + "Errore!": "Fehler!", + "Errore:": "Fehler:", + "Errore: ": "Fehler: ", + "Errore: Utente non trovato": "Fehler: Benutzer nicht gefunden", + "Errore: la data di scadenza deve essere successiva alla data di prestito.": "Fehler: Das Fälligkeitsdatum muss nach dem Ausleihdatum liegen.", + "Errore: tutti i campi obbligatori devono essere compilati.": "Fehler: Alle Pflichtfelder müssen ausgefüllt werden.", + "Errori Totali": "Gesamtfehler", + "Errori di validazione dopo il merge.": "Validierungsfehler nach dem Zusammenführen.", + "Errori di validazione nel file importato.": "Validierungsfehler in der importierten Datei.", + "Errori di validazione.": "Validierungsfehler.", + "Errori durante l'import": "Importfehler", + "Errori:": "Fehler:", + "Es. Biblioteca Digitale - Migliaia di libri da esplorare": "Z.B. Digitale Bibliothek – Tausende Bücher zum Entdecken", + "Es. Esplora migliaia di libri, prenota online e gestisci i tuoi prestiti.": "Z.B. Entdecken Sie Tausende von Büchern, reservieren Sie online und verwalten Sie Ihre Ausleihen.", + "Es. Italiana, Americana, Francese...": "Z.B. Italienisch, Amerikanisch, Französisch...", + "Es. Italiana, Americana...": "Z.B. Italienische, Amerikanische...", + "Es. Italiana...": "Z.B. Italienisch...", + "Es. La Tua Biblioteca Digitale": "Z.B. Ihre Digitale Bibliothek", + "Es. Milano...": "Z.B. München...", + "Es. Presentazione libro \"Il Nome della Rosa\"": "Z.B. Buchvorstellung \"Der Name der Rose\"", + "Es. Scopri il nostro catalogo digitale con migliaia di libri disponibili per il prestito. Registrati gratuitamente e inizia a leggere oggi stesso.": "Z.B. Entdecken Sie unseren digitalen Katalog mit Tausenden von Büchern, die zur Ausleihe verfügbar sind. Registrieren Sie sich kostenlos und beginnen Sie noch heute zu lesen.", + "Es. Un libro fantastico!": "Z.B. Ein fantastisches Buch!", + "Es. Un libro straordinario!": "Z.B. Ein außergewöhnliches Buch!", + "Es. biblioteca digitale, prestito libri, catalogo online, libri gratis": "Z.B. digitale Bibliothek, Buchausleihe, Online-Katalog, kostenlose Bücher", + "Es. https://tuosito.com": "Z.B. https://ihreseite.com", + "Es. https://tuosito.com/uploads/og-image.jpg": "Z.B. https://ihreseite.com/uploads/og-image.jpg", + "Esauriti tentativi riassegnazione copia": "Neuzuweisungsversuche für Exemplar erschöpft", + "Esci": "Abmelden", + "Esecuzione ogni 30 minuti (consigliato)": "Ausführung alle 30 Minuten (empfohlen)", + "Esecuzione ogni ora (8:00-20:00)": "Ausführung jede Stunde (8:00-20:00)", + "Esegue la rigenerazione ogni giorno alle 02:00 e registra il log in": "Führt die Regenerierung täglich um 02:00 Uhr aus und protokolliert in", + "Esegue la rigenerazione ogni giorno alle 02:00 e registra il log in storage/logs/sitemap.log.": "Führt die Regenerierung täglich um 02:00 Uhr aus und protokolliert in storage/logs/sitemap.log.", + "Esegui": "Ausführen", + "Esegui Manutenzione": "Wartung ausführen", + "Esegui tutte le operazioni di manutenzione": "Alle Wartungsoperationen ausführen", + "Eseguito da": "Ausgeführt von", + "Esempio": "Beispiel", + "Esempio di Chiamata": "Aufrufbeispiel", + "Esempio route inglese:": "Englisches Route-Beispiel:", + "Esempio route italiana:": "Italienisches Route-Beispiel:", + "Esempio:": "Beispiel:", + "Esiste già un altro libro con lo stesso identificatore (ISBN/EAN).": "Es existiert bereits ein anderes Buch mit demselben Identifikator (ISBN/EAN).", + "Esiste già un libro con lo stesso identificatore (ISBN/EAN).": "Es existiert bereits ein Buch mit demselben Identifikator (ISBN/EAN).", + "Esistente": "Vorhanden", + "Esito restituzione": "Rückgabeergebnis", + "Español (ES)": "Spanisch (ES)", + "Esplora Catalogo": "Katalog durchsuchen", + "Esplora catalogo": "Katalog durchsuchen", + "Esplora e gestisci gli autori della biblioteca": "Autoren der Bibliothek durchsuchen und verwalten", + "Esplora e gestisci gli editori della biblioteca": "Verlage der Bibliothek durchsuchen und verwalten", + "Esplora e gestisci gli utenti registrati alla biblioteca": "Registrierte Bibliotheksbenutzer durchsuchen und verwalten", + "Esplora e gestisci la collezione della biblioteca": "Die Bibliothekssammlung durchsuchen und verwalten", + "Esplora i generi principali": "Die Hauptgenres entdecken", + "Esplora il catalogo": "Den Katalog entdecken", + "Esplora il catalogo e scopri nuovi titoli.": "Durchsuchen Sie den Katalog und entdecken Sie neue Titel.", + "Esplora il nostro catalogo digitale": "Entdecken Sie unseren digitalen Katalog", + "Esplora il nostro vasto catalogo di libri, prenota i tuoi titoli preferiti e scopri nuove letture": "Entdecken Sie unseren umfangreichen Buchkatalog, reservieren Sie Ihre Lieblingstitel und entdecken Sie neue Lektüre", + "Esplora il nostro vasto catalogo di libri, prenota i tuoi titoli preferiti e scopri nuove letture. Sistema di prestito moderno e intuitivo con ricerca avanzata e categorie organizzate.": "Entdecken Sie unseren umfangreichen Buchkatalog, reservieren Sie Ihre Lieblingstitel und entdecken Sie neue Lektüre. Modernes und intuitives Ausleihsystem mit erweiterter Suche und übersichtlichen Kategorien.", + "Esplora per Categoria": "Nach Kategorie durchsuchen", + "Espone il catalogo locale via protocollo SRU per altre biblioteche.": "Stellt den lokalen Katalog über das SRU-Protokoll für andere Bibliotheken bereit.", + "Esporta": "Exportieren", + "Esporta CSV": "CSV exportieren", + "Esporta CSV (formato compatibile per import)": "CSV exportieren (kompatibles Format für den Import)", + "Esporta Excel": "Excel exportieren", + "Esporta PDF": "PDF exportieren", + "Esporta Prestiti": "Ausleihen exportieren", + "Esporta selezionati": "Ausgewählte exportieren", + "Esportazione di %d libri filtrati su %d totali": "Export von %d gefilterten Büchern von insgesamt %d", + "Esportazione di %d utenti filtrati su %d totali": "Export von %d gefilterten Benutzern von insgesamt %d", + "Esportazione di tutti i %d libri del catalogo": "Export aller %d Bücher aus dem Katalog", + "Esportazione di tutti i %d utenti": "Export aller %d Benutzer", + "Essenziali:": "Erforderlich:", + "Estensione": "Erweiterung", + "Estensione del file non valida.": "Ungültige Dateierweiterung.", + "Estensioni": "Erweiterungen", + "Estrazione del pacchetto fallita": "Paketentpackung fehlgeschlagen", + "Etichetta": "Etikett", + "Etichette": "Etiketten", + "Etichette interne grandi (Herma 4630, Avery 3490)": "Große interne Etiketten (Herma 4630, Avery 3490)", + "European Article Number (opzionale)": "European Article Number (optional)", + "Eventi": "Veranstaltungen", + "Eventi Recenti": "Aktuelle Veranstaltungen", + "Eventi e Incontri": "Veranstaltungen und Treffen", + "Evento": "Veranstaltung", + "Evento aggiornato con successo!": "Veranstaltung erfolgreich aktualisiert!", + "Evento creato con successo!": "Veranstaltung erfolgreich erstellt!", + "Evento della biblioteca": "Bibliotheksveranstaltung", + "Evento eliminato con successo!": "Veranstaltung erfolgreich gelöscht!", + "Evento non trovato.": "Veranstaltung nicht gefunden.", + "Evento visibile sul sito": "Veranstaltung auf der Website sichtbar", + "Eventuali annotazioni sullo stato del libro...": "Anmerkungen zum Zustand des Buches...", + "Excel": "Excel", + "Export": "Export", + "Export per LibraryThing": "Export für LibraryThing", + "Exporting %d filtered users out of %d total": "Export von %d gefilterten Benutzern von insgesamt %d", + "Exporting all %d users": "Export aller %d Benutzer", + "FAQ": "FAQ", + "FATAL ERROR:": "FATALER FEHLER:", + "Facebook": "Facebook", + "Fallimento": "Fehlschlag", + "Fallito": "Fehlgeschlagen", + "Fatal Error:": "Fataler Fehler:", + "Fatto!": "Fertig!", + "Feature %d": "Funktion %d", + "Feature 1": "Funktion 1", + "Feature 2": "Funktion 2", + "Feature 3": "Funktion 3", + "Feature 4": "Funktion 4", + "Features - Caratteristiche": "Funktionen - Merkmale", + "Femmina": "Weiblich", + "File": "Datei", + "File \"%s\" pronto per l'upload": "Datei \"%s\" bereit zum Hochladen", + "File %s nella directory root": "Datei %s im Stammverzeichnis", + "File .env non trovato": ".env-Datei nicht gefunden", + "File .env:": ".env-Datei:", + "File .htaccess creato": ".htaccess-Datei erstellt", + "File .installed:": ".installed-Datei:", + "File CSV (max 10MB)": "CSV-Datei (max. 10 MB)", + "File CSV non valido: usa \";\" o \",\" come separatore.": "Ungültige CSV-Datei: Verwenden Sie \";\" oder \",\" als Trennzeichen.", + "File CSV vuoto o formato non valido": "Leere CSV-Datei oder ungültiges Format", + "File Dewey esistente non è un JSON valido o è corrotto.": "Die vorhandene Dewey-Datei ist kein gültiges JSON oder ist beschädigt.", + "File Dewey non trovato.": "Dewey-Datei nicht gefunden.", + "File JSON con le traduzioni (opzionale). Puoi caricarlo anche in seguito.": "JSON-Datei mit Übersetzungen (optional). Sie können sie auch später hochladen.", + "File JSON non valido": "Ungültige JSON-Datei", + "File Principale:": "Hauptdatei:", + "File URL": "Datei-URL", + "File ZIP con struttura plugin valida": "ZIP-Datei mit gültiger Plugin-Struktur", + "File ZIP non trovato.": "ZIP-Datei nicht gefunden.", + "File ZIP troppo grande. Dimensione massima: 100 MB.": "ZIP-Datei zu groß. Maximale Größe: 100 MB.", + "File attuale": "Aktuelle Datei", + "File backup non trovato": "Sicherungsdatei nicht gefunden", + "File caricato con successo": "Datei erfolgreich hochgeladen", + "File dati iniziali per la lingua selezionata non trovato: %s": "Anfangsdatendatei für die ausgewählte Sprache nicht gefunden: %s", + "File di Esempio": "Beispieldatei", + "File di Traduzione": "Übersetzungsdatei", + "File di Traduzione Attuale": "Aktuelle Übersetzungsdatei", + "File di Traduzione JSON": "JSON-Übersetzungsdatei", + "File di aggiornamento non valido": "Ungültige Aktualisierungsdatei", + "File di aggiornamento non valido (troppo piccolo)": "Ungültige Aktualisierungsdatei (zu klein)", + "File di log non trovato": "Protokolldatei nicht gefunden", + "File di traduzione non trovato": "Übersetzungsdatei nicht gefunden", + "File esistente (data modifica)": "Vorhandene Datei (Änderungsdatum)", + "File non trovato nell'upload.": "Datei im Upload nicht gefunden.", + "File non valido o corrotto.": "Ungültige oder beschädigte Datei.", + "File plugin.json non trovato nel pacchetto.": "Datei plugin.json nicht im Paket gefunden.", + "File plugin.json non valido.": "Ungültige plugin.json-Datei.", + "File principale PHP specificato in %s": "In %s angegebene PHP-Hauptdatei", + "File principale del plugin non trovato.": "Plugin-Hauptdatei nicht gefunden.", + "File sitemap non trovato": "Sitemap-Datei nicht gefunden", + "File sitemap presente": "Sitemap-Datei vorhanden", + "File troppo grande. Dimensione massima 10MB.": "Datei zu groß. Maximale Größe 10 MB.", + "File troppo grande. Dimensione massima 5MB.": "Datei zu groß. Maximale Größe 5 MB.", + "File vuoto o formato non valido": "Leere Datei oder ungültiges Format", + "File:": "Datei:", + "Filtra": "Filtern", + "Filtra mensole per scaffale": "Regale nach Bücherregal filtern", + "Filtra per Mensola": "Nach Regal filtern", + "Filtra per Scaffale": "Nach Bücherregal filtern", + "Filtra per tipo": "Nach Typ filtern", + "Filtri": "Filter", + "Filtri attivi:": "Aktive Filter:", + "Filtri cancellati": "Filter zurückgesetzt", + "Filtri di Ricerca": "Suchfilter", + "Filtri salvati": "Filter gespeichert", + "Filtro Libro": "Buchfilter", + "Filtro Utente": "Benutzerfilter", + "Filtro genere attivo": "Genrefilter aktiv", + "Filtro attivo": "Aktiver Filter", + "Filtro sottogenere attivo": "Subgenre-Filter aktiv", + "Fine": "Fertig", + "Fine:": "Ende:", + "Fino a quando? (opzionale):": "Bis wann? (optional):", + "Fix applicato": "Fix angewendet", + "Fonte dati:": "Datenquelle:", + "Fonti consultate:": "Abgefragte Quellen:", + "Footer": "Fußzeile", + "Formati supportati: JPG, PNG, GIF, WebP. Dimensione massima: 5MB": "Unterstützte Formate: JPG, PNG, GIF, WebP. Maximale Größe: 5 MB", + "Formati supportati: MP3, M4A, OGG • Dimensione massima: 500 MB": "Unterstützte Formate: MP3, M4A, OGG • Max. Größe: 500 MB", + "Formati supportati: PDF, ePub • Dimensione massima: 100 MB": "Unterstützte Formate: PDF, ePub • Max. Größe: 100 MB", + "Formato": "Format", + "Formato CSV Dettagliato": "Detailliertes CSV-Format", + "Formato Etichetta": "Etikettenformat", + "Formato File JSON": "JSON-Dateiformat", + "Formato ISBN non valido.": "Ungültiges ISBN-Format.", + "Formato JSON non valido": "Ungültiges JSON-Format", + "Formato biblioteche scolastiche (compatibile A4)": "Schulbibliotheksformat (A4-kompatibel)", + "Formato biblioteche scolastiche (compatibili A4)": "Schulbibliotheksformat (A4-kompatibel)", + "Formato codice non valido": "Ungültiges Code-Format", + "Formato codice non valido. Usa formato: 599 oppure 599.9 oppure 599.93": "Ungültiges Code-Format. Format verwenden: 599 oder 599.9 oder 599.93", + "Formato codice non valido. Usa: XXX.Y (es. 599.1)": "Ungültiges Code-Format. Verwenden Sie: XXX.Y (z.B. 599.1)", + "Formato dati non valido.": "Ungültiges Datenformat.", + "Formato immagine non supportato": "Nicht unterstütztes Bildformat", + "Formato immagine non supportato. Usa JPG, PNG o WebP.": "Bildformat nicht unterstützt. Verwenden Sie JPG, PNG oder WebP.", + "Formato impostazioni non valido.": "Ungültiges Einstellungsformat.", + "Formato orizzontale per dorso": "Horizontales Format für Buchrücken", + "Formato quadrato Tirrenia": "Tirrenia-Quadratformat", + "Formato richiesta non valido": "Ungültiges Anfrageformat", + "Formato: CSV con separatore %s • Max 10MB": "Format: CSV mit Trennzeichen %s • Max. 10 MB", + "Formato: xx_XX (es. it_IT, en_US, es_ES)": "Format: xx_XX (z.B. it_IT, en_US, es_ES)", + "Forza HTTPS": "HTTPS erzwingen", + "Français (FR)": "Französisch (FR)", + "Frecce ↑ ↓ per il volume": "↑ ↓ Pfeiltasten für Lautstärke", + "From Email": "Absender-E-Mail", + "From Name": "Absendername", + "Funzionamento automatico:": "Automatischer Betrieb:", + "Fuori Catalogo": "Nicht im Katalog", + "Genera automaticamente": "Automatisch generieren", + "Generato il": "Generiert am", + "Generato il:": "Generiert am:", + "Generazione CSV in corso...": "CSV wird generiert...", + "Generazione...": "Wird generiert...", + "Genere": "Genre", + "Genere creato con successo!": "Genre erfolgreich erstellt!", + "Genere letterario": "Literarisches Genre", + "Genere letterario del libro": "Literarisches Genre des Buches", + "Genere padre (opz.)": "Übergeordnetes Genre (opt.)", + "Genere principale": "Hauptgenre", + "Genere:": "Genre:", + "Generi": "Genres", + "Generi Principali": "Hauptgenres", + "Generi e sottogeneri": "Genres und Subgenres", + "Gestione Autori": "Autorenverwaltung", + "Gestione Biblioteca": "Bibliotheksverwaltung", + "Gestione Collocazione": "Standortverwaltung", + "Gestione Contenuti (CMS)": "Inhaltsverwaltung (CMS)", + "Gestione Editori": "Verlagsverwaltung", + "Gestione Eventi": "Veranstaltungsverwaltung", + "Gestione Generi": "Genreverwaltung", + "Gestione Generi e Sottogeneri": "Genre- und Subgenre-Verwaltung", + "Gestione JavaScript Personalizzati basata su Cookie": "Cookie-basierte benutzerdefinierte JavaScript-Verwaltung", + "Gestione Libri": "Bücherverwaltung", + "Gestione Lingue": "Sprachverwaltung", + "Gestione Multilingua": "Mehrsprachigkeitsverwaltung", + "Gestione Plugin": "Plugin-Verwaltung", + "Gestione Plugin LibraryThing": "LibraryThing-Plugin-Verwaltung", + "Gestione Prenotazioni": "Vormerkungsverwaltung", + "Gestione Prestiti": "Ausleihverwaltung", + "Gestione Recensioni": "Rezensionsverwaltung", + "Gestione Temi": "Theme-Verwaltung", + "Gestione Utenti": "Benutzerverwaltung", + "Gestione autori": "Autorenverwaltung", + "Gestione classificazione Dewey: seed e statistiche": "Dewey-Klassifikationsverwaltung: Seed und Statistiken", + "Gestione collezione": "Sammlungsverwaltung", + "Gestione prestiti": "Ausleihverwaltung", + "Gestione recensioni": "Rezensionsverwaltung", + "Gestione utenti": "Benutzerverwaltung", + "Gestisci": "Verwalten", + "Gestisci Eventi": "Veranstaltungen verwalten", + "Gestisci Restituzione": "Rückgabe verwalten", + "Gestisci gli aggiornamenti dell'applicazione": "Anwendungsupdates verwalten", + "Gestisci gli autori della collezione": "Autoren der Sammlung verwalten", + "Gestisci gli eventi della biblioteca: crea, modifica ed elimina eventi con immagini e descrizioni": "Bibliotheksveranstaltungen verwalten: Erstellen, bearbeiten und löschen Sie Veranstaltungen mit Bildern und Beschreibungen", + "Gestisci i dispositivi su cui hai effettuato l'accesso con 'Ricordami'. Puoi disconnetterti da singoli dispositivi o da tutti contemporaneamente.": "Verwalten Sie die Geräte, auf denen Sie sich mit 'Angemeldet bleiben' angemeldet haben. Sie können sich von einzelnen Geräten oder von allen gleichzeitig abmelden.", + "Gestisci i generi letterari": "Literarische Genres verwalten", + "Gestisci i prestiti attivi e storici": "Aktive und historische Ausleihen verwalten", + "Gestisci i tuoi prestiti, esplora il catalogo e scopri nuovi titoli.": "Verwalten Sie Ihre Ausleihen, erkunden Sie den Katalog und entdecken Sie neue Titel.", + "Gestisci i tuoi titoli preferiti, scopri quando tornano disponibili e accedi rapidamente ai dettagli del libro.": "Verwalten Sie Ihre Lieblingstitel, erfahren Sie, wann sie wieder verfügbar sind, und greifen Sie schnell auf die Buchdetails zu.", + "Gestisci il contenuto della pagina Chi Siamo con testo e immagine": "Verwalten Sie den Inhalt der Über-uns-Seite mit Text und Bild", + "Gestisci il contenuto della pagina Chi Siamo con testo e immagine personalizzati": "Verwalten Sie den Inhalt der Über-uns-Seite mit benutzerdefiniertem Text und Bild", + "Gestisci l'accesso all'API per cercare libri via EAN, ISBN e autore": "API-Zugriff zur Buchsuche über EAN, ISBN und Autor verwalten", + "Gestisci la collocazione fisica dei libri": "Physischen Standort der Bücher verwalten", + "Gestisci la visibilità delle categorie di cookie nel banner. I cookie essenziali sono sempre visibili e obbligatori.": "Verwalten Sie die Sichtbarkeit der Cookie-Kategorien im Banner. Essentielle Cookies sind immer sichtbar und erforderlich.", + "Gestisci le case editrici": "Verlage verwalten", + "Gestisci le classificazioni Dewey per italiano e inglese": "Dewey-Klassifikationen für Italienisch und Englisch verwalten", + "Gestisci le estensioni dell'applicazione": "Anwendungserweiterungen verwalten", + "Gestisci preferenze cookie": "Cookie-Einstellungen verwalten", + "Gestisci restituzione": "Rückgabe verwalten", + "Gestisci tutte": "Alle verwalten", + "Gestisci tutti": "Alle verwalten", + "Gestito da": "Verwaltet von", + "Giorni di preavviso per scadenza prestito": "Tage der Vorankündigung vor Ablauf der Ausleihe", + "Giorni per ritirare un prestito approvato": "Tage zur Abholung einer genehmigten Ausleihe", + "Già Installato": "Bereits installiert", + "Già presenti o senza ISBN:": "Bereits vorhanden oder ohne ISBN:", + "Già presenti:": "Bereits vorhanden:", + "Già recensito": "Bereits rezensiert", + "Gli amministratori non richiedono tessera e riceveranno un invito per impostare la password.": "Administratoren benötigen keinen Bibliotheksausweis und erhalten eine Einladung zur Passworteinrichtung.", + "Gli appuntamenti della biblioteca": "Bibliotheksveranstaltungen", + "Gli import CSV e LibraryThing verranno visualizzati qui": "CSV- und LibraryThing-Importe werden hier angezeigt", + "Gli import vengono tracciati automaticamente durante l'elaborazione": "Importe werden während der Verarbeitung automatisch nachverfolgt", + "Gli indici migliorano significativamente le performance delle query, specialmente su tabelle con molti record. Le installazioni recenti li includono già, ma le installazioni più vecchie potrebbero non averli.": "Indizes verbessern die Abfrageleistung erheblich, insbesondere bei Tabellen mit vielen Datensätzen. Neuere Installationen enthalten sie bereits, ältere Installationen möglicherweise nicht.", + "Gli script JavaScript sono divisi in 3 categorie in base alla tipologia di cookie:": "JavaScript-Skripte sind in 3 Kategorien nach Cookie-Typ unterteilt:", + "Gli utenti possono selezionare questa lingua": "Benutzer können diese Sprache auswählen", + "Globale": "Global", + "Google Books API": "Google Books API", + "Google Books API collegata": "Google Books API verbunden", + "Google Books Configurato": "Google Books konfiguriert", + "Google reCAPTCHA v3": "Google reCAPTCHA v3", + "Grazie per aver scelto Pinakes!": "Vielen Dank, dass Sie sich für Pinakes entschieden haben!", + "Gruppo": "Gruppe", + "Guida": "Anleitung", + "Guida alla Gestione Lingue": "Anleitung zur Sprachverwaltung", + "Guida alle Route": "Route-Anleitung", + "HTTP Strict Transport Security forza i browser a usare solo connessioni HTTPS per 1 anno (raccomandato per produzione con SSL valido).": "HTTP Strict Transport Security zwingt Browser, nur HTTPS-Verbindungen für 1 Jahr zu verwenden (empfohlen für Produktion mit gültigem SSL).", + "Hai aggiunto %s copie a \"%s\"": "Sie haben %s Exemplare zu \"%s\" hinzugefügt", + "Hai già un account?": "Haben Sie bereits ein Konto?", + "Hai già un prestito attivo o in attesa per questo libro": "Sie haben bereits eine aktive oder ausstehende Ausleihe für dieses Buch", + "Hai già una prenotazione attiva per questo libro.": "Sie haben bereits eine aktive Vormerkung für dieses Buch.", + "Hai già una richiesta di prestito in attesa per questo libro": "Sie haben bereits eine ausstehende Ausleihanfrage für dieses Buch", + "Hai libri che dovevano essere restituiti. Restituiscili al più presto per evitare sanzioni.": "Sie haben Bücher, die hätten zurückgegeben werden müssen. Bitte geben Sie diese schnellstmöglich zurück, um Mahngebühren zu vermeiden.", + "Hai modifiche non salvate che andranno perse. Continuare?": "Sie haben nicht gespeicherte Änderungen, die verloren gehen. Fortfahren?", + "Hai modifiche non salvate. I dati attuali verranno sostituiti.": "Sie haben nicht gespeicherte Änderungen. Die aktuellen Daten werden ersetzt.", + "Hai modifiche non salvate. Vuoi continuare e perderle?": "Sie haben nicht gespeicherte Änderungen. Möchten Sie fortfahren und diese verlieren?", + "Header HTTP (consigliato):": "HTTP-Header (empfohlen):", + "Heading 1": "Überschrift 1", + "Heading 2": "Überschrift 2", + "Heading 3": "Überschrift 3", + "Heading 4": "Überschrift 4", + "Heading 5": "Überschrift 5", + "Heading 6": "Überschrift 6", + "Hero - Testata principale": "Hero - Hauptbereich", + "Home": "Startseite", + "Homepage": "Startseite", + "Host": "Host", + "Host Database": "Datenbank-Host", + "I Cookie Essenziali sono sempre visibili e non possono essere disabilitati poiché necessari per il funzionamento del sito.": "Essentielle Cookies sind immer sichtbar und können nicht deaktiviert werden, da sie für den Betrieb der Website erforderlich sind.", + "I Miei Preferiti": "Meine Favoriten", + "I backup sono salvati in:": "Backups werden gespeichert in:", + "I campi con * sono obbligatori": "Felder mit * sind Pflichtfelder", + "I campi null indicano dati non disponibili": "Null-Felder zeigen nicht verfügbare Daten an", + "I contenitori fisici principali dove sono organizzati i libri": "Die physischen Hauptbehälter, in denen die Bücher organisiert sind", + "I dati attuali verranno sostituiti.": "Die aktuellen Daten werden ersetzt.", + "I dati devono essere un array non vuoto.": "Die Daten müssen ein nicht leeres Array sein.", + "I dati provengono dal file JSON, nessun seeding necessario.": "Die Daten stammen aus der JSON-Datei, kein Seeding erforderlich.", + "I doppioni (per ID, ISBN13 o EAN) vengono aggiornati senza modificare le copie fisiche": "Duplikate (nach ID, ISBN13 oder EAN) werden aktualisiert, ohne die physischen Exemplare zu ändern", + "I filtri correnti sono stati salvati nell'URL": "Die aktuellen Filter wurden in der URL gespeichert", + "I filtri vengono applicati automaticamente mentre digiti": "Filter werden automatisch beim Tippen angewendet", + "I libri degli altri autori verranno assegnati a questo": "Bücher der anderen Autoren werden diesem zugeordnet", + "I libri degli altri editori verranno assegnati a questo": "Bücher der anderen Verlage werden diesem zugeordnet", + "I livelli (ripiani) all'interno di ogni scaffale": "Die Ebenen (Regalböden) innerhalb jedes Bücherregals", + "I log vengono conservati per 90 giorni per conformità GDPR": "Protokolle werden 90 Tage lang gemäß DSGVO aufbewahrt", + "I miei preferiti": "Meine Favoriten", + "I tuoi preferiti": "Ihre Favoriten", + "ID": "ID", + "ID Editore": "Verlags-ID", + "ID Prestito": "Ausleih-ID", + "ID Prestito:": "Ausleih-ID:", + "ID autori non validi": "Ungültige Autoren-IDs", + "ID editori non validi": "Ungültige Verlags-IDs", + "ID genere non valido": "Ungültige Genre-ID", + "ID import mancante": "Fehlende Import-ID", + "ID libri non validi": "Ungültige Buch-IDs", + "ID libro non valido": "Ungültige Buch-ID", + "ID libro:": "Buch-ID:", + "ID prestito non valido": "Ungültige Ausleih-ID", + "ID sessione non valido": "Ungültige Sitzungs-ID", + "ID utente:": "Benutzer-ID:", + "ID:": "ID:", + "IN RITARDO": "ÜBERFÄLLIG", + "IP": "IP", + "IP Address": "IP-Adresse", + "ISBN": "ISBN", + "ISBN 10": "ISBN 10", + "ISBN 13": "ISBN 13", + "ISBN Mancante": "Fehlende ISBN", + "ISBN a 13 cifre (univoco)": "13-stellige ISBN (eindeutig)", + "ISBN non trovato nelle fonti disponibili.": "ISBN in den verfügbaren Quellen nicht gefunden.", + "ISBN non trovato. Fonti consultate: %s": "ISBN nicht gefunden. Abgefragte Quellen: %s", + "ISBN non valido. Specifica 10 o 13 cifre (eventualmente con X finale).": "Ungültige ISBN. Bitte geben Sie 10 oder 13 Ziffern an (X am Ende erlaubt).", + "ISBN o EAN...": "ISBN oder EAN...", + "ISBN-13:": "ISBN-13:", + "ISBN10": "ISBN10", + "ISBN10 Non Valido": "Ungültige ISBN10", + "ISBN10 deve contenere esattamente 10 caratteri (9 cifre + 1 cifra o X).": "ISBN10 muss genau 10 Zeichen enthalten (9 Ziffern + 1 Ziffer oder X).", + "ISBN10 o ISBN13": "ISBN10 oder ISBN13", + "ISBN13": "ISBN13", + "ISBN13 Non Valido": "Ungültige ISBN13", + "ISBN13 deve contenere esattamente 13 cifre.": "ISBN13 muss genau 13 Ziffern enthalten.", + "ISBN13: %s": "ISBN13: %s", + "ISBN:": "ISBN:", + "IT": "IT", + "Icona FontAwesome": "FontAwesome-Symbol", + "Identità": "Identität", + "Identità Applicazione": "Anwendungsidentität", + "Ieri": "Gestern", + "Ieri alle %s": "Gestern um %s", + "Il Mio Profilo": "Mein Profil", + "Il campo è obbligatorio": "Dieses Feld ist erforderlich", + "Il catalogo SBN (OPAC Nazionale Italiano) è già integrato e viene interrogato automaticamente durante l'importazione ISBN. Non è necessario aggiungerlo come server esterno.": "Der SBN-Katalog (Italienischer National-OPAC) ist bereits integriert und wird beim ISBN-Import automatisch abgefragt. Es ist nicht nötig, ihn als externen Server hinzuzufügen.", + "Il codice %s ha un formato non valido.": "Code %s hat ein ungültiges Format.", + "Il codice %s ha un livello non valido (deve essere 1-7).": "Code %s hat eine ungültige Ebene (muss 1-7 sein).", + "Il codice %s ha un nome non valido (minimo 2 caratteri).": "Code %s hat einen ungültigen Namen (mindestens 2 Zeichen).", + "Il codice %s non è un figlio valido di %s.": "Code %s ist kein gültiges Unterelement von %s.", + "Il codice %s è duplicato.": "Code %s ist doppelt vorhanden.", + "Il codice deve iniziare con le stesse tre cifre della classe principale": "Der Code muss mit denselben drei Ziffern der Hauptklasse beginnen", + "Il codice lingua non può essere modificato dopo la creazione.": "Der Sprachcode kann nach der Erstellung nicht mehr geändert werden.", + "Il codice lingua è obbligatorio (es. it_IT, en_US)": "Der Sprachcode ist erforderlich (z.B. it_IT, en_US)", + "Il codice scaffale \"%s\" esiste già. Usa un codice diverso.": "Der Regalcode \"%s\" existiert bereits. Verwenden Sie einen anderen Code.", + "Il codice tessera sarà generato automaticamente (formato: ADMIN-YYYYMMDD-XXX).": "Der Ausweiscode wird automatisch generiert (Format: ADMIN-JJJJMMTT-XXX).", + "Il codice verrà inserito in un tag": "Der Code wird in einem Tag eingefügt", + "Il codice verrà inserito in un tag ": "Der Code wird in einem -Tags ein", + "Il cron utilizza gli stessi permessi dell'utente di sistema che lo esegue": "Cron verwendet dieselben Berechtigungen wie der ausführende Systembenutzer", + "Il database '%s' non è vuoto. Deve essere un database vuoto.": "Die Datenbank '%s' ist nicht leer. Es muss eine leere Datenbank sein.", + "Il database deve essere vuoto.": "Die Datenbank muss leer sein.", + "Il database è coerente e non sono stati rilevati problemi.": "Die Datenbank ist konsistent und es wurden keine Probleme festgestellt.", + "Il database è già ottimizzato!": "Die Datenbank ist bereits optimiert!", + "Il database è stato installato, ma mancano le librerie PHP necessarie per eseguire l'applicazione.": "Die Datenbank wurde installiert, aber die zum Betrieb der Anwendung erforderlichen PHP-Bibliotheken fehlen.", + "Il download dovrebbe iniziare automaticamente": "Der Download sollte automatisch beginnen", + "Il file": "Die Datei", + "Il file JSON deve contenere coppie chiave-valore:": "Die JSON-Datei muss Schlüssel-Wert-Paare enthalten:", + "Il file JSON non è valido:": "Die JSON-Datei ist ungültig:", + "Il file deve avere estensione .csv": "Die Datei muss die Erweiterung .csv haben", + "Il file deve avere estensione .tsv, .csv o .txt": "Die Datei muss die Erweiterung .tsv, .csv oder .txt haben", + "Il file deve contenere coppie chiave (italiano) - valore (traduzione).": "Die Datei muss Schlüssel (Italienisch) - Wert (Übersetzung) Paare enthalten.", + "Il file deve essere un JSON valido": "Die Datei muss gültiges JSON sein", + "Il file generato si trova in": "Die generierte Datei befindet sich in", + "Il file generato si trova in public/sitemap.xml": "Die generierte Datei befindet sich unter public/sitemap.xml", + "Il file non sembra essere in formato LibraryThing. Colonne richieste: Book Id, Title, Primary Author, ISBNs": "Die Datei scheint nicht im LibraryThing-Format zu sein. Erforderliche Spalten: Book Id, Title, Primary Author, ISBNs", + "Il file supera la dimensione massima consentita": "Die Datei überschreitet die maximal zulässige Größe", + "Il file supera la dimensione massima di %s MB": "Die Datei überschreitet die maximale Größe von %s MB", + "Il formato scelto verrà utilizzato per generare i PDF delle etichette con codice a barre.": "Das gewählte Format wird zur Erstellung der Etiketten-PDFs mit Barcode verwendet.", + "Il formato selezionato verrà applicato a tutte le etichette generate dal sistema.": "Das ausgewählte Format wird auf alle vom System generierten Etiketten angewendet.", + "Il libro selezionato è già in prestito. Seleziona un altro libro.": "Das ausgewählte Buch ist bereits ausgeliehen. Wählen Sie ein anderes Buch aus.", + "Il libro viene consegnato subito all'utente. Se deselezionato, il prestito rimarrà in stato 'Da ritirare' fino alla conferma del ritiro.": "Das Buch wird dem Benutzer sofort übergeben. Wenn deaktiviert, bleibt die Ausleihe im Status 'Zur Abholung bereit', bis die Abholung bestätigt wird.", + "Il link di verifica email è scaduto o non valido. Registrati nuovamente per ricevere un nuovo link.": "Der E-Mail-Bestätigungslink ist abgelaufen oder ungültig. Bitte registrieren Sie sich erneut, um einen neuen Link zu erhalten.", + "Il link di verifica non è valido. Assicurati di aver copiato l'intero link dall'email.": "Der Bestätigungslink ist ungültig. Stellen Sie sicher, dass Sie den vollständigen Link aus der E-Mail kopiert haben.", + "Il logo verrà ridimensionato automaticamente": "Das Logo wird automatisch angepasst", + "Il mio profilo": "Mein Profil", + "Il nome del genere è obbligatorio.": "Der Genrename ist erforderlich.", + "Il nome dell'": "Der Name des/der", + "Il nome dell'API key è obbligatorio.": "Der Name des API-Schlüssels ist erforderlich.", + "Il nome dell'autore è obbligatorio.": "Der Autorenname ist erforderlich.", + "Il nome dell'editore è obbligatorio.": "Der Verlagsname ist erforderlich.", + "Il nome della rosa": "Der Name der Rose", + "Il nome inglese è obbligatorio": "Der englische Name ist erforderlich", + "Il nome inglese è obbligatorio (es. Italian, English)": "Der englische Name ist erforderlich (z.B. Italian, English)", + "Il nome nativo è obbligatorio": "Der Muttersprachenname ist erforderlich", + "Il nome nativo è obbligatorio (es. Italiano, English)": "Der Muttersprachenname ist erforderlich (z.B. Italiano, English)", + "Il nostro team è stato notificato e sta lavorando per risolvere il problema.": "Unser Team wurde benachrichtigt und arbeitet an der Lösung des Problems.", + "Il pacchetto contiene percorsi non validi.": "Das Paket enthält ungültige Pfade.", + "Il pacchetto non contiene file validi.": "Das Paket enthält keine gültigen Dateien.", + "Il plugin è attualmente installato e funzionante.": "Das Plugin ist derzeit installiert und funktioniert.", + "Il prestito è stato approvato con successo.": "Die Ausleihe wurde erfolgreich genehmigt.", + "Il prestito è stato rifiutato.": "Die Ausleihe wurde abgelehnt.", + "Il server ha restituito una risposta non valida. Controlla i log per dettagli.": "Der Server hat eine ungültige Antwort zurückgegeben. Überprüfen Sie die Protokolle für Details.", + "Il sistema creerà automaticamente libri, autori ed editori": "Das System erstellt automatisch Bücher, Autoren und Verlage", + "Il sistema di aggiornamento è pronto.": "Das Aktualisierungssystem ist bereit.", + "Il sistema include un cron job che gestisce automaticamente:": "Das System beinhaltet einen Cron-Job, der automatisch verwaltet:", + "Il sistema invierà automaticamente una email di promemoria agli utenti prima della scadenza del prestito. Il valore predefinito è 3 giorni.": "Das System sendet automatisch eine Erinnerungs-E-Mail an die Benutzer vor Ablauf der Ausleihe. Der Standardwert beträgt 3 Tage.", + "Il sito web deve essere un URL valido (es. https://www.esempio.com).": "Die Website muss eine gültige URL sein (z.B. https://www.beispiel.de).", + "Il sito web deve essere un URL valido.": "Die Website muss eine gültige URL sein.", + "Il termine per il ritiro è scaduto": "Die Abholfrist ist abgelaufen", + "Il termine per il ritiro è scaduto. Vuoi annullare questo prestito?": "Die Abholfrist ist abgelaufen. Möchten Sie diese Ausleihe stornieren?", + "Il titolo del libro è obbligatorio.": "Der Buchtitel ist erforderlich.", + "Il titolo principale della pagina": "Der Haupttitel der Seite", + "Il titolo verrà utilizzato anche per generare l'URL della pagina": "Der Titel wird auch zur Generierung der Seiten-URL verwendet", + "Il titolo è obbligatorio.": "Der Titel ist erforderlich.", + "Il tuo account è in attesa di approvazione. Riceverai un'email quando sarà attivato": "Ihr Konto wartet auf Freigabe. Sie erhalten eine E-Mail, wenn es aktiviert wird", + "Il tuo account è stato sospeso. Contatta l'amministratore per maggiori informazioni": "Ihr Konto wurde gesperrt. Wenden Sie sich an den Administrator für weitere Informationen", + "Il tuo browser non supporta la riproduzione audio.": "Ihr Browser unterstützt keine Audiowiedergabe.", + "Il tuo sistema Pinakes per catalogare, gestire e condividere la tua collezione libraria.": "Ihr Pinakes-System zum Katalogisieren, Verwalten und Teilen Ihrer Buchsammlung.", + "Illustratore": "Illustrator", + "Curatore": "Kurator", + "Nome del curatore dell'opera (se applicabile)": "Name des Kurators (falls zutreffend)", + "Immagine": "Bild", + "Immagine Caricata!": "Bild hochgeladen!", + "Immagine Open Graph": "Open-Graph-Bild", + "Immagine Twitter": "Twitter-Bild", + "Immagine attuale": "Aktuelles Bild", + "Immagine di copertina della pagina (opzionale)": "Seitentitelbild (optional)", + "Immagine di sfondo Hero": "Hero-Hintergrundbild", + "Immagine in Evidenza": "Hervorgehobenes Bild", + "Immagine mostrata quando condividi la pagina su social media (Facebook, Twitter, LinkedIn). Se vuoto, usa l'immagine hero di sfondo. Dimensioni consigliate: 1200x630px (rapporto 1.91:1).": "Bild, das beim Teilen der Seite in sozialen Medien angezeigt wird (Facebook, Twitter, LinkedIn). Wenn leer, wird das Hero-Hintergrundbild verwendet. Empfohlene Größe: 1200x630px (Verhältnis 1,91:1).", + "Immagine mostrata quando condividi su social. Dimensioni consigliate: 1200x630px (rapporto 1.91:1). Se vuoto, usa l'immagine hero di sfondo.": "Bild, das beim Teilen in sozialen Medien angezeigt wird. Empfohlene Größe: 1200x630px (Verhältnis 1,91:1). Wenn leer, wird das Hero-Hintergrundbild verwendet.", + "Immagine non valida": "Ungültiges Bild", + "Immagine per Twitter/X. Dimensioni consigliate: 1200x675px o 1200x1200px. Se vuoto, usa l'immagine Open Graph.": "Bild für Twitter/X. Empfohlene Abmessungen: 1200x675px oder 1200x1200px. Wenn leer, wird das Open Graph-Bild verwendet.", + "Immagini JPG, PNG o WebP (max 5MB)": "JPG-, PNG- oder WebP-Bilder (max. 5 MB)", + "Import": "Import", + "Import CSV": "CSV-Import", + "Import CSV Standard": "Standard-CSV-Import", + "Import LibraryThing": "LibraryThing-Import", + "Import Libri da CSV": "Bücher aus CSV importieren", + "Import Massivo Libri": "Massenbuchimport", + "Import completato: %d libri nuovi, %d libri aggiornati, %d autori creati, %d editori creati": "Import abgeschlossen: %d neue Bücher, %d aktualisierte Bücher, %d Autoren erstellt, %d Verlage erstellt", + "Import da LibraryThing": "Import aus LibraryThing", + "Import dati iniziali...": "Importiere Anfangsdaten...", + "Import in corso...": "Import läuft...", + "Import massivo da CSV": "Massenimport aus CSV", + "Import schema in corso...": "Schema wird importiert...", + "Import trigger...": "Trigger werden importiert...", + "Importa": "Importieren", + "Importa Dati": "Daten importieren", + "Importa Libri": "Bücher importieren", + "Importa da ISBN": "Aus ISBN importieren", + "Importa i tuoi libri esportati da LibraryThing.com (formato TSV)": "Importieren Sie Ihre von LibraryThing.com exportierten Bücher (TSV-Format)", + "Importante:": "Wichtig:", + "Importati": "Importiert", + "Importato": "Importiert", + "Importato con successo. %d voci totali.": "Erfolgreich importiert. %d Einträge insgesamt.", + "Importazione completata con successo!": "Import erfolgreich abgeschlossen!", + "Importazione in corso...": "Import läuft...", + "Importazione libro": "Buch wird importiert", + "Importazione...": "Importiere...", + "Impossibile acquisire il lock. Riprova tra qualche secondo.": "Sperre kann nicht erworben werden. Bitte versuchen Sie es in einigen Sekunden erneut.", + "Impossibile aggiornare l'utente. Riprova più tardi.": "Benutzer kann nicht aktualisiert werden. Bitte versuchen Sie es später erneut.", + "Impossibile aggiornare la chiave Google Books.": "Der Google-Books-Schlüssel konnte nicht aktualisiert werden.", + "Impossibile aggiornare la posizione automatica": "Die automatische Position konnte nicht aktualisiert werden", + "Impossibile aggiornare le copie.": "Die Exemplare konnten nicht aktualisiert werden.", + "Impossibile approvare la recensione": "Die Rezension konnte nicht genehmigt werden", + "Impossibile aprire file di backup per scrittura": "Backup-Datei konnte nicht zum Schreiben geöffnet werden", + "Impossibile aprire il file": "Datei kann nicht geöffnet werden", + "Impossibile aprire il file CSV": "Die CSV-Datei konnte nicht geöffnet werden", + "Impossibile aprire il file ZIP.": "Die ZIP-Datei konnte nicht geöffnet werden.", + "Impossibile archiviare il messaggio.": "Die Nachricht konnte nicht archiviert werden.", + "Impossibile caricare configurazione database": "Datenbankkonfiguration kann nicht geladen werden", + "Impossibile caricare gli editori. Controlla la console per i dettagli.": "Verlage konnten nicht geladen werden. Überprüfen Sie die Konsole für Details.", + "Impossibile caricare i libri. Controlla la console per i dettagli.": "Bücher konnten nicht geladen werden. Überprüfen Sie die Konsole für Details.", + "Impossibile completare l'operazione. Riprova più tardi.": "Der Vorgang konnte nicht abgeschlossen werden. Bitte versuchen Sie es später erneut.", + "Impossibile comunicare con il server. Riprova più tardi.": "Kommunikation mit dem Server nicht möglich. Bitte versuchen Sie es später erneut.", + "Impossibile configurare autocomplete: elementi mancanti": "Autovervollständigung konnte nicht konfiguriert werden: fehlende Elemente", + "Impossibile connettersi a GitHub": "Verbindung zu GitHub konnte nicht hergestellt werden", + "Impossibile contattare il servizio di scraping. Riprova più tardi.": "Der Scraping-Dienst konnte nicht kontaktiert werden. Bitte versuchen Sie es später erneut.", + "Impossibile creare directory di backup": "Backup-Verzeichnis konnte nicht erstellt werden", + "Impossibile creare directory di backup applicazione": "Anwendungs-Backup-Verzeichnis konnte nicht erstellt werden", + "Impossibile creare directory di backup: %s": "Backup-Verzeichnis konnte nicht erstellt werden: %s", + "Impossibile creare directory temporanea": "Temporäres Verzeichnis konnte nicht erstellt werden", + "Impossibile creare directory: %s": "Verzeichnis konnte nicht erstellt werden: %s", + "Impossibile creare il file .env. Verifica i permessi.": "Die .env-Datei konnte nicht erstellt werden. Überprüfen Sie die Berechtigungen.", + "Impossibile creare il file di lock per l'aggiornamento": "Aktualisierungs-Lock-Datei konnte nicht erstellt werden", + "Impossibile creare la cartella di upload.": "Das Upload-Verzeichnis konnte nicht erstellt werden.", + "Impossibile creare la directory del plugin.": "Das Plugin-Verzeichnis konnte nicht erstellt werden.", + "Impossibile creare la mensola. Riprova più tardi.": "Regal kann nicht erstellt werden. Bitte versuchen Sie es später erneut.", + "Impossibile creare la prenotazione": "Die Vormerkung konnte nicht erstellt werden", + "Impossibile creare la struttura del plugin.": "Die Plugin-Struktur konnte nicht erstellt werden.", + "Impossibile creare lo scaffale. Riprova più tardi.": "Schrank kann nicht erstellt werden. Bitte versuchen Sie es später erneut.", + "Impossibile creare lock file": "Lock-Datei konnte nicht erstellt werden", + "Impossibile determinare l'ID del plugin Open Library.": "Die ID des Open Library-Plugins konnte nicht ermittelt werden.", + "Impossibile eliminare il backup": "Backup konnte nicht gelöscht werden", + "Impossibile eliminare il file di manutenzione": "Die Wartungsdatei konnte nicht gelöscht werden", + "Impossibile eliminare il libro: ci sono prestiti o prenotazioni attive. Termina prima i prestiti/prenotazioni.": "Buch kann nicht gelöscht werden: Es gibt aktive Ausleihen oder Vormerkungen. Beenden Sie zuerst die Ausleihen/Vormerkungen.", + "Impossibile eliminare il messaggio.": "Die Nachricht konnte nicht gelöscht werden.", + "Impossibile eliminare l'autore: sono presenti libri associati.": "Der Autor kann nicht gelöscht werden: Es sind zugehörige Bücher vorhanden.", + "Impossibile eliminare l'editore: sono presenti libri associati.": "Der Verlag kann nicht gelöscht werden: Es sind zugehörige Bücher vorhanden.", + "Impossibile eliminare l'installer:": "Der Installer kann nicht gelöscht werden:", + "Impossibile eliminare l'installer: devi prima installare le dipendenze PHP con": "Der Installer kann nicht gelöscht werden: Sie müssen zuerst die PHP-Abhängigkeiten installieren mit", + "Impossibile eliminare la notifica.": "Die Benachrichtigung konnte nicht gelöscht werden.", + "Impossibile eliminare la recensione": "Rezension kann nicht gelöscht werden", + "Impossibile eliminare una copia attualmente in prestito.": "Ein derzeit ausgeliehenes Exemplar kann nicht gelöscht werden.", + "Impossibile eliminare: alcuni editori hanno libri associati": "Löschen nicht möglich: Einige Verlage haben zugeordnete Bücher", + "Impossibile eliminare: alcuni libri hanno prestiti attivi": "Löschen nicht möglich: Einige Bücher haben aktive Ausleihen", + "Impossibile eliminare: la mensola contiene libri": "Löschen nicht möglich: Das Regal enthält Bücher", + "Impossibile eliminare: lo scaffale contiene libri": "Löschen nicht möglich: Der Schrank enthält Bücher", + "Impossibile eliminare: lo scaffale contiene mensole": "Löschen nicht möglich: Der Schrank enthält Regale", + "Impossibile generare la risposta JSON.": "Die JSON-Antwort konnte nicht generiert werden.", + "Impossibile importare i dati per questo ISBN.": "Die Daten für diese ISBN konnten nicht importiert werden.", + "Impossibile inizializzare Uppy per i contenuti digitali.": "Uppy für digitale Inhalte konnte nicht initialisiert werden.", + "Impossibile inviare la recensione": "Die Rezension konnte nicht gesendet werden", + "Impossibile inviare la recensione.": "Die Rezension konnte nicht gesendet werden.", + "Impossibile leggere il file .env": ".env-Datei kann nicht gelesen werden", + "Impossibile leggere il file caricato": "Die hochgeladene Datei konnte nicht gelesen werden", + "Impossibile leggere il file di backup": "Backup-Datei konnte nicht gelesen werden", + "Impossibile leggere il file di log": "Protokolldatei kann nicht gelesen werden", + "Impossibile modificare una copia attualmente in prestito. Prima termina il prestito o imposta lo stato su \"Disponibile\" per chiuderlo automaticamente.": "Ein derzeit ausgeliehenes Exemplar kann nicht bearbeitet werden. Beenden Sie zuerst die Ausleihe oder setzen Sie den Status auf \"Verfügbar\", um sie automatisch zu schließen.", + "Impossibile notificare utente copia non disponibile": "Benutzer kann nicht über nicht verfügbares Exemplar benachrichtigt werden", + "Impossibile notificare utente: dati mancanti": "Benutzer kann nicht benachrichtigt werden: fehlende Daten", + "Impossibile processare l'immagine.": "Das Bild konnte nicht verarbeitet werden.", + "Impossibile recuperare i dati degli autori": "Die Autorendaten konnten nicht abgerufen werden", + "Impossibile recuperare i dati degli editori": "Die Verlagsdaten konnten nicht abgerufen werden", + "Impossibile recuperare informazioni sulla release": "Release-Informationen konnten nicht abgerufen werden", + "Impossibile revocare la sessione": "Sitzung kann nicht widerrufen werden", + "Impossibile riaprire il file ZIP": "ZIP-Datei kann nicht erneut geöffnet werden", + "Impossibile ricalcolare la disponibilità del libro.": "Buchverfügbarkeit kann nicht neu berechnet werden.", + "Impossibile ridurre le copie a %d. Ci sono %d copie non disponibili (in prestito, perse o danneggiate). Il numero minimo di copie totali è %d.": "Die Exemplare können nicht auf %d reduziert werden. Es gibt %d nicht verfügbare Exemplare (ausgeliehen, verloren oder beschädigt). Die Mindestanzahl der Gesamtexemplare beträgt %d.", + "Impossibile rifiutare la recensione": "Die Rezension konnte nicht abgelehnt werden", + "Impossibile rigenerare la sitemap: %s": "Die Sitemap konnte nicht regeneriert werden: %s", + "Impossibile salvare il file di aggiornamento": "Aktualisierungsdatei konnte nicht gespeichert werden", + "Impossibile salvare l'utente. Riprova più tardi.": "Der Benutzer konnte nicht gespeichert werden. Bitte versuchen Sie es später erneut.", + "Impossibile salvare le impostazioni.": "Einstellungen können nicht gespeichert werden.", + "Impossibile scaricare (libro senza ISBN):": "Download nicht möglich (Buch ohne ISBN):", + "Impossibile scrivere file di backup": "Backup-Datei konnte nicht geschrieben werden", + "Impossibile scrivere nel file .env": ".env-Datei kann nicht beschrieben werden", + "Impossibile segnare come letta la notifica.": "Die Benachrichtigung konnte nicht als gelesen markiert werden.", + "Impossibile segnare tutte le notifiche come lette.": "Alle Benachrichtigungen konnten nicht als gelesen markiert werden.", + "Impossibile segnare tutti i messaggi come letti.": "Alle Nachrichten konnten nicht als gelesen markiert werden.", + "Imposta come Predefinita": "Als Standard festlegen", + "Imposta come attiva o predefinita": "Als aktiv oder Standard festlegen", + "Imposta come lingua predefinita per nuovi utenti": "Als Standardsprache für neue Benutzer festlegen", + "Imposta il nome mostrato nel backend e il logo utilizzato nel layout.": "Legen Sie den im Backend angezeigten Namen und das im Layout verwendete Logo fest.", + "Imposta nel file .env: APP_CANONICAL_URL=%s": "In der .env-Datei setzen: APP_CANONICAL_URL=%s", + "Imposta password": "Passwort festlegen", + "Impostare questa lingua come predefinita?\n\nQuesta diventerà la lingua dell'intera applicazione per tutti gli utenti.": "Diese Sprache als Standard festlegen?\n\nDiese wird zur Sprache der gesamten Anwendung für alle Benutzer.", + "Impostare questa lingua come predefinita?\\n\\nQuesta diventerà la lingua dell'intera applicazione per tutti gli utenti.": "Diese Sprache als Standard festlegen?\\n\\nDiese wird zur Sprache der gesamten Anwendung für alle Benutzer.", + "Impostazioni": "Einstellungen", + "Impostazioni API Book Scraper salvate correttamente.": "Book Scraper API-Einstellungen erfolgreich gespeichert.", + "Impostazioni Applicazione": "Anwendungseinstellungen", + "Impostazioni Date": "Datumseinstellungen", + "Impostazioni Discogs salvate correttamente.": "Discogs-Einstellungen erfolgreich gespeichert.", + "Impostazioni SEO": "SEO-Einstellungen", + "Impostazioni Z39.50 salvate correttamente.": "Z39.50-Einstellungen erfolgreich gespeichert.", + "Impostazioni avanzate aggiornate correttamente.": "Erweiterte Einstellungen erfolgreich aktualisiert.", + "Impostazioni contatti aggiornate correttamente.": "Kontakteinstellungen erfolgreich aktualisiert.", + "Impostazioni email aggiornate correttamente.": "E-Mail-Einstellungen erfolgreich aktualisiert.", + "Impostazioni generali aggiornate correttamente.": "Allgemeine Einstellungen erfolgreich aktualisiert.", + "Impostazioni privacy aggiornate correttamente.": "Datenschutzeinstellungen erfolgreich aktualisiert.", + "Impostazioni salvate.": "Einstellungen gespeichert.", + "In Attesa": "Ausstehend", + "In Attesa di Approvazione": "Genehmigung ausstehend", + "In Corso": "In Bearbeitung", + "In Riparazione": "In Reparatur", + "In Ritardo": "Überfällig", + "In attesa": "Ausstehend", + "In attesa di approvazione": "Genehmigung ausstehend", + "In corso": "In Bearbeitung", + "In corso di restituzione": "Rückgabe ausstehend", + "In corso...": "In Bearbeitung...", + "In manutenzione": "In Wartung", + "In prestito": "Ausgeliehen", + "In prestito fino al": "Ausgeliehen bis", + "In questa pagina trovi tutti gli eventi, gli incontri e i laboratori organizzati dalla biblioteca.": "Auf dieser Seite finden Sie alle Veranstaltungen, Treffen und Workshops, die von der Bibliothek organisiert werden.", + "In ritardo": "Überfällig", + "In scadenza": "Bald fällig", + "Inattivo": "Inaktiv", + "Incompleto": "Unvollständig", + "Indice %s creato su %s": "Index %s erstellt auf %s", + "Indice ISBN": "ISBN-Index", + "Indici creati con successo": "Indizes erfolgreich erstellt", + "Indici creati:": "Erstellte Indizes:", + "Indici di ottimizzazione creati OK": "Optimierungsindizes erfolgreich erstellt", + "Indietro": "Zurück", + "Indirizzo": "Adresse", + "Indirizzo completo": "Vollständige Adresse", + "Indirizzo completo *": "Vollständige Adresse *", + "Indirizzo:": "Adresse:", + "Info": "Info", + "Info HSTS:": "HSTS-Info:", + "Informazione": "Information", + "Informazioni": "Informationen", + "Informazioni Base": "Basisinformationen", + "Informazioni Evento": "Veranstaltungsinformationen", + "Informazioni Importanti": "Wichtige Informationen", + "Informazioni Libro": "Buchinformationen", + "Informazioni Personali": "Persönliche Informationen", + "Informazioni Prestito": "Ausleihinformationen", + "Informazioni Report": "Berichtsinformationen", + "Informazioni di Contatto": "Kontaktinformationen", + "Informazioni di contatto": "Kontaktinformationen", + "Informazioni editore": "Verlagsinformationen", + "Informazioni generali": "Allgemeine Informationen", + "Informazioni personali": "Persönliche Informationen", + "Informazioni sullo Storico Import": "Informationen zur Importhistorie", + "Informazioni tessera": "Ausweisinformationen", + "Informazioni utili per il personale": "Nützliche Informationen für das Personal", + "Inizia Installazione": "Installation starten", + "Inizia ad aggiungere libri al catalogo": "Beginnen Sie, Bücher zum Katalog hinzuzufügen", + "Inizia aggiungendo il primo libro alla collezione": "Beginnen Sie, indem Sie das erste Buch zur Sammlung hinzufügen", + "Inizia aggiungendo la prima lingua.": "Beginnen Sie, indem Sie die erste Sprache hinzufügen.", + "Inizia caricando il tuo primo plugin": "Beginnen Sie, indem Sie Ihr erstes Plugin hochladen", + "Inizia creando il primo genere letterario": "Beginnen Sie, indem Sie das erste literarische Genre erstellen", + "Inizia la Tua Avventura Letteraria": "Starten Sie Ihr literarisches Abenteuer", + "Inizializzazione...": "Initialisierung...", + "Inizio": "Beginn", + "Inizio installazione...": "Installation wird gestartet...", + "Inizio:": "Beginn:", + "Inserimento Manuale Dewey": "Manuelle Dewey-Eingabe", + "Inserisci $1": "$1 eingeben", + "Inserisci codice locale (es. es_ES per Spagnolo)": "Gebietsschema-Code eingeben (z.B. es_ES für Spanisch)", + "Inserisci il codice Dewey completo (supporta fino a 4 decimali)": "Geben Sie den vollständigen Dewey-Code ein (unterstützt bis zu 4 Dezimalstellen)", + "Inserisci il motivo del rifiuto...": "Geben Sie den Ablehnungsgrund ein...", + "Inserisci il titolo": "Titel eingeben", + "Inserisci la data di inizio (YYYY-MM-DD)": "Startdatum eingeben (JJJJ-MM-TT)", + "Inserisci la tua email per ricevere il link di reset.": "Geben Sie Ihre E-Mail-Adresse ein, um den Link zum Zurücksetzen zu erhalten.", + "Inserisci la tua email per ricevere un link di reset": "Geben Sie Ihre E-Mail-Adresse ein, um einen Link zum Zurücksetzen zu erhalten", + "Inserisci la tua nuova password": "Geben Sie Ihr neues Passwort ein", + "Inserisci le credenziali del tuo database MySQL. Assicurati che il database sia già stato creato e sia vuoto.": "Geben Sie Ihre MySQL-Datenbank-Zugangsdaten ein. Stellen Sie sicher, dass die Datenbank bereits erstellt wurde und leer ist.", + "Inserisci le informazioni del nuovo evento": "Geben Sie die Informationen für die neue Veranstaltung ein", + "Inserisci parole chiave separate da virgole per facilitare la ricerca": "Geben Sie durch Kommas getrennte Schlüsselwörter ein, um die Suche zu erleichtern", + "Inserisci qualsiasi codice Dewey (anche se non presente nell'elenco)": "Geben Sie einen beliebigen Dewey-Code ein (auch wenn er nicht in der Liste enthalten ist)", + "Inserisci solo script che NON tracciano utenti. Per analytics/marketing usa le sezioni dedicate.": "Fügen Sie nur Skripte ein, die Benutzer NICHT verfolgen. Für Analytics/Marketing verwenden Sie die entsprechenden Bereiche.", + "Inserisci un codice Dewey": "Geben Sie einen Dewey-Code ein", + "Inserisci un codice ISBN per continuare.": "Geben Sie einen ISBN-Code ein, um fortzufahren.", + "Inserisci un numero valido di copie": "Geben Sie eine gültige Anzahl von Exemplaren ein", + "Inserisci una breve biografia dell'autore...": "Geben Sie eine kurze Biografie des Autors ein...", + "Instagram": "Instagram", + "Installa": "Installieren", + "Installa Plugin": "Plugin installieren", + "Installato": "Installiert", + "Installato:": "Installiert:", + "Installazione": "Installation", + "Installazione Completata": "Installation abgeschlossen", + "Installazione Completata!": "Installation abgeschlossen!", + "Installazione Cron Job": "Cron-Job-Installation", + "Installazione Database": "Datenbankinstallation", + "Installazione Guidata": "Geführte Installation", + "Installazione completata": "Installation abgeschlossen", + "Installazione database non completa. Tabelle mancanti: %s": "Datenbankinstallation unvollständig. Fehlende Tabellen: %s", + "Installazione database non completa. Trovate %d tabelle, attese %d": "Datenbankinstallation unvollständig. %d Tabellen gefunden, %d erwartet", + "Installazione delle tabelle del database e configurazione iniziale...": "Datenbanktabellen und Erstkonfiguration werden installiert...", + "Installazione fallita": "Installation fehlgeschlagen", + "Installazione file": "Dateien werden installiert", + "Installazione in corso...": "Installation läuft...", + "Installazione italiana usa": "Italienische Installation verwendet", + "Installazione plugin Open Library...": "Open Library Plugin wird installiert...", + "Installer Pinakes": "Pinakes Installer", + "Installer eliminato con successo!": "Installer erfolgreich gelöscht!", + "Insufficiente": "Unzureichend", + "Integrità dati": "Datenintegrität", + "Internal server error": "Interner Serverfehler", + "Intestazione": "Kopfzeile", + "Intestazione sezione": "Abschnittsüberschrift", + "Inventario": "Inventar", + "Invia Email": "E-Mail senden", + "Invia Richiesta": "Anfrage senden", + "Invia link": "Link senden", + "Invia link di reset": "Zurücksetzungslink senden", + "Invia messaggio": "Nachricht senden", + "Invia recensione": "Rezension einreichen", + "Inviaci un messaggio": "Senden Sie uns eine Nachricht", + "Inviata agli amministratori quando viene ricevuta una nuova recensione da approvare.": "Wird an Administratoren gesendet, wenn eine neue Rezension zur Genehmigung eingeht.", + "Inviata agli utenti quando un libro nella wishlist torna disponibile. Il libro rimane nella wishlist ma non riceverà altre notifiche per lo stesso libro.": "Wird an Benutzer gesendet, wenn ein Buch auf ihrer Wunschliste wieder verfügbar wird. Das Buch bleibt auf der Wunschliste, es werden jedoch keine weiteren Benachrichtigungen für dasselbe Buch gesendet.", + "Inviata agli utenti quando un libro nella wishlist torna disponibile. Il libro viene automaticamente rimosso dalla wishlist dopo l'invio della notifica per evitare duplicati.": "Wird an Benutzer gesendet, wenn ein Buch auf ihrer Wunschliste wieder verfügbar wird. Das Buch wird nach dem Versand der Benachrichtigung automatisch von der Wunschliste entfernt, um Duplikate zu vermeiden.", + "Inviata ai nuovi utenti per impostare la password del loro account.": "Wird an neue Benutzer gesendet, um das Passwort für ihr Konto festzulegen.", + "Inviata all'utente al termine della registrazione per confermare la ricezione e l'attesa di approvazione.": "Wird nach der Registrierung an den Benutzer gesendet, um den Eingang zu bestätigen und auf die Genehmigung hinzuweisen.", + "Inviata all'utente quando un amministratore approva l'account.": "Wird an den Benutzer gesendet, wenn ein Administrator das Konto genehmigt.", + "Inviata all'utente quando un amministratore approva una richiesta di prestito.": "Wird an den Benutzer gesendet, wenn ein Administrator eine Ausleihanfrage genehmigt.", + "Inviata all'utente quando un amministratore rifiuta una richiesta di prestito.": "Wird an den Benutzer gesendet, wenn ein Administrator eine Ausleihanfrage ablehnt.", + "Inviata quando il tempo per ritirare un libro è scaduto e il prestito è stato annullato.": "Wird gesendet, wenn die Abholfrist abgelaufen ist und die Ausleihe storniert wurde.", + "Inviata quando un libro prenotato diventa disponibile e viene convertito in prestito pendente.": "Wird gesendet, wenn ein vorgemerktes Buch verfügbar wird und in eine ausstehende Ausleihe umgewandelt wird.", + "Inviata quando un prestito è stato approvato e il libro è pronto per il ritiro.": "Wird gesendet, wenn eine Ausleihe genehmigt wurde und das Buch zur Abholung bereit ist.", + "Inviata quando un ritiro viene annullato dall'amministratore.": "Wird gesendet, wenn eine Abholung vom Administrator storniert wird.", + "Inviata quando un utente viene invitato come amministratore.": "Wird gesendet, wenn ein Benutzer als Administrator eingeladen wird.", + "Inviato": "Gesendet", + "Invio in corso...": "Wird gesendet...", + "Invio notifica prenotazione fallito": "Senden der Vormerkungsbenachrichtigung fehlgeschlagen", + "Invita gli utenti a registrarsi": "Benutzer zur Registrierung einladen", + "Invito amministratore": "Administratoreinladung", + "Italiano (IT)": "Italienisch (IT)", + "JPG, PNG, GIF, WEBP - Max 5MB": "JPG, PNG, GIF, WEBP – Max. 5 MB", + "JSON non valido.": "Ungültiges JSON.", + "JavaScript Analitici": "Analyse-JavaScript", + "JavaScript Essenziali": "Essentielles JavaScript", + "JavaScript Marketing": "Marketing-JavaScript", + "L'API key può essere fornita in due modi:": "Der API-Schlüssel kann auf zwei Arten bereitgestellt werden:", + "L'API è limitata a 50 risultati per richiesta": "Die API ist auf 50 Ergebnisse pro Anfrage begrenzt", + "L'ID primario deve essere presente nella lista degli autori da unire": "Die primäre ID muss in der Liste der zusammenzuführenden Autoren vorhanden sein", + "L'ID primario deve essere presente nella lista degli editori da unire": "Die primäre ID muss in der Liste der zusammenzuführenden Verlage vorhanden sein", + "L'URL canonico non è valido. Deve iniziare con http:// o https://": "Die kanonische URL ist ungültig. Sie muss mit http:// oder https:// beginnen", + "L'URL del calendario è stato copiato negli appunti.": "Die Kalender-URL wurde in die Zwischenablage kopiert.", + "L'URL fornito non è valido": "Die angegebene URL ist ungültig", + "L'accesso alla cartella installer è automaticamente bloccato dopo l'installazione.": "Der Zugriff auf den Installer-Ordner wird nach der Installation automatisch gesperrt.", + "L'applicazione NON può funzionare senza questo passaggio!": "Die Anwendung kann NICHT ohne diesen Schritt funktionieren!", + "L'applicazione risulta correttamente configurata.": "Die Anwendung ist korrekt konfiguriert.", + "L'applicazione è stata installata correttamente e tutte le verifiche sono andate a buon fine.": "Die Anwendung wurde erfolgreich installiert und alle Prüfungen wurden bestanden.", + "L'email di attivazione è stata inviata. L'utente potrà verificare il proprio account cliccando il link ricevuto (valido 7 giorni).": "Die Aktivierungs-E-Mail wurde gesendet. Der Benutzer kann sein Konto durch Klicken auf den erhaltenen Link verifizieren (7 Tage gültig).", + "L'immagine verrà scaricata al salvataggio": "Das Bild wird beim Speichern heruntergeladen", + "L'immagine è troppo grande. Max 5MB.": "Das Bild ist zu groß. Max. 5 MB.", + "L'indirizzo email deve essere valido.": "Die E-Mail-Adresse muss gültig sein.", + "L'installazione non è completa o valida.": "Die Installation ist nicht vollständig oder gültig.", + "L'installazione è stata completata correttamente e tutte le verifiche sono andate a buon fine.": "Die Installation wurde erfolgreich abgeschlossen und alle Überprüfungen waren erfolgreich.", + "L'installazione è stata completata senza errori.": "Die Installation wurde fehlerfrei abgeschlossen.", + "L'ora dell'evento deve essere nel formato corretto (HH:MM).": "Die Uhrzeit des Ereignisses muss im korrekten Format vorliegen (HH:MM).", + "L'ora deve essere nel formato corretto (HH:MM).": "Die Uhrzeit muss im korrekten Format vorliegen (HH:MM).", + "L'ultima sezione che invita all'azione": "Der abschließende Call-to-Action-Bereich", + "L'utente del database non ha i permessi per creare i TRIGGER. L'installazione è stata completata, ma per garantire la piena integrità dei dati è necessario installarli manualmente.": "Der Datenbankbenutzer hat keine Berechtigung zum Erstellen von TRIGGERN. Die Installation wurde abgeschlossen, aber um die vollständige Datenintegrität zu gewährleisten, müssen diese manuell installiert werden.", + "L'utente ha ritirato il libro?": "Hat der Benutzer das Buch abgeholt?", + "L'utente non è in stato sospeso. Solo gli utenti sospesi richiedono approvazione.": "Der Benutzer befindet sich nicht im gesperrten Status. Nur gesperrte Benutzer erfordern eine Genehmigung.", + "L'utente riceverà un'email con link di verifica (valido 7 giorni) e potrà attivare autonomamente l'account.": "Der Benutzer erhält eine E-Mail mit Bestätigungslink (7 Tage gültig) und kann das Konto selbstständig aktivieren.", + "L'utente riceverà una notifica via email della prenotazione creata": "Der Benutzer erhält eine E-Mail-Benachrichtigung über die erstellte Vormerkung", + "L'utente richiesto non esiste nel database.": "Der angeforderte Benutzer existiert nicht in der Datenbank.", + "L'utente sarà attivato immediatamente e riceverà un'email di benvenuto. Potrà accedere subito.": "Der Benutzer wird sofort aktiviert und erhält eine Willkommens-E-Mail. Er kann sich sofort anmelden.", + "L'utente è stato attivato e può già effettuare il login. È stata inviata un'email di benvenuto.": "Der Benutzer wurde aktiviert und kann sich bereits anmelden. Eine Willkommens-E-Mail wurde gesendet.", + "L'utente è stato eliminato.": "Der Benutzer wurde gelöscht.", + "La Tua Biblioteca Digitale": "Ihre digitale Bibliothek", + "La cartella vendor/ esiste e contiene le librerie necessarie.": "Der Ordner vendor/ existiert und enthält die erforderlichen Bibliotheken.", + "La classificazione Dewey è utilizzata per organizzare i libri per argomento secondo standard internazionali": "Die Dewey-Klassifikation wird verwendet, um Bücher nach Thema gemäß internationalen Standards zu organisieren", + "La collocazione può essere assegnata automaticamente o inserita manualmente durante la creazione/modifica del libro": "Der Standort kann automatisch zugewiesen oder bei der Erstellung/Bearbeitung des Buches manuell eingegeben werden", + "La collocazione è l'indirizzo fisico che identifica dove si trova un libro nella biblioteca.": "Der Standort ist die physische Adresse, die angibt, wo sich ein Buch in der Bibliothek befindet.", + "La copertina verrà rimossa al salvataggio del libro": "Das Cover wird beim Speichern des Buches entfernt", + "La copia assegnata è stata segnalata come persa o danneggiata": "Das zugewiesene Exemplar wurde als verloren oder beschädigt gemeldet", + "La copia non è più disponibile": "Das Exemplar ist nicht mehr verfügbar", + "La cronologia degli aggiornamenti apparirà qui": "Der Aktualisierungsverlauf wird hier angezeigt", + "La data dell'evento è obbligatoria e deve essere nel formato corretto.": "Das Veranstaltungsdatum ist erforderlich und muss im korrekten Format vorliegen.", + "La data dell'evento è obbligatoria.": "Das Veranstaltungsdatum ist erforderlich.", + "La data di nascita deve essere precedente alla data di morte.": "Das Geburtsdatum muss vor dem Sterbedatum liegen.", + "La data non può essere nel passato.": "Das Datum darf nicht in der Vergangenheit liegen.", + "La lingua contrassegnata come 'Predefinita' verrà usata in tutta l'applicazione per tutti gli utenti. Per cambiare la lingua dell'intera app, clicca sull'icona stella": "Die als 'Standard' markierte Sprache wird in der gesamten Anwendung für alle Benutzer verwendet. Um die Sprache der gesamten App zu ändern, klicken Sie auf das Stern-Symbol", + "La mia bacheca": "Mein Dashboard", + "La modalità manutenzione non era attiva": "Der Wartungsmodus war nicht aktiv", + "La pagina che stai cercando non esiste o è stata spostata.": "Die Seite, die Sie suchen, existiert nicht oder wurde verschoben.", + "La pagina che stai cercando non esiste.": "Die von Ihnen gesuchte Seite existiert nicht.", + "La password deve contenere almeno 8 caratteri, lettere maiuscole, minuscole e numeri": "Das Passwort muss mindestens 8 Zeichen mit Groß- und Kleinbuchstaben sowie Zahlen enthalten", + "La password deve contenere almeno una lettera maiuscola, una minuscola e un numero": "Das Passwort muss mindestens einen Großbuchstaben, einen Kleinbuchstaben und eine Zahl enthalten", + "La password deve contenere almeno una lettera maiuscola, una minuscola e un numero.": "Das Passwort muss mindestens einen Großbuchstaben, einen Kleinbuchstaben und eine Zahl enthalten.", + "La password deve contenere maiuscole, minuscole e numeri.": "Das Passwort muss Großbuchstaben, Kleinbuchstaben und Zahlen enthalten.", + "La password deve essere lunga almeno 8 caratteri": "Das Passwort muss mindestens 8 Zeichen lang sein", + "La password deve essere lunga almeno 8 caratteri!": "Das Passwort muss mindestens 8 Zeichen lang sein!", + "La password deve essere lunga almeno 8 caratteri.": "Das Passwort muss mindestens 8 Zeichen lang sein.", + "La password non può superare i 72 caratteri.": "Das Passwort darf nicht länger als 72 Zeichen sein.", + "La password attuale non è corretta.": "Das aktuelle Passwort ist falsch.", + "La posizione fisica è indipendente dalla classificazione Dewey e indica dove si trova il libro sugli scaffali.": "Die physische Position ist unabhängig von der Dewey-Klassifikation und gibt an, wo sich das Buch in den Regalen befindet.", + "La posizione in coda sarà calcolata automaticamente in base alle prenotazioni esistenti": "Die Warteschlangenposition wird automatisch anhand der bestehenden Vormerkungen berechnet", + "La posizione viene assegnata automaticamente": "Die Position wird automatisch zugewiesen", + "La prenotazione è scaduta": "Die Vormerkung ist abgelaufen", + "La recensione è stata approvata e pubblicata con successo.": "Die Rezension wurde erfolgreich genehmigt und veröffentlicht.", + "La recensione è stata eliminata definitivamente.": "Die Rezension wurde endgültig gelöscht.", + "La recensione è stata rifiutata e non sarà pubblicata.": "Die Rezension wurde abgelehnt und wird nicht veröffentlicht.", + "La richiesta ha impiegato troppo tempo. Riprova.": "Die Anfrage hat zu lange gedauert. Bitte versuchen Sie es erneut.", + "La risposta include tutti i dati del libro:": "Die Antwort enthält alle Buchdaten:", + "La scadenza verrà estesa di 14 giorni": "Die Frist wird um 14 Tage verlängert", + "La sessione è scaduta. Aggiorna la pagina e riprova.": "Die Sitzung ist abgelaufen. Aktualisieren Sie die Seite und versuchen Sie es erneut.", + "La sezione principale che appare per prima sulla home": "Der Hauptbereich, der als Erstes auf der Startseite erscheint", + "La sitemap viene aggiornata automaticamente quando premi il pulsante oppure tramite lo script CLI": "Die Sitemap wird automatisch aktualisiert, wenn Sie die Schaltfläche drücken oder über das CLI-Skript", + "La sitemap viene aggiornata automaticamente quando premi il pulsante oppure tramite lo script CLI php scripts/generate-sitemap.php. Usa questa azione dopo aver importato un grande numero di libri o modifiche ai contenuti CMS.": "Die Sitemap wird automatisch aktualisiert, wenn Sie die Schaltfläche drücken oder über das CLI-Skript php scripts/generate-sitemap.php. Verwenden Sie diese Aktion nach dem Import vieler Bücher oder Änderungen an CMS-Inhalten.", + "La tua biblioteca digitale...": "Ihre digitale Bibliothek...", + "La tua prenotazione per \"%s\" è stata messa in attesa. %s. Verrai notificato quando sarà disponibile una nuova copia.": "Ihre Vormerkung für \"%s\" wurde in die Warteschlange gestellt. %s. Sie werden benachrichtigt, wenn ein neues Exemplar verfügbar ist.", + "La tua richiesta di prestito è stata inviata. Riceverai una notifica quando verrà approvata.": "Ihre Ausleihanfrage wurde gesendet. Sie erhalten eine Benachrichtigung, wenn sie genehmigt wird.", + "La tua sessione è scaduta. Per motivi di sicurezza, effettua nuovamente l'accesso": "Ihre Sitzung ist abgelaufen. Bitte melden Sie sich aus Sicherheitsgründen erneut an", + "La tua sessione è scaduta. Per motivi di sicurezza, ricarica la pagina e riprova": "Ihre Sitzung ist abgelaufen. Bitte laden Sie aus Sicherheitsgründen die Seite neu und versuchen Sie es erneut", + "La tua sessione è scaduta. Per motivi di sicurezza, ricarica la pagina ed effettua nuovamente l'accesso.": "Ihre Sitzung ist abgelaufen. Bitte laden Sie aus Sicherheitsgründen die Seite neu und melden Sie sich erneut an.", + "La tua wishlist è vuota": "Ihre Wunschliste ist leer", + "La versione %s è disponibile. Prima di aggiornare, verrà creato un backup automatico del database.": "Version %s ist verfügbar. Vor der Aktualisierung wird automatisch ein Datenbank-Backup erstellt.", + "Lascia una recensione": "Rezension schreiben", + "Lascia vuoto o usa \"Genera\" per assegnare automaticamente la prossima posizione disponibile.": "Leer lassen oder \"Generieren\" verwenden, um automatisch die nächste verfügbare Position zuzuweisen.", + "Lascia vuoto o usa \\": "Leer lassen oder \\ verwenden", + "Lascia vuoto per 1 mese": "Leer lassen für 1 Monat", + "Lascia vuoto per auto-rilevamento. Necessario solo su macOS/Linux con socket personalizzati.": "Leer lassen für automatische Erkennung. Nur auf macOS/Linux mit benutzerdefinierten Sockets erforderlich.", + "Lascia vuoto per generare automaticamente": "Leer lassen, um automatisch zu generieren", + "Lascia vuoto per inviare un link di impostazione": "Leer lassen, um einen Einrichtungslink zu senden", + "Lascia vuoto per mantenere il nome attuale": "Leer lassen, um den aktuellen Namen beizubehalten", + "Lascia vuoto per mantenere la chiave esistente. Inserisci un nuovo valore per aggiornarla.": "Leer lassen, um den bestehenden Schlüssel beizubehalten. Geben Sie einen neuen Wert ein, um ihn zu aktualisieren.", + "Lascia vuoto per nascondere il social dal footer": "Leer lassen, um das soziale Netzwerk in der Fußzeile auszublenden", + "Lascia vuoto per nascondere il titolo": "Leer lassen, um den Titel auszublenden", + "Lascia vuoto per non modificare": "Leer lassen, um nicht zu ändern", + "Lascia vuoto se l'autore è vivente": "Leer lassen, wenn der Autor noch lebt", + "Le API key disattivate restituiranno errore 401": "Deaktivierte API-Schlüssel geben Fehler 401 zurück", + "Le Mie Prenotazioni": "Meine Vormerkungen", + "Le Mie Recensioni": "Meine Rezensionen", + "Le copie disponibili vengono calcolate automaticamente": "Verfügbare Exemplare werden automatisch berechnet", + "Le date rosse non sono disponibili. La richiesta verrà valutata da un amministratore.": "Rot markierte Daten sind nicht verfügbar. Ihre Anfrage wird von einem Administrator geprüft.", + "Le date rosse o arancioni non sono disponibili. La richiesta verrà valutata da un amministratore.": "Rote oder orangefarbene Daten sind nicht verfügbar. Die Anfrage wird von einem Administrator geprüft.", + "Le mie prenotazioni": "Meine Vormerkungen", + "Le password non coincidono": "Die Passwörter stimmen nicht überein", + "Le password non coincidono!": "Die Passwörter stimmen nicht überein!", + "Le password non coincidono.": "Die Passwörter stimmen nicht überein.", + "Le password non corrispondono": "Die Passwörter stimmen nicht überein", + "Le posizioni si generano automaticamente": "Positionen werden automatisch generiert", + "Le route non possono contenere spazi": "Routen dürfen keine Leerzeichen enthalten", + "Le route sono gli URL usati nell'applicazione. Traducendole, puoi avere URL in italiano o inglese in base alla lingua dell'installazione.": "Routen sind die URLs, die in der Anwendung verwendet werden. Durch Übersetzung können Sie URLs je nach Installationssprache auf Italienisch oder Englisch haben.", + "Le sessioni scadono automaticamente per proteggere i tuoi dati.": "Sitzungen laufen automatisch ab, um Ihre Daten zu schützen.", + "Le tue recensioni": "Ihre Rezensionen", + "Letta": "Gelesen", + "Letto": "Gelesen", + "Lettore": "Leser", + "Libero": "Frei", + "Library Management System": "Bibliotheksverwaltungssystem", + "LibraryThing TSV": "LibraryThing TSV", + "Librerie di upload non caricate. Ricarica la pagina.": "Upload-Bibliotheken nicht geladen. Bitte laden Sie die Seite neu.", + "Libri": "Bücher", + "Libri Disponibili": "Verfügbare Bücher", + "Libri Importati": "Importierte Bücher", + "Libri Prestati": "Ausgeliehene Bücher", + "Libri Totali": "Bücher gesamt", + "Libri attualmente in prestito": "Derzeit ausgeliehene Bücher", + "Libri per Collocazione": "Bücher nach Standort", + "Libri prenotati dagli utenti": "Von Benutzern vorgemerkte Bücher", + "Libro": "Buch", + "Libro '%s' (ID: %d) ha copie disponibili negative: %d": "Buch '%s' (ID: %d) hat negative verfügbare Exemplare: %d", + "Libro '%s' (ID: %d) ha più copie disponibili (%d) che totali (%d)": "Buch '%s' (ID: %d) hat mehr verfügbare Exemplare (%d) als Gesamtexemplare (%d)", + "Libro '%s' (ID: %d) ha stato '%s' ma copie disponibili: %d": "Buch '%s' (ID: %d) hat Status '%s', aber verfügbare Exemplare: %d", + "Libro Esistente:": "Vorhandenes Buch:", + "Libro Già Esistente": "Buch bereits vorhanden", + "Libro ID %d ha posizioni coda non sequenziali: %s": "Buch ID %d hat nicht-sequenzielle Warteschlangenpositionen: %s", + "Libro aggiornato con successo!": "Buch erfolgreich aktualisiert!", + "Libro aggiunto con successo!": "Buch erfolgreich hinzugefügt!", + "Libro da prenotare": "Vorzumerkendes Buch", + "Libro disponibile per la prenotazione": "Buch zur Vormerkung verfügbar", + "Libro e utente sono campi obbligatori.": "Buch und Benutzer sind Pflichtfelder.", + "Libro non disponibile": "Buch nicht verfügbar", + "Libro non trovato": "Buch nicht gefunden", + "Libro non trovato nel database Open Library": "Buch nicht in der Open Library-Datenbank gefunden", + "Libro non trovato su Open Library.": "Buch nicht auf Open Library gefunden.", + "Libro non trovato.": "Buch nicht gefunden.", + "Libro prenotato disponibile": "Vorgemerktes Buch verfügbar", + "Libro senza titolo": "Buch ohne Titel", + "Libro:": "Buch:", + "Licenza": "Lizenz", + "Limite massimo rinnovi raggiunto": "Maximale Anzahl an Verlängerungen erreicht", + "Limiti: massimo 50 libri con scraping attivo, timeout 5 minuti": "Grenzen: maximal 50 Bücher mit aktivem Scraping, Timeout 5 Minuten", + "Lingua": "Sprache", + "Lingua App": "App-Sprache", + "Lingua Attiva": "Aktive Sprache", + "Lingua Predefinita": "Standardsprache", + "Lingua Predefinita:": "Standardsprache:", + "Lingua aggiornata con successo": "Sprache erfolgreich aktualisiert", + "Lingua creata con successo": "Sprache erfolgreich erstellt", + "Lingua eliminata con successo": "Sprache erfolgreich gelöscht", + "Lingua non supportata": "Nicht unterstützte Sprache", + "Lingua non trovata": "Sprache nicht gefunden", + "Lingua originale del libro": "Originalsprache des Buches", + "Lingua predefinita impostata con successo": "Standardsprache erfolgreich festgelegt", + "Lingue": "Sprachen", + "Lingue Configurate": "Konfigurierte Sprachen", + "Lingue valide": "Gültige Sprachen", + "Link": "Link", + "Link Cookie Statement": "Link zur Cookie-Erklärung", + "Link Cookie Technologies": "Link zu Cookie-Technologien", + "Link Social Media": "Social-Media-Links", + "Link al file digitale (se disponibile)": "Link zur digitalen Datei (falls verfügbar)", + "Link all'audiolibro (se disponibile)": "Link zum Hörbuch (falls verfügbar)", + "Link copiato!": "Link kopiert!", + "Link di esempio": "Beispiel-Link", + "Link di reset non valido o scaduto": "Zurücksetzungslink ungültig oder abgelaufen", + "Link pulsante": "Schaltflächen-Link", + "LinkedIn": "LinkedIn", + "Lista": "Liste", + "Livello": "Ebene", + "Livello ${m.numero_livello}": "Ebene ${m.numero_livello}", + "Livello *": "Ebene *", + "Livello 1 (Classi)": "Ebene 1 (Klassen)", + "Livello 2 (Divisioni)": "Ebene 2 (Abteilungen)", + "Livello 3 (Specifiche)": "Ebene 3 (Spezifika)", + "Livello principale (es. Prosa, Poesia, Teatro)": "Hauptebene (z. B. Prosa, Lyrik, Theater)", + "Lo script CLI utilizza il valore di APP_CANONICAL_URL. Assicurati che sia configurato correttamente per evitare URL duplicati.": "Das CLI-Skript verwendet den Wert von APP_CANONICAL_URL. Stellen Sie sicher, dass dieser korrekt konfiguriert ist, um doppelte URLs zu vermeiden.", + "Lo stato della prenotazione sarà impostato automaticamente come \"attiva\"": "Der Status der Vormerkung wird automatisch auf \"aktiv\" gesetzt", + "Lo stato della prenotazione sarà impostato automaticamente come \\": "Der Status der Vormerkung wird automatisch gesetzt als \\", + "Loans": "Ausleihen", + "Locale": "Lokal", + "Locale non supportato.": "Nicht unterstützte Sprache.", + "Lock file creato (installazione protetta)": "Lock-Datei erstellt (Installation geschützt)", + "Log": "Log", + "Log Sicurezza": "Sicherheitsprotokolle", + "Log di Sicurezza": "Sicherheitsprotokoll", + "Login": "Anmeldung", + "Login Riuscito": "Anmeldung erfolgreich", + "Logo": "Logo", + "Logo Applicazione (opzionale)": "Anwendungslogo (optional)", + "Logout effettuato con successo": "Abmeldung erfolgreich", + "MP3, M4A o OGG, max 500 MB": "MP3, M4A oder OGG, max. 500 MB", + "Mai generata": "Nie generiert", + "Mai utilizzata": "Nie verwendet", + "MaintenanceService ICS non generato": "MaintenanceService ICS nicht generiert", + "MaintenanceService connessione database fallita": "MaintenanceService Datenbankverbindung fehlgeschlagen", + "MaintenanceService errore attivazione prestiti": "MaintenanceService Fehler bei Ausleihe-Aktivierung", + "MaintenanceService errore attivazione prestito": "MaintenanceService Fehler bei Ausleihe-Aktivierung", + "MaintenanceService errore conversione prenotazioni": "MaintenanceService Fehler bei Vormerkungsumwandlung", + "MaintenanceService errore durante hook login admin": "MaintenanceService Fehler beim Admin-Login-Hook", + "MaintenanceService errore elaborazione prenotazione": "MaintenanceService Fehler bei Vormerkungsverarbeitung", + "MaintenanceService errore generazione ICS": "MaintenanceService Fehler bei ICS-Generierung", + "MaintenanceService errore notifiche": "MaintenanceService Benachrichtigungsfehler", + "MaintenanceService errore prenotazioni scadute": "MaintenanceService Fehler bei abgelaufenen Vormerkungen", + "MaintenanceService errore prestiti in ritardo": "MaintenanceService Fehler bei überfälligen Ausleihen", + "MaintenanceService errore ritiri scaduti": "MaintenanceService Fehler bei abgelaufenen Abholungen", + "MaintenanceService errore scadenza prenotazione": "MaintenanceService Fehler bei Vormerkungsablauf", + "MaintenanceService errore scadenza ritiro": "MaintenanceService Fehler bei Abholfristablauf", + "MaintenanceService eseguito al login admin": "MaintenanceService bei Admin-Anmeldung ausgeführt", + "MaintenanceService prenotazione convertita in prestito": "MaintenanceService Vormerkung in Ausleihe umgewandelt", + "MaintenanceService prenotazione scaduta": "MaintenanceService Vormerkung abgelaufen", + "MaintenanceService ritiro scaduto": "MaintenanceService Abholung abgelaufen", + "Mancante": "Fehlend", + "Mantieni in ritardo": "Als überfällig beibehalten", + "Manuale": "Manuell", + "Manutenzione": "Wartung", + "Manutenzione Completa": "Vollständige Wartung", + "Manutenzione completata: %d record corretti": "Wartung abgeschlossen: %d Datensätze korrigiert", + "Manutenzione disattivata": "Wartung deaktiviert", + "Manutenzione giornaliera del database": "Tägliche Datenbankwartung", + "Mappa Interattiva": "Interaktive Karte", + "Mappa del sito per i motori di ricerca": "Sitemap für Suchmaschinen", + "Mappa non disponibile": "Karte nicht verfügbar", + "Mario": "Max", + "Marketing:": "Marketing:", + "Maschio": "Männlich", + "Max 10.000 righe • Max 100 copie per libro": "Max. 10.000 Zeilen • Max. 100 Exemplare pro Buch", + "Mediocre": "Mäßig", + "Membro": "Mitglied", + "Memory limit aumentato": "Speicherlimit erhöht", + "Mensola": "Regal", + "Mensola creata e %d posizioni generate.": "Regal erstellt und %d Positionen generiert.", + "Mensola creata.": "Regal erstellt.", + "Mensola eliminata": "Regal gelöscht", + "Mensole": "Regale", + "Menu": "Menü", + "Menu \"Prestiti\" nell'admin sidebar": "Menü \"Ausleihen\" in der Admin-Seitenleiste", + "Menu Principale": "Hauptmenü", + "Merge - Aggiungi e aggiorna (mantiene dati esistenti)": "Zusammenführen – Hinzufügen und aktualisieren (behält vorhandene Daten bei)", + "Merge completato": "Zusammenführung abgeschlossen", + "Merge completato: %d aggiunti, %d aggiornati, %d invariati. Totale: %d voci.": "Zusammenführung abgeschlossen: %d hinzugefügt, %d aktualisiert, %d unverändert. Gesamt: %d Einträge.", + "Mese": "Monat", + "Messaggi": "Nachrichten", + "Messaggi di Contatto": "Kontaktnachrichten", + "Messaggio": "Nachricht", + "Messaggio inviato con successo! Ti risponderemo al più presto.": "Nachricht erfolgreich gesendet! Wir werden Ihnen so schnell wie möglich antworten.", + "Messaggio non trovato.": "Nachricht nicht gefunden.", + "Metadati:": "Metadaten:", + "Metodo di invio": "Versandmethode", + "Migrazione database": "Datenbankmigration", + "Minimo 8 caratteri": "Mindestens 8 Zeichen", + "Minimo 8 caratteri, con lettere maiuscole, minuscole e numeri": "Mindestens 8 Zeichen, mit Groß- und Kleinbuchstaben sowie Zahlen", + "Mittente": "Absender", + "Mittente (email)": "Absender (E-Mail)", + "Mittente (nome)": "Absender (Name)", + "Modalità Catalogo": "Katalogmodus", + "Modalità Solo Catalogo": "Nur-Katalog-Modus", + "Modalità di importazione": "Importmodus", + "Modalità manutenzione disattivata": "Wartungsmodus deaktiviert", + "Modalità manutenzione rimossa automaticamente (scaduta)": "Wartungsmodus automatisch entfernt (abgelaufen)", + "Moderatore": "Moderator", + "Modifica": "Bearbeiten", + "Modifica %s": "%s bearbeiten", + "Modifica Autore": "Autor bearbeiten", + "Modifica Autore:": "Autor bearbeiten:", + "Modifica Chi Siamo": "Über uns bearbeiten", + "Modifica Editore": "Verlag bearbeiten", + "Modifica Evento": "Veranstaltung bearbeiten", + "Modifica Evento: %s": "Veranstaltung bearbeiten: %s", + "Modifica Homepage": "Startseite bearbeiten", + "Modifica Libro": "Buch bearbeiten", + "Modifica Lingua:": "Sprache bearbeiten:", + "Modifica Prenotazione": "Vormerkung bearbeiten", + "Modifica Prenotazione #%s": "Vormerkung #%s bearbeiten", + "Modifica Route": "Route bearbeiten", + "Modifica Route Tradotte": "Übersetzte Routen bearbeiten", + "Modifica Stato Copia": "Exemplar-Status bearbeiten", + "Modifica Utente": "Benutzer bearbeiten", + "Modifica i contenuti della homepage: hero, features, CTA e immagine di sfondo": "Inhalte der Startseite bearbeiten: Hero, Features, CTA und Hintergrundbild", + "Modifica il contenuto e le impostazioni della pagina": "Seiteninhalt und Einstellungen bearbeiten", + "Modifica le informazioni dell'evento": "Veranstaltungsinformationen bearbeiten", + "Modifica le pagine statiche del sito": "Statische Seiten der Website bearbeiten", + "Modifica prestito": "Ausleihe bearbeiten", + "Modifica prestito #%s": "Ausleihe #%s bearbeiten", + "Modifica profilo": "Profil bearbeiten", + "Modifica stato": "Status bearbeiten", + "Modifica utente": "Benutzer bearbeiten", + "Modifiche non salvate": "Nicht gespeicherte Änderungen", + "Modulo": "Modul", + "Molto buono": "Sehr gut", + "Mondadori": "Mondadori", + "Monitora tentativi di login e eventi di sicurezza": "Anmeldeversuche und Sicherheitsereignisse überwachen", + "Mostra": "Anzeigen", + "Mostra API Key": "API-Schlüssel anzeigen", + "Mostra Cookie Analitici": "Analyse-Cookies anzeigen", + "Mostra Cookie di Marketing": "Marketing-Cookies anzeigen", + "Mostra _MENU_ libri": "_MENU_ Bücher anzeigen", + "Mostra categoria \\": "Kategorie anzeigen \\", + "Mostra filtri": "Filter anzeigen", + "Mostra gli ultimi libri aggiunti al catalogo": "Die zuletzt zum Katalog hinzugefügten Bücher anzeigen", + "Mostra questa guida": "Diese Anleitung anzeigen", + "Motivo del rifiuto (opzionale)": "Ablehnungsgrund (optional)", + "Motivo del rifiuto (opzionale):": "Ablehnungsgrund (optional):", + "N. Inventario": "Inventar-Nr.", + "N. Libri": "Anz. Bücher", + "N/D": "k. A.", + "Narrativa": "Belletristik", + "Nascita a": "Geburtsdatum bis", + "Nascita da": "Geburtsdatum von", + "Nascondi": "Ausblenden", + "Nascondi API Key": "API-Schlüssel ausblenden", + "Nascondi filtri": "Filter ausblenden", + "Nascondi se il sito non utilizza cookie di marketing o advertising": "Ausblenden, wenn die Website keine Marketing- oder Werbe-Cookies verwendet", + "Nascondi se il sito non utilizza strumenti di analytics (es. Google Analytics)": "Ausblenden, wenn die Website keine Analysetools verwendet (z. B. Google Analytics)", + "Nascosto": "Verborgen", + "Nato il %s": "Geboren am %s", + "Nazionalità": "Nationalität", + "Nederlands (NL)": "Niederländisch (NL)", + "Nei Preferiti": "In Favoriten", + "Nella collezione": "In der Sammlung", + "Nessun Problema": "Keine Probleme", + "Nessun aggiornamento": "Keine Aktualisierungen", + "Nessun aggiornamento registrato": "Keine Aktualisierungen verzeichnet", + "Nessun autore selezionato": "Keine Autoren ausgewählt", + "Nessun autore trovato": "Keine Autoren gefunden", + "Nessun autore trovato, premi Invio per aggiungerne uno nuovo": "Kein Autor gefunden, drücken Sie Enter, um einen neuen hinzuzufügen", + "Nessun backup disponibile": "Keine Backups verfügbar", + "Nessun dato": "Keine Daten", + "Nessun dato trovato su LibreriaUniversitaria/Feltrinelli.": "Keine Daten auf LibreriaUniversitaria/Feltrinelli gefunden.", + "Nessun dato.": "Keine Daten.", + "Nessun editore selezionato": "Keine Verlage ausgewählt", + "Nessun editore trovato": "Keine Verlage gefunden", + "Nessun editore trovato per": "Kein Verlag gefunden für", + "Nessun editore trovato per \"${query}\" — premi Invio per crearne uno nuovo.": "Kein Verlag für \"${query}\" gefunden — drücken Sie Enter, um einen neuen anzulegen.", + "Nessun elemento trovato": "Keine Elemente gefunden", + "Nessun errore": "Keine Fehler", + "Nessun evento": "Keine Veranstaltungen", + "Nessun evento in programma": "Keine Veranstaltungen geplant", + "Nessun file caricato": "Keine Datei hochgeladen", + "Nessun file caricato.": "Keine Datei hochgeladen.", + "Nessun file di traduzione caricato. Carica un file JSON per abilitare questa lingua.": "Keine Übersetzungsdatei hochgeladen. Laden Sie eine JSON-Datei hoch, um diese Sprache zu aktivieren.", + "Nessun genere trovato": "Keine Genres gefunden", + "Nessun import registrato": "Keine Importe aufgezeichnet", + "Nessun libro": "Keine Bücher", + "Nessun libro ancora inserito": "Noch keine Bücher hinzugefügt", + "Nessun libro con collocazione trovato": "Keine Bücher mit Standort gefunden", + "Nessun libro nel database": "Keine Bücher in der Datenbank", + "Nessun libro recente": "Keine aktuellen Bücher", + "Nessun libro recente disponibile": "Keine aktuellen Bücher verfügbar", + "Nessun libro registrato": "Keine Bücher registriert", + "Nessun libro selezionato": "Keine Bücher ausgewählt", + "Nessun libro trovato": "Keine Bücher gefunden", + "Nessun log disponibile": "Keine Protokolle verfügbar", + "Nessun logo caricato": "Kein Logo hochgeladen", + "Nessun messaggio ricevuto": "Keine Nachrichten erhalten", + "Nessun motivo specificato": "Kein Grund angegeben", + "Nessun plugin installato": "Keine Plugins installiert", + "Nessun prestito attivo": "Keine aktiven Ausleihen", + "Nessun prestito disponibile per generare il grafico": "Keine Ausleihen verfügbar, um das Diagramm zu erstellen", + "Nessun prestito in attesa di ritiro": "Keine Ausleihen warten auf Abholung", + "Nessun prestito in corso": "Keine laufenden Ausleihen", + "Nessun prestito passato": "Keine vergangenen Ausleihen", + "Nessun prestito registrato": "Keine Ausleihen registriert", + "Nessun prestito scaduto": "Keine überfälligen Ausleihen", + "Nessun prestito trovato": "Keine Ausleihen gefunden", + "Nessun prestito trovato.": "Keine Ausleihen gefunden.", + "Nessun risultato": "Keine Ergebnisse", + "Nessun risultato trovato": "Keine Ergebnisse gefunden", + "Nessun risultato trovato con i filtri applicati": "Keine Ergebnisse mit den angewendeten Filtern gefunden", + "Nessun risultato trovato per": "Keine Ergebnisse gefunden für", + "Nessun risultato trovato per la ricerca.": "Keine Ergebnisse für die Suche gefunden.", + "Nessun ritiro": "Keine Abholungen", + "Nessun server configurato. Aggiungine uno per iniziare.": "Keine Server konfiguriert. Fügen Sie einen hinzu, um zu beginnen.", + "Nessun sottogenere": "Kein Untergenre", + "Nessun sottogenere definito": "Keine Untergenres definiert", + "Nessun suggerimento": "Kein Vorschlag", + "Nessun suggerimento disponibile": "Kein Vorschlag verfügbar", + "Nessun titolo corrisponde al filtro corrente.": "Kein Titel entspricht dem aktuellen Filter.", + "Nessuna": "Keine", + "Nessuna API key configurata": "Keine API-Schlüssel konfiguriert", + "Nessuna alternativa disponibile": "Keine Alternativen verfügbar", + "Nessuna collocazione trovata": "Keine Standorte gefunden", + "Nessuna copertina caricata": "Kein Cover hochgeladen", + "Nessuna copertina da scaricare": "Keine Cover zum Abrufen vorhanden", + "Nessuna copia attualmente disponibile": "Kein Exemplar derzeit verfügbar", + "Nessuna copia disponibile nelle date richieste": "Keine Exemplare für die gewünschten Daten verfügbar", + "Nessuna copia disponibile per il periodo richiesto": "Kein Exemplar für den angeforderten Zeitraum verfügbar", + "Nessuna copia disponibile per il periodo richiesto.": "Kein Exemplar für den gewünschten Zeitraum verfügbar.", + "Nessuna copia disponibile per questo libro": "Kein Exemplar für dieses Buch verfügbar", + "Nessuna copia registrata": "Keine Exemplare registriert", + "Nessuna descrizione disponibile": "Keine Beschreibung verfügbar", + "Nessuna descrizione disponibile per questo libro.": "Keine Beschreibung für dieses Buch verfügbar.", + "Nessuna fonte di scraping disponibile. Installa almeno un plugin di scraping (es. Open Library o Scraping Pro).": "Keine Scraping-Quelle verfügbar. Installieren Sie mindestens ein Scraping-Plugin (z.B. Open Library oder Scraping Pro).", + "Nessuna lingua configurata": "Keine Sprachen konfiguriert", + "Nessuna mensola per questo scaffale. Creane una!": "Keine Regale für dieses Regalgestell. Erstellen Sie eines!", + "Nessuna mensola. Creane una per iniziare!": "Keine Regale vorhanden. Erstellen Sie eines, um zu beginnen!", + "Nessuna notifica": "Keine Benachrichtigungen", + "Nessuna prenotazione": "Keine Vormerkungen", + "Nessuna prenotazione attiva": "Keine aktiven Vormerkungen", + "Nessuna recensione": "Keine Rezensionen", + "Nessuna recensione approvata": "Keine genehmigten Rezensionen", + "Nessuna recensione in attesa": "Keine ausstehenden Rezensionen", + "Nessuna recensione rifiutata": "Keine abgelehnten Rezensionen", + "Nessuna ricerca recente": "Keine kürzlichen Suchen", + "Nessuna richiesta": "Keine Anfragen", + "Nessuna richiesta da approvare": "Keine Anfragen zu genehmigen", + "Nessuna richiesta in attesa": "Keine ausstehenden Anfragen", + "Nessuna richiesta in attesa di approvazione.": "Keine Anfragen zur Genehmigung ausstehend.", + "Nessuna selezione": "Keine Auswahl", + "Nessuna sessione attiva. Le sessioni vengono create quando accedi con 'Ricordami' selezionato.": "Keine aktiven Sitzungen. Sitzungen werden erstellt, wenn Sie sich mit aktiviertem 'Angemeldet bleiben' anmelden.", + "Nessuno": "Keine", + "Nessuno scaffale. Creane uno per iniziare!": "Keine Regalgestelle vorhanden. Erstellen Sie eines, um zu beginnen!", + "Nessuno storico": "Kein Verlauf", + "No": "Nein", + "Nodo mancante di codice a profondità %d.": "Knoten ohne Code auf Tiefe %d.", + "Nome": "Vorname", + "Nome *": "Name *", + "Nome Applicazione": "Anwendungsname", + "Nome Categoria": "Kategoriename", + "Nome Cognome": "Vor- und Nachname", + "Nome Database": "Datenbankname", + "Nome Editore": "Verlagsname", + "Nome File": "Dateiname", + "Nome Indice": "Indexname", + "Nome Inglese": "Englischer Name", + "Nome Nativo": "Einheimischer Name", + "Nome Referente": "Name der Kontaktperson", + "Nome Server": "Servername", + "Nome applicazione": "Anwendungsname", + "Nome autore": "Autorenname", + "Nome backup non specificato": "Backup-Name nicht angegeben", + "Nome backup non valido": "Ungültiger Backup-Name", + "Nome categoria esistente": "Vorhandener Kategoriename", + "Nome completo": "Vollständiger Name", + "Nome cookie analitici": "Name der Analyse-Cookies", + "Nome cookie essenziali": "Name der essentiellen Cookies", + "Nome cookie marketing": "Name der Marketing-Cookies", + "Nome d'arte o pseudonimo": "Künstlername oder Pseudonym", + "Nome del traduttore (se applicabile)": "Name des Übersetzers (falls zutreffend)", + "Nome dell'editore": "Verlagsname", + "Nome dell'illustratore (se applicabile)": "Name des Illustrators (falls zutreffend)", + "Nome della casa editrice": "Verlagsname", + "Nome della classificazione": "Name der Klassifikation", + "Nome della lingua in inglese (es. Italian, English, Spanish)": "Name der Sprache auf Englisch (z. B. Italian, English, Spanish)", + "Nome della lingua nella lingua stessa (es. Italiano, English, Español)": "Name der Sprache in der Sprache selbst (z. B. Italiano, English, Español)", + "Nome e cognome del referente": "Vor- und Nachname der Kontaktperson", + "Nome e cognome dell'autore": "Vor- und Nachname des Autors", + "Nome e cognome sono obbligatori.": "Vor- und Nachname sind erforderlich.", + "Nome editore": "Verlagsname", + "Nome editore...": "Verlagsname...", + "Nome file non valido.": "Ungültiger Dateiname.", + "Nome o cognome troppo lungo (massimo 100 caratteri)": "Vor- oder Nachname zu lang (maximal 100 Zeichen)", + "Nome plugin non valido. Usa solo lettere, numeri, trattini o underscore.": "Ungültiger Plugin-Name. Verwenden Sie nur Buchstaben, Zahlen, Bindestriche oder Unterstriche.", + "Nome, cognome, email...": "Name, Nachname, E-Mail...", + "Nome, pseudonimo, biografia...": "Name, Pseudonym, Biografie...", + "Nome:": "Name:", + "Non Disponibile": "Nicht verfügbar", + "Non Disponibili": "Nicht verfügbar", + "Non ancora restituito": "Noch nicht zurückgegeben", + "Non assegnata": "Nicht zugewiesen", + "Non autenticato": "Nicht authentifiziert", + "Non autorizzato": "Nicht autorisiert", + "Non autorizzato.": "Nicht autorisiert.", + "Non chiudere questa finestra": "Schließen Sie dieses Fenster nicht", + "Non ci sono azioni urgenti da completare.": "Keine dringenden Aktionen zu erledigen.", + "Non ci sono dati da esportare": "Keine Daten zum Exportieren vorhanden", + "Non ci sono nuovi arrivi al momento.": "Derzeit gibt es keine Neuerscheinungen.", + "Non ci sono recensioni in attesa di approvazione.": "Keine Rezensionen zur Genehmigung ausstehend.", + "Non ci sono richieste di prestito in attesa di approvazione.": "Keine Ausleih-Anfragen zur Genehmigung ausstehend.", + "Non disponibile": "Nicht verfügbar", + "Non disponibile nella data selezionata": "Am gewählten Datum nicht verfügbar", + "Non disponibile ora": "Derzeit nicht verfügbar", + "Non eliminabile": "Nicht löschbar", + "Non hai ancora creato nessun evento. Inizia creando il tuo primo evento.": "Sie haben noch keine Veranstaltungen erstellt. Beginnen Sie mit der Erstellung Ihrer ersten Veranstaltung.", + "Non hai ancora lasciato recensioni": "Sie haben noch keine Rezensionen verfasst", + "Non hai libri in prestito al momento": "Sie haben derzeit keine ausgeliehenen Bücher", + "Non hai prenotazioni attive al momento": "Sie haben derzeit keine aktiven Vormerkungen", + "Non hai prestiti in corso al momento.": "Sie haben derzeit keine aktiven Ausleihen.", + "Non hai prestiti passati": "Sie haben keine vergangenen Ausleihen", + "Non hai un account?": "Sie haben noch kein Konto?", + "Non includere tag": "Keine Tags einfügen", + "Non includere tag ": "Keine -Tags einfügen", + "Non installato": "Nicht installiert", + "Non letto": "Ungelesen", + "Non puoi eliminare l'installer finché non completi l'installazione delle dipendenze PHP.": "Sie können den Installer erst löschen, wenn die Installation der PHP-Abhängigkeiten abgeschlossen ist.", + "Non puoi recensire questo libro (devi averlo preso in prestito e non averlo già recensito)": "Sie können dieses Buch nicht rezensieren (Sie müssen es ausgeliehen haben und dürfen es nicht bereits rezensiert haben)", + "Non rinnovabile: prestito in ritardo": "Nicht verlängerbar: Ausleihe überfällig", + "Non scrivibile": "Nicht beschreibbar", + "Non selezionato": "Nicht ausgewählt", + "Non specificata": "Nicht angegeben", + "Non specificato": "Nicht angegeben", + "Non usare spazi nelle route": "Verwenden Sie keine Leerzeichen in Routen", + "Non è possibile creare la directory: %s": "Verzeichnis kann nicht erstellt werden: %s", + "Non è stato possibile eliminare l'utente. Controlla la console.": "Der Benutzer konnte nicht gelöscht werden. Überprüfen Sie die Konsole.", + "Non è stato trovato alcun aggiornamento": "Keine Aktualisierungen gefunden", + "Nota:": "Hinweis:", + "Nota: Impostare come predefinita disattiverà lo status di predefinita per tutte le altre lingue.": "Hinweis: Das Festlegen als Standard deaktiviert den Standardstatus für alle anderen Sprachen.", + "Nota: in produzione limita questa funzione agli amministratori.": "Hinweis: In der Produktionsumgebung diese Funktion auf Administratoren beschränken.", + "Note": "Notizen", + "Note (opzionali)": "Notizen (optional)", + "Note Importanti": "Wichtige Hinweise", + "Note Varie": "Verschiedene Notizen", + "Note aggiuntive o osservazioni particolari...": "Zusätzliche Notizen oder besondere Anmerkungen...", + "Note importanti:": "Wichtige Hinweise:", + "Note interne": "Interne Notizen", + "Note sul prestito": "Ausleihe-Notizen", + "Note sulla restituzione": "Rückgabe-Notizen", + "Note tecniche": "Technische Hinweise", + "Notifica agli amministratori quando viene inoltrata una nuova richiesta di prestito.": "Benachrichtigt Administratoren, wenn eine neue Ausleihanfrage eingereicht wird.", + "Notifica agli utenti quando il prestito è scaduto e deve essere restituito.": "Benachrichtigt die Benutzer, wenn die Ausleihe abgelaufen ist und das Buch zurückgegeben werden muss.", + "Notifica copia non disponibile creata": "Benachrichtigung über nicht verfügbares Exemplar erstellt", + "Notifica prenotazione disponibile inviata": "Benachrichtigung über verfügbare Vormerkung gesendet", + "Notifica prestito fallita": "Ausleihbenachrichtigung fehlgeschlagen", + "Notifica richiesta prestito fallita": "Benachrichtigung über Ausleihanfrage fehlgeschlagen", + "Notifiche": "Benachrichtigungen", + "Notifiche Automatiche": "Automatische Benachrichtigungen", + "Notifiche Prestiti": "Ausleihe-Benachrichtigungen", + "Notifiche disponibilità libri in wishlist": "Benachrichtigungen zur Verfügbarkeit von Büchern auf der Wunschliste", + "Notifiche prestiti scaduti": "Benachrichtigungen über überfällige Ausleihen", + "Novità nelle versioni successive": "Neuigkeiten in kommenden Versionen", + "Numero Inventario": "Inventarnummer", + "Numero Libri": "Anzahl Bücher", + "Numero Pagine": "Seitenzahl", + "Numero Serie": "Reihennummer", + "Numero di Pagine": "Seitenzahl", + "Numero di copie non valido.": "Ungültige Anzahl von Exemplaren.", + "Numero di libri": "Anzahl der Bücher", + "Numero inventario": "Inventarnummer", + "Numero massimo di righe superato (%d)": "Maximale Zeilenanzahl überschritten (%d)", + "Numero massimo di righe superato (%d). Dividi il file in parti più piccole.": "Maximale Zeilenanzahl überschritten (%d). Teilen Sie die Datei in kleinere Teile auf.", + "Numero o descrizione dell'edizione": "Ausgabenummer oder -beschreibung", + "Numero prenotazioni attive": "Anzahl aktiver Vormerkungen", + "Numero serie": "Reihennummer", + "Numero tessera": "Ausweisnummer", + "Nuova Collocazione": "Neuer Standort", + "Nuova Password": "Neues Passwort", + "Nuova password": "Neues Passwort", + "Nuova prenotazione": "Neue Vormerkung", + "Nuova recensione (Admin)": "Neue Rezension (Admin)", + "Nuova recensione da approvare": "Neue Rezension zur Genehmigung", + "Nuova registrazione utente": "Neue Benutzerregistrierung", + "Nuova ricerca": "Neue Suche", + "Nuova richiesta di prestito": "Neue Ausleih-Anfrage", + "Nuovo": "Neu", + "Nuovo Autore": "Neuer Autor", + "Nuovo Editore": "Neuer Verlag", + "Nuovo Evento": "Neue Veranstaltung", + "Nuovo Genere": "Neues Genre", + "Nuovo Libro": "Neues Buch", + "Nuovo Prestito": "Neue Ausleihe", + "Nuovo Utente": "Neuer Benutzer", + "Nuovo aggiornamento disponibile!": "Neue Aktualisierung verfügbar!", + "Nuovo editore:": "Neuer Verlag:", + "Nuovo libro": "Neues Buch", + "Nuovo messaggio di contatto": "Neue Kontaktnachricht", + "Nuovo nome (opzionale)": "Neuer Name (optional)", + "Nuovo utente": "Neuer Benutzer", + "OFF": "Aus", + "OK": "OK", + "ON": "Ein", + "Obbligatorio": "Erforderlich", + "Obbligatorio per utenti non amministratori.": "Erforderlich für Benutzer ohne Administratorrechte.", + "Obsoleto": "Veraltet", + "Occupato": "Belegt", + "Occupato (in ritardo)": "Belegt (überfällig)", + "Occupato (prestito attivo)": "Belegt (aktive Ausleihe)", + "Offline": "Offline", + "Oggetto": "Betreff", + "Oggetto dell'email": "E-Mail-Betreff", + "Oggi": "Heute", + "Ogni 15 minuti nei giorni lavorativi (8:00-18:00)": "Alle 15 Minuten an Werktagen (8:00–18:00)", + "Ogni errore include: numero riga, titolo libro, tipo errore e messaggio dettagliato": "Jeder Fehler enthält: Zeilennummer, Buchtitel, Fehlertyp und detaillierte Meldung", + "Ogni route deve iniziare con": "Jede Route muss beginnen mit", + "Online": "Online", + "Open Graph (Facebook)": "Open Graph (Facebook)", + "Open Graph (Facebook, LinkedIn)": "Open Graph (Facebook, LinkedIn)", + "Operation completed": "Vorgang abgeschlossen", + "Operation failed": "Vorgang fehlgeschlagen", + "Operatore": "Operator", + "Operazione annullata": "Vorgang abgebrochen", + "Operazione completata": "Vorgang abgeschlossen", + "Operazione fallita": "Vorgang fehlgeschlagen", + "Operazione non consentita": "Vorgang nicht erlaubt", + "Operazione non riuscita": "Vorgang fehlgeschlagen", + "Operazioni": "Vorgänge", + "Opere": "Werke", + "Oppure accedere a /installer/?force=1 per forzare una nuova procedura": "Oder gehen Sie zu /installer/?force=1, um eine Neuinstallation zu erzwingen", + "Oppure naviga per categorie": "Oder nach Kategorien durchsuchen", + "Oppure naviga per categorie:": "Oder nach Kategorien durchsuchen:", + "Oppure usa il terminale SSH del tuo hosting (cPanel, Plesk, etc.)": "Oder verwenden Sie das SSH-Terminal Ihres Hostings (cPanel, Plesk, etc.)", + "Ops, qualcosa è andato storto": "Hoppla, etwas ist schiefgelaufen", + "Opzionale": "Optional", + "Opzionale per amministratori": "Optional für Administratoren", + "Opzione 1:": "Option 1:", + "Opzione 2:": "Option 2:", + "Opzione 3:": "Option 3:", + "Ora Evento": "Veranstaltungszeit", + "Ora puoi accedere con la tua nuova password.": "Sie können sich jetzt mit Ihrem neuen Passwort anmelden.", + "Ora puoi ricaricare questa pagina - il warning sparirà se tutto è OK.": "Sie können diese Seite jetzt neu laden – die Warnung verschwindet, wenn alles in Ordnung ist.", + "Ordina Sezioni Homepage": "Homepage-Bereiche sortieren", + "Ordina per": "Sortieren nach", + "Ordinamento": "Sortierung", + "Ordinamento libri": "Büchersortierung", + "Ordine salvato con successo!": "Reihenfolge erfolgreich gespeichert!", + "Ordine:": "Reihenfolge:", + "Organizza e gestisci i generi letterari della biblioteca": "Literarische Genres der Bibliothek organisieren und verwalten", + "Organizza scaffali, mensole e posizioni per la biblioteca fisica": "Regale, Regalböden und Positionen für die physische Bibliothek organisieren", + "Ospite": "Gast", + "Ottieni le chiavi da Google reCAPTCHA": "Schlüssel von Google reCAPTCHA erhalten", + "Ottimizza l'evento per i motori di ricerca e i social media": "Veranstaltung für Suchmaschinen und soziale Medien optimieren", + "Ottimizzato": "Optimiert", + "Ottimizzazione": "Optimierung", + "Ottimizzazione Indici Database": "Datenbank-Indexoptimierung", + "Ottimizzazione SEO (Meta Tags)": "SEO-Optimierung (Meta-Tags)", + "Ottimizzazione SEO e Social Media": "SEO- und Social-Media-Optimierung", + "Output atteso: cartella vendor/ con sottocartelle (slim, monolog, etc.)": "Erwartete Ausgabe: Ordner vendor/ mit Unterordnern (slim, monolog, etc.)", + "PDF": "PDF", + "PDF generato!": "PDF erstellt!", + "PDF o ePub, max 100 MB": "PDF oder ePub, max. 100 MB", + "PDF prestito non generato": "Ausleih-PDF nicht erstellt", + "PHP mail()": "PHP mail()", + "PHP mail() - Predefinito": "PHP mail() – Standard", + "PHPMailer": "PHPMailer", + "PNG, SVG, JPG o WebP (max 2MB)": "PNG, SVG, JPG oder WebP (max. 2 MB)", + "Pacchetto di aggiornamento non valido: manca %s": "Ungültiges Aktualisierungspaket: %s fehlt", + "Paese": "Land", + "Pagina": "Seite", + "Pagina Cookie": "Cookie-Seite", + "Pagina Cookie Policy": "Cookie-Richtlinien-Seite", + "Pagina Non Trovata": "Seite nicht gefunden", + "Pagina \\": "Seite \\", + "Pagina aggiornata con successo.": "Seite erfolgreich aktualisiert.", + "Pagina attiva (visibile sul sito)": "Aktive Seite (auf der Website sichtbar)", + "Pagina non trovata.": "Seite nicht gefunden.", + "Pagina precedente": "Vorherige Seite", + "Pagina successiva": "Nächste Seite", + "Paginazione eventi": "Veranstaltungspaginierung", + "Pagine": "Seiten", + "Pannello": "Bereich", + "Panoramica completa di prestiti, ritiri e prenotazioni": "Vollständige Übersicht über Ausleihen, Abholungen und Vormerkungen", + "Panoramica generale": "Allgemeine Übersicht", + "Panoramica generale di Pinakes": "Allgemeine Übersicht über Pinakes", + "Paragrafo": "Absatz", + "Paragraph": "Absatz", + "Parametri di Ricerca": "Suchparameter", + "Parametri non validi": "Ungültige Parameter.", + "Parametro ISBN mancante.": "Fehlender ISBN-Parameter.", + "Parametro category_id obbligatorio.": "Parameter category_id ist erforderlich.", + "Parametro code obbligatorio.": "Parameter code ist erforderlich.", + "Parametro cover_url mancante.": "Fehlender Parameter cover_url.", + "Parametro division_id obbligatorio.": "Parameter division_id ist erforderlich.", + "Parole Chiave": "Schlüsselwörter", + "Parole Chiave SEO": "SEO-Schlüsselwörter", + "Parole chiave": "Schlüsselwörter", + "Parole chiave SEO": "SEO-Schlüsselwörter", + "Parole chiave per i motori di ricerca (impatto SEO limitato). Separate da virgola.": "Schlüsselwörter für Suchmaschinen (begrenzter SEO-Einfluss). Durch Komma getrennt.", + "Passo": "Schritt", + "Password": "Passwort", + "Password aggiornata con successo.": "Passwort erfolgreich aktualisiert.", + "Password dimenticata": "Passwort vergessen", + "Password dimenticata?": "Passwort vergessen?", + "Password iniziale": "Anfangspasswort", + "Password resettata con successo!": "Passwort erfolgreich zurückgesetzt!", + "Password troppo lunga (massimo 128 caratteri)": "Passwort zu lang (maximal 128 Zeichen)", + "Pattern URL": "URL-Muster", + "Pendente": "Ausstehend", + "Pending": "Ausstehend", + "Per aggiornare automaticamente la sitemap ogni giorno:": "Um die Sitemap täglich automatisch zu aktualisieren:", + "Per assistenza, contatta l'amministrazione della biblioteca.": "Für Unterstützung wenden Sie sich an die Bibliotheksverwaltung.", + "Per inserire il codice JavaScript Analytics (Google Analytics, Matomo, ecc.), vai su {{variabile}} per inserire dati dinamici.": "Passen Sie den Inhalt der automatischen E-Mails mit dem TinyMCE-Editor an. Verwenden Sie Platzhalter {{variable}}, um dynamische Daten einzufügen.", + "Personalizza il contenuto delle mail automatiche con l'editor TinyMCE. Usa i segnaposto sospeso e richiede approvazione. Scegli un'opzione:": "Dieser Benutzer ist im Status gesperrt und erfordert Genehmigung. Wählen Sie eine Option:", + "Radice": "Stammverzeichnis", + "Rallenta l'importazione": "Verlangsamt den Import", + "Recati in biblioteca durante gli orari di apertura per ritirare il libro.": "Besuchen Sie die Bibliothek während der Öffnungszeiten, um das Buch abzuholen.", + "Recensione (opzionale)": "Rezension (optional)", + "Recensione approvata": "Rezension genehmigt", + "Recensione del": "Rezension vom", + "Recensione eliminata": "Rezension gelöscht", + "Recensione inviata con successo!": "Rezension erfolgreich eingereicht!", + "Recensione inviata con successo! Sarà pubblicata dopo l'approvazione di un amministratore.": "Rezension erfolgreich eingereicht! Sie wird nach der Genehmigung durch einen Administrator veröffentlicht.", + "Recensione inviata!": "Rezension eingereicht!", + "Recensione per \"%s\" da %s - %s": "Rezension für \"%s\" von %s – %s", + "Recensione rifiutata": "Rezension abgelehnt", + "Recensioni": "Rezensionen", + "Recensioni Approvate": "Genehmigte Rezensionen", + "Recensioni Rifiutate": "Abgelehnte Rezensionen", + "Recensioni utenti": "Benutzerrezensionen", + "Recente": "Aktuell", + "Recupera Password": "Passwort wiederherstellen", + "Referente": "Ansprechperson", + "Registra Restituzione": "Rückgabe erfassen", + "Registra prestito": "Ausleihe erfassen", + "Registra restituzione": "Rückgabe erfassen", + "Registra restituzione prestito": "Ausleih-Rückgabe erfassen", + "Registra una prenotazione per permettere ad un utente di riservare un libro specifico": "Erfassen Sie eine Vormerkung, um einem Benutzer die Reservierung eines bestimmten Buches zu ermöglichen", + "Registrati": "Registrieren", + "Registrati Ora": "Jetzt registrieren", + "Registrato da": "Registriert von", + "Registrato il": "Registriert am", + "Registrazione": "Registrierung", + "Registrazione Completata": "Registrierung abgeschlossen", + "Registrazione completata": "Registrierung abgeschlossen", + "Registrazione completata! Effettua l'accesso": "Registrierung abgeschlossen! Bitte melden Sie sich an", + "Registrazione ricevuta": "Registrierung eingegangen", + "Registro delle migrazioni database applicate": "Register der angewendeten Datenbankmigrationen", + "Reimposta password": "Passwort zurücksetzen", + "Reindirizza automaticamente tutte le richieste HTTP a HTTPS": "Alle HTTP-Anfragen automatisch auf HTTPS umleiten", + "Reindirizzamento verso dominio non autorizzato bloccato.": "Weiterleitung zu einer nicht autorisierten Domain blockiert.", + "Reinstalla da Capo": "Von Grund auf neu installieren", + "Remoto": "Remote", + "Report": "Bericht", + "Report Integrità Dati": "Datenintegritätsbericht", + "Report e analisi": "Berichte und Analysen", + "Requisiti": "Anforderungen", + "Requisiti del plugin:": "Plugin-Anforderungen:", + "Requisiti di Sistema": "Systemanforderungen", + "Requisiti di sistema non soddisfatti": "Systemanforderungen nicht erfüllt", + "Requisiti:": "Voraussetzungen:", + "Requisito '%s' non soddisfatto": "Voraussetzung '%s' nicht erfüllt", + "Reset": "Zurücksetzen", + "Reset Filtri": "Filter zurücksetzen", + "Reset anni": "Jahre zurücksetzen", + "Resetta Password": "Passwort zurücksetzen", + "Recupera la tua password": "Stellen Sie Ihr Passwort wieder her", + "Abbiamo ricevuto una richiesta di reset della password per il tuo account.": "Wir haben eine Anfrage zum Zurücksetzen des Passworts für Ihr Konto erhalten.", + "Clicca sul pulsante qui sotto per resettare la tua password:": "Klicken Sie auf die Schaltfläche unten, um Ihr Passwort zurückzusetzen:", + "Oppure copia e incolla questo link nel tuo browser:": "Oder kopieren Sie diesen Link und fügen Sie ihn in Ihren Browser ein:", + "Questo link scadrà tra 2 ore.": "Dieser Link läuft in 2 Stunden ab.", + "Se non hai richiesto il reset della password, puoi ignorare questa email. Il tuo account rimane sicuro.": "Wenn Sie kein Zurücksetzen des Passworts angefordert haben, können Sie diese E-Mail ignorieren. Ihr Konto bleibt sicher.", + "Ciao": "Hallo", + "Restituito": "Zurückgegeben", + "Restituito in ritardo": "Verspätet zurückgegeben", + "Restituito regolarmente": "Fristgerecht zurückgegeben", + "Restituzione": "Rückgabe", + "Restituzione prestito": "Ausleih-Rückgabe", + "Restituzione prestito #%s": "Ausleih-Rückgabe #%s", + "Retention: 90 giorni": "Aufbewahrung: 90 Tage", + "Revocate %d sessioni": "%d Sitzungen widerrufen", + "Riassegnazione copia fallita": "Exemplar-Neuzuweisung fehlgeschlagen", + "Riassegnazione prenotazione nuova copia fallita": "Neuzuweisung der Vormerkung auf neues Exemplar fehlgeschlagen", + "Ricalcola Disponibilità": "Verfügbarkeit neu berechnen", + "Ricarica Dewey (seed)": "Dewey neu laden (Seed)", + "Ricarica Pagina": "Seite neu laden", + "Ricerca": "Suche", + "Ricerca Libro": "Buch suchen", + "Ricerca Utente": "Benutzer suchen", + "Ricerca in corso...": "Suche läuft...", + "Ricerca rapida": "Schnellsuche", + "Ricerche recenti": "Kürzliche Suchen", + "Riceverai un link di reset via email. Il link sarà valido per 24 ore.": "Sie erhalten einen Zurücksetzungslink per E-Mail. Der Link ist 24 Stunden gültig.", + "Riceverai una conferma via email appena la richiesta sarà approvata.": "Sie erhalten eine E-Mail-Bestätigung, sobald die Anfrage genehmigt wurde.", + "Ricevuta di Prestito": "Ausleihquittung", + "Ricevuta di prestito bibliotecario": "Bibliotheks-Ausleihquittung", + "Ricevuto": "Empfangen", + "Richiede App:": "Erfordert App:", + "Richiede PHP:": "Erfordert PHP:", + "Richiedi Prestito": "Ausleihe anfordern", + "Richiedi approvazione admin dopo la conferma email": "Administrator-Genehmigung nach E-Mail-Bestätigung erforderlich", + "Richiedono attenzione immediata": "Erfordern sofortige Aufmerksamkeit", + "Richiesta Inviata!": "Anfrage gesendet!", + "Richiesta Pendente": "Ausstehende Anfrage", + "Richiesta Prestito": "Ausleihanfrage", + "Richiesta del %s": "Anfrage vom %s", + "Richiesta di prestito dal %1$s al %2$s": "Ausleihanfrage vom %1$s bis %2$s", + "Richiesta di prestito dal %s per 1 mese": "Ausleihanfrage ab %s für 1 Monat", + "Richiesta di prestito inviata con successo": "Ausleihanfrage erfolgreich gesendet", + "Richiesta di prestito per \"%s\" da %s dal %s al %s": "Ausleihanfrage für \"%s\" von %s vom %s bis %s", + "Richiesta di prestito per \\": "Ausleihanfrage für \\", + "Richiesta fallita:": "Anfrage fehlgeschlagen:", + "Richiesta inviata con successo!": "Anfrage erfolgreich gesendet!", + "Richiesta inviata!": "Anfrage gesendet!", + "Richiesta manuale": "Manuelle Anfrage", + "Richiesta prestito": "Ausleihanfrage", + "Richiesta rifiutata": "Anfrage abgelehnt", + "Richieste Manuali": "Manuelle Anfragen", + "Richieste Pendenti": "Ausstehende Anfragen", + "Richieste di Prestito": "Ausleihanfragen", + "Richieste di Prestito in Attesa": "Ausstehende Ausleihanfragen", + "Richieste in Attesa": "Ausstehende Anfragen", + "Richieste in Sospeso": "Ausstehende Anfragen", + "Richieste in sospeso": "Ausstehende Anfragen", + "Richieste pendenti": "Ausstehende Anfragen", + "Richiesto": "Erforderlich", + "Richiesto il": "Angefordert am", + "Richiesto il %s": "Angefordert am %s", + "Richiesto:": "Erforderlich:", + "Ricordami": "Angemeldet bleiben", + "Ricordi la password?": "Erinnern Sie sich an Ihr Passwort?", + "Riepilogo Installazione": "Installationszusammenfassung", + "Riepilogo wishlist": "Wunschlisten-Zusammenfassung", + "Rifiuta": "Ablehnen", + "Rifiuta Prestito?": "Ausleihe ablehnen?", + "Rifiuta non essenziali": "Nicht-essentielle ablehnen", + "Rifiuta prestito": "Ausleihe ablehnen", + "Rifiuta recensione": "Rezension ablehnen", + "Rifiutata": "Abgelehnt", + "Rifiutata il": "Abgelehnt am", + "Rifiutato": "Abgelehnt", + "Rifiuterai questa richiesta di prestito?": "Möchten Sie diese Ausleihanfrage ablehnen?", + "Riga %d (%s): %s": "Zeile %d (%s): %s", + "Riga %d: numero di colonne non corrispondente": "Zeile %d: Spaltenanzahl stimmt nicht überein", + "Rigenera Sitemap": "Sitemap neu generieren", + "Rigenera adesso": "Jetzt neu generieren", + "Rimuovere dalla wishlist?": "Von der Wunschliste entfernen?", + "Rimuovere i libri associati prima di eliminare l'autore": "Entfernen Sie die zugehörigen Bücher, bevor Sie den Autor löschen", + "Rimuovere i libri dell'editore prima di eliminarlo": "Entfernen Sie die Bücher des Verlags, bevor Sie ihn löschen", + "Rimuovi": "Entfernen", + "Rimuovi dai Preferiti": "Aus Favoriten entfernen", + "Rimuovi dalla wishlist": "Von der Wunschliste entfernen", + "Rimuovi editore": "Verlag entfernen", + "Rimuovi filtro": "Filter entfernen", + "Rimuovi immagine": "Bild entfernen", + "Rimuovi immagine attuale": "Aktuelles Bild entfernen", + "Rimuovi immagine di sfondo attuale": "Aktuelles Hintergrundbild entfernen", + "Rimuovi logo attuale": "Aktuelles Logo entfernen", + "Rimuovi tutti i filtri": "Alle Filter entfernen", + "Rinnova": "Verlängern", + "Rinnova prestito (+14 giorni)": "Ausleihe verlängern (+14 Tage)", + "Rinnova prestito?": "Ausleihe verlängern?", + "Rinnovare il prestito? La scadenza verrà estesa di 14 giorni.": "Ausleihe verlängern? Das Fälligkeitsdatum wird um 14 Tage verlängert.", + "Rinnovi": "Verlängerungen", + "Rinnovi Effettuati:": "Durchgeführte Verlängerungen:", + "Rinnovi effettuati": "Durchgeführte Verlängerungen", + "Rinnovo prestito fallito": "Ausleihverlängerung fehlgeschlagen", + "Riordina trascinando gli elementi": "Durch Ziehen der Elemente neu anordnen", + "Ripara automaticamente gli errori rilevati": "Erkannte Fehler automatisch reparieren", + "Ripeti la password": "Passwort wiederholen", + "Ripristina": "Zurücksetzen", + "Ripristina Default": "Standard wiederherstellen", + "Ripristinare i colori?": "Farben zurücksetzen?", + "Ripristinare questo backup?": "Diese Sicherung wiederherstellen?", + "Ripristinato": "Wiederhergestellt", + "Ripristino": "Wiederherstellung", + "Riprova": "Erneut versuchen", + "Riservato": "Reserviert", + "Risolvi i problemi indicati sopra e ricarica la pagina.": "Beheben Sie die oben angegebenen Probleme und laden Sie die Seite neu.", + "Risorsa": "Ressource", + "Risorse esterne": "Externe Ressourcen", + "Rispettiamo il tuo diritto alla privacy. Puoi scegliere di non consentire alcuni tipi di cookie. Le tue preferenze si applicheranno all'intero sito web.": "Wir respektieren Ihr Recht auf Datenschutz. Sie können bestimmte Arten von Cookies ablehnen. Ihre Einstellungen gelten für die gesamte Website.", + "Rispondi": "Antworten", + "Risposta": "Antwort", + "Risposta JSON": "JSON-Antwort", + "Risposta non valida dal servizio ISBN.": "Ungültige Antwort vom ISBN-Dienst.", + "Risposta non valida. Controlla la console per dettagli.": "Ungültige Antwort. Überprüfen Sie die Konsole für Details.", + "Risultati": "Ergebnisse", + "Risultati per '%s' - Catalogo Biblioteca": "Ergebnisse für '%s' – Bibliothekskatalog", + "Ritiri da Confermare": "Zu bestätigende Abholungen", + "Ritiri scaduti elaborati": "Abgelaufene Abholungen verarbeitet", + "Ritiro annullato": "Abholung storniert", + "Ritiro annullato con successo": "Abholung erfolgreich storniert", + "Ritiro confermato con successo": "Abholung erfolgreich bestätigt", + "Ritiro confermato!": "Abholung bestätigt!", + "Ritiro confermato! Il prestito è ora in corso.": "Abholung bestätigt! Die Ausleihe ist jetzt aktiv.", + "Ritiro già confermato o modificato": "Abholung bereits bestätigt oder geändert", + "Ritiro non effettuato": "Abholung nicht erfolgt", + "Ritiro non effettuato entro il termine previsto": "Abholung nicht innerhalb der Frist erfolgt", + "Ritiro scaduto": "Abholung abgelaufen", + "Ritiro scaduto il": "Abholung abgelaufen am", + "Rossi": "Mustermann", + "Route Comuni": "Allgemeine Routen", + "Route Tradotte": "Übersetzte Routen", + "Route aggiornate con successo": "Routen erfolgreich aktualisiert", + "Ruolo": "Rolle", + "Ruolo:": "Rolle:", + "SBN Italia - Integrato": "SBN Italien - Integriert", + "SDK": "SDK", + "SEO - Meta Description": "SEO – Meta-Beschreibung", + "SEO Base": "SEO-Grundlagen", + "SEO Base (Meta Tags)": "SEO-Grundlagen (Meta-Tags)", + "SMTP (custom)": "SMTP (benutzerdefiniert)", + "SMTP Host": "SMTP-Host", + "SMTP Password": "SMTP-Passwort", + "SMTP Personalizzato": "Benutzerdefiniertes SMTP", + "SMTP Port": "SMTP-Port", + "SMTP Username": "SMTP-Benutzername", + "SMTP personalizzato": "Benutzerdefiniertes SMTP", + "SSL": "SSL", + "Salva": "Speichern", + "Salva API Key": "API-Schlüssel speichern", + "Salva Autore": "Autor speichern", + "Salva Configurazione": "Konfiguration speichern", + "Salva Contatti": "Kontakte speichern", + "Salva Editore": "Verlag speichern", + "Salva Identità": "Identität speichern", + "Salva Impostazioni": "Einstellungen speichern", + "Salva Impostazioni Avanzate": "Erweiterte Einstellungen speichern", + "Salva Libro": "Buch speichern", + "Salva Lingua": "Sprache speichern", + "Salva Modifiche": "Änderungen speichern", + "Salva Privacy Policy": "Datenschutzerklärung speichern", + "Salva Route": "Routen speichern", + "Salva Template": "Vorlage speichern", + "Salva Testi Cookie Banner": "Cookie-Banner-Texte speichern", + "Salva filtri correnti": "Aktuelle Filter speichern", + "Salva identità": "Identität speichern", + "Salva impostazioni email": "E-Mail-Einstellungen speichern", + "Salva impostazioni etichette": "Etiketteneinstellungen speichern", + "Salva in UTF-8": "Als UTF-8 speichern", + "Salva la API key in un luogo sicuro. Non sarà possibile visualizzarla nuovamente dopo la creazione.": "Speichern Sie den API-Schlüssel an einem sicheren Ort. Er kann nach der Erstellung nicht erneut angezeigt werden.", + "Salva modifiche": "Änderungen speichern", + "Salva modifiche Homepage": "Homepage-Änderungen speichern", + "Salva template": "Vorlage speichern", + "Salva testi banner": "Banner-Texte speichern", + "Salva utente": "Benutzer speichern", + "Salvataggio in corso...": "Wird gespeichert...", + "Salvataggio...": "Wird gespeichert...", + "Salvato con successo.": "Erfolgreich gespeichert.", + "Sarà pubblicata dopo l'approvazione di un amministratore.": "Wird nach der Genehmigung durch einen Administrator veröffentlicht.", + "Sarà utilizzata per accedere al sistema": "Wird für die Anmeldung am System verwendet", + "Sarà visualizzato nell'header e in tutto il sito": "Wird in der Kopfzeile und auf der gesamten Website angezeigt", + "Scade": "Läuft ab", + "Scadenza": "Fälligkeitsdatum", + "Scadenza Mancante": "Fehlendes Fälligkeitsdatum", + "Scadenza prenotazione": "Ablauf der Vormerkung", + "Scadenza ritiro": "Abholfrist", + "Scadenza ritiro:": "Abholfrist:", + "Scadenza tessera": "Kartenablauf", + "Scadenza:": "Fälligkeitsdatum:", + "Scadenza: %s": "Ablauf: %s", + "Scaduta": "Abgelaufen", + "Scaduta il": "Abgelaufen am", + "Scaduto": "Abgelaufen", + "Scaduto il:": "Abgelaufen am:", + "Scaffale": "Regal", + "Scaffale *": "Regal *", + "Scaffale Narrativa": "Belletristik-Regal", + "Scaffale creato": "Schrank erstellt", + "Scaffale eliminato": "Schrank gelöscht", + "Scaffale obbligatorio": "Schrank erforderlich", + "Scaffali": "Regale", + "Scaffali e mensole": "Regale und Regalböden", + "Scarica": "Herunterladen", + "Scarica Audiobook": "Hörbuch herunterladen", + "Scarica Errori": "Fehler herunterladen", + "Scarica JSON": "JSON herunterladen", + "Scarica PDF": "PDF herunterladen", + "Scarica Ricevuta PDF": "PDF-Quittung herunterladen", + "Scarica Script SQL": "SQL-Skript herunterladen", + "Scarica automaticamente la ricevuta PDF dopo la creazione del prestito.": "Die PDF-Quittung nach der Erstellung der Ausleihe automatisch herunterladen.", + "Scarica copertine": "Cover abrufen", + "Scarica eBook": "eBook herunterladen", + "Scarica esempio_import_libri.csv": "beispiel_import_buecher.csv herunterladen", + "Scarica il CSV di esempio con 3 libri già compilati per capire il formato corretto e iniziare subito.": "Laden Sie die Beispiel-CSV-Datei mit 3 vorausgefüllten Büchern herunter, um das richtige Format zu verstehen und sofort loszulegen.", + "Scarica il file CSV di esempio": "Beispiel-CSV-Datei herunterladen", + "Scarica il report CSV per analizzare gli errori in dettaglio": "Laden Sie den CSV-Bericht herunter, um Fehler im Detail zu analysieren", + "Scarica l'eBook in formato digitale": "Das eBook im digitalen Format herunterladen", + "Scarica ricevuta PDF": "PDF-Quittung herunterladen", + "Scaricamento copertine...": "Cover werden abgerufen...", + "Scarso": "Mangelhaft", + "Scegli": "Auswählen", + "Scegli Icona Font Awesome": "Font Awesome Icon auswählen", + "Scegli come inviare le email dal sistema. Puoi usare la funzione PHP mail(), PHPMailer o un server SMTP esterno.": "Wählen Sie, wie E-Mails vom System gesendet werden sollen. Sie können die PHP-Funktion mail(), PHPMailer oder einen externen SMTP-Server verwenden.", + "Scegli come inviare le email dal sistema. Puoi usare la funzione PHP /usr/bin/php con il percorso corretto di PHP sul tuo server": "Ersetzen Sie /usr/bin/php durch den korrekten PHP-Pfad auf Ihrem Server", + "Sottocategoria": "Unterkategorie", + "Sottodomini devono supportare HTTPS (se usati)": "Subdomains müssen HTTPS unterstützen (falls verwendet)", + "Sottogenere": "Untergenre", + "Sottogenere specifico (opzionale)": "Spezifisches Untergenre (optional)", + "Sottogeneri": "Untergenres", + "Sottotitolo": "Untertitel", + "Sottotitolo CTA": "CTA-Untertitel", + "Sottotitolo del libro (opzionale)": "Buchuntertitel (optional)", + "Sottotitolo sezione": "Bereichsuntertitel", + "Spazio libero": "Freier Speicherplatz", + "Staff": "Mitarbeiter", + "Staff:": "Mitarbeiter:", + "Stai per aggiornare Pinakes alla versione": "Sie sind dabei, Pinakes auf Version zu aktualisieren", + "Stai per eliminare": "Sie sind dabei zu löschen", + "Stai per unire": "Sie sind dabei zusammenzuführen", + "Stai utilizzando l'ultima versione disponibile.": "Sie verwenden die neueste verfügbare Version.", + "Stai utilizzando l'ultima versione.": "Sie verwenden die neueste Version.", + "Stampa": "Drucken", + "Stampa etichetta": "Etikett drucken", + "Standard": "Standard", + "Standard Tirrenia catalogazione": "Standard Tirrenia-Katalogisierung", + "Standard dorso libri (più comune)": "Standard-Buchrücken (am häufigsten)", + "Statistiche": "Statistiken", + "Statistiche Prestiti": "Ausleihstatistiken", + "Statistiche Rapide": "Schnellstatistiken", + "Statistiche aggiornate per": "Statistiken aktualisiert für", + "Statistiche:": "Statistiken:", + "Stato": "Status", + "Stato API": "API-Status", + "Stato API key aggiornato con successo.": "API-Schlüssel-Status erfolgreich aktualisiert.", + "Stato Incongruente": "Statusabweichung", + "Stato aggiornato per %d libri": "Status für %d Bücher aktualisiert", + "Stato attuale:": "Aktueller Status:", + "Stato dell'installazione:": "Installationsstatus:", + "Stato della copia": "Exemplar-Status", + "Stato della copia aggiornato con successo.": "Exemplar-Status erfolgreich aktualisiert.", + "Stato e Gestione": "Status und Verwaltung", + "Stato non valido": "Ungültiger Status", + "Stato non valido.": "Ungültiger Status.", + "Stato prestito": "Ausleihstatus", + "Stato prestito corrente": "Aktueller Ausleihstatus", + "Stato prestito non valido.": "Ungültiger Ausleihstatus.", + "Stato:": "Status:", + "Status attuale di questa copia del libro": "Aktueller Status dieses Buchexemplars", + "Step 1: Creazione backup": "Schritt 1: Backup erstellen", + "Step 2: Download aggiornamento": "Schritt 2: Aktualisierung herunterladen", + "Step 3: Installazione aggiornamento": "Schritt 3: Aktualisierung installieren", + "Storico Import": "Importverlauf", + "Storico Prestiti": "Ausleihverlauf", + "Nella stessa collana": "In derselben Reihe", + "Volumi di quest'opera": "Bände dieses Werks", + "volumi": "Bände", + "Questo libro è il volume %s dell'opera": "Dieses Buch ist Band %s des Werks", + "Gestione Collane": "Reihenverwaltung", + "Gestisci le collane e le serie di libri": "Buchreihen und Serien verwalten", + "Collane totali": "Reihen insgesamt", + "Libri nelle collane": "Bücher in Reihen", + "Nessuna collana trovata. Aggiungi una collana a un libro per iniziare.": "Keine Reihen gefunden. Fügen Sie einem Buch eine Reihe hinzu.", + "Collane": "Reihen", + "Serie e collane di libri": "Serien und Buchreihen", + "Rinomina collana": "Reihe umbenennen", + "Rinomina": "Umbenennen", + "Unisci con altra collana": "Mit anderer Reihe zusammenführen", + "Nome collana di destinazione": "Name der Zielreihe", + "Unisci": "Zusammenführen", + "Sei sicuro? Tutti i libri verranno spostati nella collana di destinazione.": "Sind Sie sicher? Alle Bücher werden in die Zielreihe verschoben.", + "Crea opera multi-volume": "Mehrbändiges Werk erstellen", + "Crea un libro padre che raccoglie tutti i volumi di questa collana.": "Erstellen Sie ein übergeordnetes Buch, das alle Bände dieser Reihe enthält.", + "Titolo dell'opera completa": "Titel des Gesamtwerks", + "Crea opera": "Werk erstellen", + "Collana rinominata: %d libri aggiornati": "Reihe umbenannt: %d Bücher aktualisiert", + "Nome collana non valido": "Ungültiger Reihenname", + "Collane unite: %d libri spostati in \"%s\"": "Reihen zusammengeführt: %d Bücher in \"%s\" verschoben", + "Parametri non validi per l'unione": "Ungültige Parameter für Zusammenführung", + "Opera \"%s\" creata con %d volumi": "Werk \"%s\" erstellt mit %d Bänden", + "Errore nella creazione dell'opera": "Fehler beim Erstellen des Werks", + "Aggiungi volume": "Band hinzufügen", + "Cartaceo": "Taschenbuch", + "eBook": "eBook", + "Audiolibro": "Hörbuch", + "CD Audio": "Audio-CD", + "Vinile": "Schallplatte", + "LP": "LP", + "Cassetta": "Kassette", + "DVD": "DVD", + "Blu-ray": "Blu-ray", + "Digitale": "Digital", + "Cerca libro": "Buch suchen", + "Titolo o ISBN...": "Titel oder ISBN...", + "Numero volume": "Bandnummer", + "Seleziona un libro": "Buch auswählen", + "Volume aggiunto": "Band hinzugefügt", + "Rimuovi volume?": "Band entfernen?", + "Il libro non sarà eliminato, solo la relazione.": "Das Buch wird nicht gelöscht, nur die Verknüpfung.", + "Volume rimosso": "Band entfernt", + "Configura come opera multi-volume": "Als mehrbändiges Werk konfigurieren", + "Errore database": "Datenbankfehler", + "Nuova Collana": "Neue Reihe", + "Collana \"%s\" creata": "Reihe \"%s\" erstellt", + "Descrizione della collana...": "Beschreibung der Reihe...", + "Salva descrizione": "Beschreibung speichern", + "Descrizione salvata": "Beschreibung gespeichert", + "Assegna collana": "Reihe zuweisen", + "Collana assegnata": "Reihe zugewiesen", + "%d libri assegnati alla collana \"%s\"": "%d Bücher der Reihe \"%s\" zugewiesen", + "Elimina collana": "Reihe löschen", + "Rimuove la collana da tutti i libri. I libri non verranno eliminati.": "Entfernen Sie die Reihe von allen Büchern. Die Bücher werden nicht gelöscht.", + "Sei sicuro? La collana verrà rimossa da tutti i libri.": "Sind Sie sicher? Die Reihe wird von allen Büchern entfernt.", + "Collana \"%s\" eliminata (%d libri aggiornati)": "Reihe \"%s\" gelöscht (%d Bücher aktualisiert)", + "International Standard Serial Number (per periodici)": "International Standard Serial Number (für Zeitschriften)", + "ISSN Non Valido": "Ungültige ISSN", + "ISSN deve essere nel formato XXXX-XXXX (8 cifre, l'ultima può essere X).": "ISSN muss im Format XXXX-XXXX sein (8 Ziffern, die letzte kann X sein).", + "ISSN non valido. Il formato corretto è XXXX-XXXX (8 cifre, l'ultima può essere X).": "Ungültige ISSN. Das korrekte Format ist XXXX-XXXX (8 Ziffern; die letzte kann X sein).", + "Relazione ciclica: questo libro è già opera padre del libro selezionato": "Zyklische Beziehung: Dieses Buch ist bereits ein übergeordnetes Werk des ausgewählten Buches", + "Assegna": "Zuweisen", + "es. 1234-5678": "z.B. 1234-5678", + "es. Harry Potter": "z.B. Harry Potter", + "Identificatori": "Kennungen", + "Inserisci un nome": "Namen eingeben", + "Nome della collana": "Reihenname", + "ISSN": "ISSN", + "Volumi": "Bände", + "Successiva": "Nächste", + "Successivo": "Nächste", + "Successo": "Erfolg", + "Successo!": "Erfolg!", + "Suggerimenti": "Tipps", + "Suggerimento": "Tipp", + "Suggerimento:": "Tipp:", + "Suggerisci collocazione": "Standort vorschlagen", + "Suggerito scaffale #${data.scaffale_id}": "Vorgeschlagenes Regal #${data.scaffale_id}", + "Suggerito:": "Vorgeschlagen:", + "Summary (Immagine Piccola)": "Summary (kleines Bild)", + "Summary Large Image (Immagine Grande)": "Summary Large Image (großes Bild)", + "Supporto": "Support", + "Sì": "Ja", + "Sì, Aggiorna": "Ja, aktualisieren", + "Sì, Annulla": "Ja, stornieren", + "Sì, Salva": "Ja, speichern", + "Sì, aggiorna": "Ja, aktualisieren", + "Sì, applica": "Ja, anwenden", + "Sì, approva": "Ja, genehmigen", + "Sì, attiva": "Ja, aktivieren", + "Sì, correggi": "Ja, beheben", + "Sì, crea indici": "Ja, Indizes erstellen", + "Sì, crea tabelle": "Ja, Tabellen erstellen", + "Sì, disattiva": "Ja, deaktivieren", + "Sì, disinstalla": "Ja, deinstallieren", + "Sì, elimina": "Ja, löschen", + "Sì, elimina!": "Ja, löschen!", + "Sì, esegui": "Ja, ausführen", + "Sì, rimuovi": "Ja, entfernen", + "Sì, sincronizza": "Ja, synchronisieren", + "TLS": "TLS", + "Tabella": "Tabelle", + "Tabella %s creata": "Tabelle %s erstellt", + "Tabelle create:": "Erstellte Tabellen:", + "Tabelle di Sistema": "Systemtabellen", + "Tabelle richieste per l'aggiornamento": "Für Aktualisierungen erforderliche Tabellen", + "Tag": "Tag", + "Telefono": "Telefon", + "Telefono *": "Telefon *", + "Telefono Referente": "Telefon Ansprechpartner", + "Telefono:": "Telefon:", + "Tema": "Design", + "Tema Attivo": "Aktives Theme", + "Tema attivato con successo": "Theme erfolgreich aktiviert", + "Tema non trovato": "Theme nicht gefunden", + "Tema salvato con successo": "Theme erfolgreich gespeichert", + "Temi": "Themes", + "Temi Disponibili": "Verfügbare Themes", + "Template": "Vorlagen", + "Template Email": "E-Mail-Vorlagen", + "Template aggiornato con successo!": "Vorlage erfolgreich aktualisiert!", + "Template email": "E-Mail-Vorlagen", + "Termini": "Bedingungen", + "Termini di Servizio": "Nutzungsbedingungen", + "Tessera biblioteca": "Bibliotheksausweis", + "Test": "Test", + "Test Connessione": "Verbindungstest", + "Test Endpoint": "Endpoint testen", + "Test del cron job:": "Cron-Job-Test:", + "Testi Banner": "Banner-Texte", + "Testi Banner Cookie": "Cookie-Banner-Texte", + "Testi Banner Iniziale": "Texte des initialen Banners", + "Testi Cookie Banner": "Cookie-Banner-Texte", + "Testi Modale Preferenze": "Texte des Einstellungsdialogs", + "Testi categorie cookie": "Texte der Cookie-Kategorien", + "Testo Bottone": "Schaltflächentext", + "Testo Privacy": "Datenschutztext", + "Testo che apparirà nel footer del sito": "Text, der in der Fußzeile der Website angezeigt wird", + "Testo checkbox": "Checkbox-Text", + "Testo della checkbox privacy nel form": "Datenschutz-Checkbox-Text im Formular", + "Testo introduttivo": "Einleitungstext", + "Testo principale mostrato nel banner. Puoi usare HTML.": "Haupttext im Banner. Sie können HTML verwenden.", + "Testo pulsante": "Schaltflächentext", + "Testo pulsante \"Accetta tutti\"": "Schaltflächentext \"Alle akzeptieren\"", + "Testo pulsante \"Preferenze\"": "Schaltflächentext \"Einstellungen\"", + "Testo pulsante \"Rifiuta non essenziali\"": "Schaltflächentext \"Nicht erforderliche ablehnen\"", + "Testo pulsante \"Salva selezionati\"": "Schaltflächentext \"Auswahl speichern\"", + "Ti abbiamo inviato un'email con il link per confermare l'indirizzo.": "Wir haben Ihnen eine E-Mail mit dem Bestätigungslink gesendet.", + "Timeout (secondi)": "Timeout (Sekunden)", + "Timestamp": "Zeitstempel", + "Tipo": "Typ", + "Tipo Acquisizione": "Erwerbungsart", + "Tipo Card": "Kartentyp", + "Tipo Contenuto": "Inhaltstyp", + "Tipo MIME non valido. Solo file CSV sono accettati.": "Ungültiger MIME-Typ. Es werden nur CSV-Dateien akzeptiert.", + "Tipo OG": "OG-Typ", + "Tipo Twitter Card": "Twitter Card-Typ", + "Tipo Utente": "Benutzertyp", + "Tipo acquisizione": "Erwerbungsart", + "Tipo di contenuto per Open Graph. Scegli 'Website' per la homepage.": "Inhaltstyp für Open Graph. Wählen Sie 'Website' für die Startseite.", + "Tipo di file non consentito. Sono ammessi solo: %s": "Dateityp nicht erlaubt. Nur erlaubt: %s", + "Tipo di file non supportato. Solo JPEG e PNG sono consentiti.": "Nicht unterstützter Dateityp. Nur JPEG und PNG sind erlaubt.", + "Tipo di file non valido.": "Ungültiger Dateityp.", + "Tipo di file non valido. Carica un'immagine reale.": "Ungültiger Dateityp. Bitte laden Sie ein echtes Bild hoch.", + "Tipo di issue non valido": "Ungültiger Problem-Typ", + "Tipo non valido": "Ungültiger Typ.", + "Tipo utente": "Benutzertyp", + "Tipologia account": "Kontotyp", + "Tipologia:": "Typ:", + "Titolo": "Titel", + "Titolo (opzionale)": "Titel (optional)", + "Titolo 1": "Überschrift 1", + "Titolo 2": "Überschrift 2", + "Titolo 3": "Überschrift 3", + "Titolo A-Z": "Titel A–Z", + "Titolo CTA": "CTA-Titel", + "Titolo Evento": "Veranstaltungstitel", + "Titolo Modale": "Dialog-Titel", + "Titolo OG": "OG-Titel", + "Titolo Open Graph": "Open-Graph-Titel", + "Titolo Pagina": "Seitentitel", + "Titolo SEO": "SEO-Titel", + "Titolo Twitter": "Twitter-Titel", + "Titolo Z-A": "Titel Z–A", + "Titolo del libro": "Buchtitel", + "Titolo della sezione e le 4 card con le caratteristiche": "Bereichstitel und die 4 Funktionskarten", + "Titolo e descrizione mostrati sopra i caroselli dei generi": "Titel und Beschreibung über den Genre-Karussells", + "Titolo libro": "Buchtitel", + "Titolo modale": "Modal-Titel", + "Titolo mostrato quando condividi su Facebook/LinkedIn. Se vuoto, usa il titolo SEO o hero.": "Titel, der beim Teilen auf Facebook/LinkedIn angezeigt wird. Wenn leer, wird der SEO- oder Hero-Titel verwendet.", + "Titolo non disponibile": "Titel nicht verfügbar", + "Titolo obbligatorio mancante": "Pflichtfeld Titel fehlt", + "Titolo pagina": "Seitentitel", + "Titolo per Twitter/X. Se vuoto, usa il titolo Open Graph.": "Titel für Twitter/X. Wenn leer, wird der Open Graph-Titel verwendet.", + "Titolo principale (H1)": "Haupttitel (H1)", + "Titolo sezione": "Bereichstitel", + "Titolo troppo lungo (max 255 caratteri)": "Titel zu lang (max. 255 Zeichen)", + "Titolo, sottotitolo, descrizione...": "Titel, Untertitel, Beschreibung...", + "Titolo...": "Titel...", + "Titolo:": "Titel:", + "Toggle menu": "Menü umschalten", + "Toggle search": "Suche umschalten", + "Token CSRF non valido": "Ungültiges CSRF-Token.", + "Token CSRF non valido. Riprova.": "Ungültiges CSRF-Token. Bitte versuchen Sie es erneut.", + "Token di sicurezza non valido. Riprova.": "Ungültiges Sicherheitstoken. Bitte versuchen Sie es erneut.", + "Top 10 Lettori Più Attivi": "Top 10 der aktivsten Leser", + "Top 10 Libri Più Prestati": "Top 10 der am häufigsten ausgeliehenen Bücher", + "Torna Indietro": "Zurück", + "Torna agli Eventi": "Zurück zu Veranstaltungen", + "Torna agli eventi": "Zurück zu Veranstaltungen", + "Torna ai Libri": "Zurück zu Bücher", + "Torna ai Prestiti": "Zurück zu Ausleihen", + "Torna ai temi": "Zurück zu den Themes", + "Torna al login": "Zurück zur Anmeldung", + "Torna all'Applicazione": "Zurück zur Anwendung", + "Torna all'elenco": "Zurück zur Liste", + "Torna alla Configurazione Database": "Zurück zur Datenbankkonfiguration", + "Torna alla Home": "Zurück zur Startseite", + "Torna alla categoria superiore": "Zurück zur übergeordneten Kategorie", + "Torna alla dashboard": "Zurück zum Dashboard", + "Torna alla lista": "Zurück zur Liste", + "Torna alla panoramica eventi": "Zurück zur Veranstaltungsübersicht", + "Torna alle Impostazioni": "Zurück zu Einstellungen", + "Torna alle Impostazioni CMS": "Zurück zu CMS-Einstellungen", + "Torna alle Lingue": "Zurück zu Sprachen", + "Torna alle Prenotazioni": "Zurück zu Vormerkungen", + "Total users:": "Benutzer gesamt:", + "Totale": "Gesamt", + "Totale Autori": "Autoren gesamt", + "Totale Generi": "Genres gesamt", + "Totale Libri": "Bücher gesamt", + "Totale Prestiti": "Ausleihen gesamt", + "Totale autori": "Autoren gesamt", + "Totale editori:": "Verlage gesamt:", + "Totale libri": "Bücher gesamt", + "Totale libri presenti": "Bücher im Bestand gesamt", + "Totale utenti:": "Benutzer gesamt:", + "Totale: %s righe": "Gesamt: %s Zeilen", + "Totali": "Gesamt", + "Tracce": "Titel", + "Tracklist": "Titelliste", + "Traduttore": "Übersetzer", + "Traduzioni e localizzazione": "Übersetzungen und Lokalisierung", + "Trascina le sezioni per riordinarle. L'ordine sarà salvato automaticamente e rispecchiato nella homepage.": "Ziehen Sie die Bereiche zum Neuordnen. Die Reihenfolge wird automatisch gespeichert und auf der Startseite übernommen.", + "Trascina per riordinare • Il codice deve essere univoco": "Zum Neuordnen ziehen – Der Code muss eindeutig sein", + "Trascina per riordinare • Ogni scaffale + livello deve essere univoco": "Zum Neuordnen ziehen – Jede Regal- und Fachkombination muss eindeutig sein", + "Trascina qui il file CSV o %{browse}": "CSV-Datei hierher ziehen oder %{browse}", + "Trascina qui il file ZIP del plugin o %{browse}": "Plugin-ZIP-Datei hierher ziehen oder %{browse}", + "Trascina qui il logo o %{browse}": "Logo hierher ziehen oder %{browse}", + "Trascina qui l'immagine di sfondo o %{browse}": "Hintergrundbild hierher ziehen oder %{browse}", + "Trascina qui l'immagine o %{browse}": "Bild hierher ziehen oder %{browse}", + "Trascina qui l'immagine, %{browse} o importa da": "Bild hierher ziehen, %{browse} oder importieren von", + "Trascina qui la copertina del libro o %{browse}": "Buchcover hierher ziehen oder %{browse}", + "Trascina qui la copertina del libro o clicca per selezionare": "Buchcover hierher ziehen oder klicken zum Auswählen", + "Trasforma Pinakes in un catalogo di sola consultazione": "Pinakes in einen reinen Katalog umwandeln", + "Trigger database configurati": "Datenbank-Trigger konfiguriert", + "Trigger database: azione manuale richiesta": "Datenbank-Trigger: manuelle Aktion erforderlich", + "Trigger importati OK": "Trigger erfolgreich importiert", + "Troppi errori durante l'import dei dati (%d errori). Primi errori:\n%s": "Zu viele Fehler beim Daten-Import (%d Fehler). Erste Fehler:\n%s", + "Troppi errori durante l'import dello schema (%d errori). Primi errori:\n%s": "Zu viele Fehler beim Schema-Import (%d Fehler). Erste Fehler:\n%s", + "Troppi tentativi. Attendi qualche minuto prima di riprovare": "Zu viele Versuche. Bitte warten Sie einige Minuten, bevor Sie es erneut versuchen", + "Trovate tabelle da backuppare": "Zu sichernde Tabellen gefunden", + "Trovato": "Gefunden", + "Tutorial": "Anleitung", + "Tutte le copie di questo libro hanno già un prestito attivo o prenotato. Attendi che una copia venga restituita.": "Alle Exemplare dieses Buches haben bereits eine aktive oder geplante Ausleihe. Bitte warten Sie, bis ein Exemplar zurückgegeben wird.", + "Tutte le copie in prestito": "Alle Exemplare ausgeliehen", + "Tutte le copie prenotate": "Alle Exemplare vorgemerkt", + "Tutte le date sono in formato ISO 8601 (YYYY-MM-DD HH:MM:SS)": "Alle Daten sind im ISO-8601-Format (YYYY-MM-DD HH:MM:SS)", + "Tutte le mensole": "Alle Fächer", + "Tutte le notifiche del sistema": "Alle Systembenachrichtigungen", + "Tutte le richieste sono state gestite.": "Alle Anfragen wurden bearbeitet.", + "Tutte le risorse del sito devono essere HTTPS": "Alle Website-Ressourcen müssen über HTTPS geladen werden", + "Tutte le route devono iniziare con": "Alle Routen müssen beginnen mit", + "Tutte le tabelle di sistema sono presenti!": "Alle Systemtabellen sind vorhanden!", + "Tutti": "Alle", + "Tutti gli anni": "Alle Jahre", + "Tutti gli autori": "Alle Autoren", + "Tutti gli editori": "Alle Verlage", + "Tutti gli eventi": "Alle Veranstaltungen", + "Tutti gli indici di performance sono presenti.": "Alle Performance-Indizes sind vorhanden.", + "Tutti gli scaffali": "Alle Regale", + "Tutti gli stati": "Alle Status", + "Tutti i controlli di integrità sono passati con successo!": "Alle Integritätsprüfungen wurden erfolgreich bestanden!", + "Tutti i diritti riservati.": "Alle Rechte vorbehalten.", + "Tutti i filtri sono stati rimossi": "Alle Filter wurden entfernt", + "Tutti i generi": "Alle Genres", + "Tutti i libri": "Alle Bücher", + "Tutti i messaggi ricevuti tramite il form contatti": "Alle über das Kontaktformular eingegangenen Nachrichten", + "Tutti i requisiti sono soddisfatti! Puoi procedere con l'installazione.": "Alle Anforderungen sind erfüllt! Sie können mit der Installation fortfahren.", + "Tutti i ruoli": "Alle Rollen", + "Tutti soddisfatti": "Alle erfüllt", + "Tutto": "Alle", + "Tutto aggiornato!": "Alles auf dem neuesten Stand!", + "Tutto sotto controllo!": "Alles unter Kontrolle!", + "Twitter": "Twitter", + "Twitter Card": "Twitter Card", + "Twitter Cards (X)": "Twitter Cards (X)", + "URL Canonico": "Kanonische URL", + "URL Canonico (opzionale)": "Kanonische URL (optional)", + "URL Canonico Mancante": "Fehlende kanonische URL", + "URL Canonico Non Valido": "Ungültige kanonische URL", + "URL Canonico Vuoto": "Leere kanonische URL", + "URL Endpoint API": "API-Endpoint-URL", + "URL Endpoint SRU": "SRU-Endpoint-URL", + "URL Non Valido": "Ungültige URL", + "URL OG": "OG-URL", + "URL completo del sito (es: https://biblioteca.example.com). Usato per link nelle email (verifica account, reset password). Se lasciato vuoto, verrà auto-rilevato.": "Vollständige Website-URL (z. B. https://biblioteca.example.com). Wird für Links in E-Mails verwendet (Kontobestätigung, Passwort zurücksetzen). Wenn leer, wird sie automatisch erkannt.", + "URL completo della pagina (auto-generato se vuoto)": "Vollständige Seiten-URL (wird automatisch generiert, wenn leer)", + "URL della pagina con la cookie policy": "URL der Seite mit der Cookie-Richtlinie", + "URL della pagina con le tecnologie dei cookie": "URL der Seite mit den Cookie-Technologien", + "URL di download non trovato": "Download-URL nicht gefunden", + "URL non valido o non permesso.": "Ungültige oder nicht erlaubte URL.", + "URL non valido.": "Ungültige URL.", + "URL principale del sito. Se vuoto, usa l'URL corrente.": "Haupt-URL der Website. Wenn leer, wird die aktuelle URL verwendet.", + "URL pubblico:": "Öffentliche URL:", + "URL sito web...": "Website-URL...", + "URL...": "URL...", + "Ultima": "Letzte", + "Ultima Versione": "Neueste Version", + "Ultima generazione:": "Letzte Generierung:", + "Ultima modifica": "Zuletzt geändert", + "Ultimi Arrivi": "Neueste Zugänge", + "Ultimi Libri Aggiunti": "Zuletzt hinzugefügte Bücher", + "Ultimi Libri Inseriti": "Zuletzt hinzugefügte Bücher", + "Ultimi aggiunti (data creazione)": "Zuletzt hinzugefügt (Erstellungsdatum)", + "Ultimi modificati (data aggiornamento)": "Zuletzt bearbeitet (Aktualisierungsdatum)", + "Ultimo": "Letzter", + "Ultimo Aggiornamento": "Letzte Aktualisierung", + "Ultimo accesso": "Letzter Zugriff", + "Ultimo aggiornamento": "Letzte Aktualisierung", + "Ultimo uso:": "Letzte Nutzung:", + "Ultimo utilizzo": "Zuletzt verwendet", + "Umberto Eco": "Umberto Eco", + "Un altro aggiornamento è già in corso. Riprova più tardi.": "Ein anderes Update läuft bereits. Bitte versuchen Sie es später erneut.", + "Un backup viene creato automaticamente prima di salvare": "Vor dem Speichern wird automatisch ein Backup erstellt", + "Un'esperienza di lettura moderna, intuitiva e sempre a portata di mano": "Ein modernes, intuitives Leseerlebnis – immer griffbereit", + "Una chiave è attualmente salvata e funzionante. Puoi aggiornarla inserendo un nuovo valore o lasciarla vuota per rimuoverla.": "Ein Schlüssel ist derzeit gespeichert und funktioniert. Sie können ihn aktualisieren, indem Sie einen neuen Wert eingeben, oder leer lassen, um ihn zu entfernen.", + "Una chiave è già salvata. Inserisci un nuovo valore per aggiornarla oppure lascia vuoto per rimuoverla.": "Ein Schlüssel ist bereits gespeichert. Geben Sie einen neuen Wert ein, um ihn zu aktualisieren, oder lassen Sie das Feld leer, um ihn zu entfernen.", + "Una descrizione completa aiuta gli utenti a conoscere meglio l'autore": "Eine ausführliche Beschreibung hilft den Benutzern, den Autor besser kennenzulernen", + "Una mensola con livello %d esiste già in questo scaffale. Usa un livello diverso.": "Ein Fach mit Ebene %d existiert bereits in diesem Regal. Verwenden Sie eine andere Ebene.", + "Una panoramica dei libri che hai salvato per non perderli di vista.": "Eine Übersicht der Bücher, die Sie gespeichert haben, um sie im Blick zu behalten.", + "Unisci autori": "Autoren zusammenführen", + "Unisci editori": "Verlage zusammenführen", + "Unisciti alla nostra community di lettori e scopri il piacere della lettura con la nostra piattaforma moderna.": "Werden Sie Teil unserer Lesergemeinschaft und entdecken Sie die Freude am Lesen mit unserer modernen Plattform.", + "Upload non valido": "Ungültiger Upload", + "Uploader non disponibile": "Uploader nicht verfügbar", + "Usa": "Verwenden", + "Usa 'localhost' (raccomandato, rileva automaticamente TCP/socket). Puoi forzare '127.0.0.1' per TCP.": "Verwenden Sie 'localhost' (empfohlen, erkennt TCP/Socket automatisch). Sie können '127.0.0.1' für TCP erzwingen.", + "Usa codici semplici (A, B, C...)": "Verwenden Sie einfache Codes (A, B, C...)", + "Usa formato: 599 oppure 599.9 oppure 599.93": "Format verwenden: 599 oder 599.9 oder 599.93", + "Usa gli endpoint specifici per il formato legacy": "Verwenden Sie die spezifischen Endpoints für das Legacy-Format", + "Usa i servizi online per precompilare automaticamente i dati del libro": "Nutzen Sie Online-Dienste, um die Buchdaten automatisch auszufüllen", + "Usa il pulsante \"Rigenera adesso\" per crearla": "Verwenden Sie die Schaltfläche \"Jetzt neu generieren\", um sie zu erstellen", + "Usa il separatore %s": "Verwenden Sie das Trennzeichen %s", + "Usa l'editor per formattare il testo, aggiungere link, immagini e altro": "Verwenden Sie den Editor, um Text zu formatieren, Links, Bilder und mehr hinzuzufügen", + "Usa l'editor per formattare il testo, aggiungere link, immagini e altro.": "Verwenden Sie den Editor, um Text zu formatieren, Links, Bilder und mehr hinzuzufügen.", + "Usa le frecce ← → per saltare": "Verwenden Sie die Pfeiltasten ← →, um zu springen", + "Usa questa azione dopo aver importato un grande numero di libri o modifiche ai contenuti CMS.": "Verwenden Sie diese Aktion nach dem Import einer großen Anzahl von Büchern oder CMS-Inhaltsänderungen.", + "Usa questo campo per personalizzare lo stile del sito senza modificare i file di tema.": "Verwenden Sie dieses Feld, um den Stil der Website anzupassen, ohne die Theme-Dateien zu ändern.", + "Usata per login e comunicazioni.": "Wird für Anmeldung und Kommunikation verwendet.", + "Username": "Benutzername", + "Users": "Benutzer", + "Utente": "Benutzer", + "Utente %s (%s) si è registrato": "Benutzer %s (%s) hat sich registriert", + "Utente admin creato:": "Admin-Benutzer erstellt:", + "Utente aggiornato con successo!": "Benutzer erfolgreich aktualisiert!", + "Utente approvato con successo!": "Benutzer erfolgreich genehmigt!", + "Utente attivato direttamente!": "Benutzer direkt aktiviert!", + "Utente creato con successo!": "Benutzer erfolgreich erstellt!", + "Utente eliminato con successo.": "Benutzer erfolgreich gelöscht.", + "Utente prenotante": "Vormerkender Benutzer", + "Utente preselezionato": "Vorausgewählter Benutzer", + "Utente sconosciuto": "Unbekannter Benutzer", + "Utente senza nome": "Unbenannter Benutzer", + "Utente:": "Benutzer:", + "Utenti": "Benutzer", + "Utenti Attivi": "Aktive Benutzer", + "Utenti in Attesa di Approvazione": "Benutzer mit ausstehender Genehmigung", + "Utenti registrati": "Registrierte Benutzer", + "Utilizza l'editor TinyMCE per formattare il testo e Uppy per caricare immagini di alta qualità. Le modifiche saranno immediatamente visibili nella pagina pubblica.": "Verwenden Sie den TinyMCE-Editor, um Text zu formatieren, und Uppy, um hochwertige Bilder hochzuladen. Änderungen werden sofort auf der öffentlichen Seite sichtbar.", + "Utilizziamo i cookie per migliorare la tua esperienza. Continuando a visitare questo sito, accetti il nostro uso dei cookie.": "Wir verwenden Cookies, um Ihre Erfahrung zu verbessern. Durch die weitere Nutzung dieser Website akzeptieren Sie unsere Verwendung von Cookies.", + "Vai": "Los", + "Vai al Login": "Zur Anmeldung", + "Vai al login": "Zur Anmeldung", + "Vai all'Applicazione": "Zur Anwendung", + "Vai all'applicazione": "Zur Anwendung", + "Vai alla Home": "Zur Startseite", + "Validazione prestito fallita": "Ausleihvalidierung fehlgeschlagen", + "Valore applicato": "Wert übernommen", + "Valore compreso tra 1 e 30 giorni. Consigliato: 3 giorni": "Wert zwischen 1 und 30 Tagen. Empfohlen: 3 Tage", + "Valore non valido": "Ungültiger Wert", + "Valutazione *": "Bewertung *", + "Valutazione non valida (1-5 stelle)": "Ungültige Bewertung (1–5 Sterne)", + "Variabili disponibili:": "Verfügbare Variablen:", + "Vecchio": "Alt", + "Vedi": "Anzeigen", + "Vedi Dettagli": "Details anzeigen", + "Vedi alternative": "Alternativen anzeigen", + "Vedi dettagli": "Details anzeigen", + "Vedi istruzioni sotto per correggere manualmente.": "Siehe Anleitung unten zur manuellen Korrektur.", + "Vedi tutte le notifiche": "Alle Benachrichtigungen anzeigen", + "Vedi tutti": "Alle anzeigen", + "Vedi tutti gli eventi": "Alle Veranstaltungen anzeigen", + "Verifica Leggibilità": "Lesbarkeit prüfen", + "Verifica che il database sia accessibile e configurato correttamente nel file .env": "Überprüfen Sie, ob die Datenbank erreichbar und in der .env-Datei korrekt konfiguriert ist", + "Verifica che le credenziali del database nel file .env siano corrette": "Überprüfen Sie, ob die Datenbank-Zugangsdaten in der .env-Datei korrekt sind", + "Verifica coerenza e integrità del database": "Datenbankkonsistenz und -integrität prüfen", + "Verifica completata OK": "Überprüfung erfolgreich abgeschlossen", + "Verifica i permessi di esecuzione: chmod +x cron/automatic-notifications.php": "Überprüfen Sie die Ausführungsberechtigungen: chmod +x cron/automatic-notifications.php", + "Verifica in corso...": "Überprüfung läuft...", + "Verifica installazione...": "Installation wird überprüft...", + "Verifica reCAPTCHA fallita. Riprova.": "reCAPTCHA-Überprüfung fehlgeschlagen. Bitte versuchen Sie es erneut.", + "Verifica versioni": "Versionen prüfen", + "Verificato": "Verifiziert", + "Verrà creato automaticamente un backup prima dell'aggiornamento.": "Vor der Aktualisierung wird automatisch ein Backup erstellt.", + "Verrà creato un backup completo del database.": "Es wird ein vollständiges Datenbank-Backup erstellt.", + "Versione": "Version", + "Versione Installata": "Installierte Version", + "Versione Installer:": "Installer-Version:", + "Versione non specificata": "Version nicht angegeben", + "Versione non trovata": "Version nicht gefunden", + "Versione:": "Version:", + "Via Roma 123, 00100 Roma RM, Italia": "Musterstraße 123, 10115 Berlin, Deutschland", + "Via, numero civico, città, CAP": "Straße, Hausnummer, Stadt, PLZ", + "Via, numero...": "Straße, Nummer...", + "Video": "Video", + "Video tutorial": "Video-Tutorial", + "Visibile": "Sichtbar", + "Visibile pubblicamente sulla pagina contatti": "Öffentlich sichtbar auf der Kontaktseite", + "Visibilità Sezione Eventi": "Sichtbarkeit des Veranstaltungsbereichs", + "Visibilità aggiornata!": "Sichtbarkeit aktualisiert!", + "Visita il sito ufficiale": "Offizielle Website besuchen", + "Vista griglia": "Rasteransicht", + "Vista tabella": "Tabellenansicht", + "Visualizza": "Anzeigen", + "Visualizza Libro": "Buch anzeigen", + "Visualizza Tutte le Categorie": "Alle Kategorien anzeigen", + "Visualizza Tutto il Catalogo": "Gesamten Katalog anzeigen", + "Visualizza dettagli": "Details anzeigen", + "Visualizza dettagli libro": "Buchdetails anzeigen", + "Visualizza e esporta l'elenco dei libri per posizione fisica": "Bücherliste nach physischem Standort anzeigen und exportieren", + "Visualizza e gestisci tutti i prestiti della biblioteca": "Alle Ausleihen der Bibliothek anzeigen und verwalten", + "Visualizza la cronologia degli import CSV e LibraryThing con report errori dettagliati": "Zeigen Sie den Verlauf der CSV- und LibraryThing-Importe mit detaillierten Fehlerberichten an", + "Visualizza pagina live": "Live-Seite anzeigen", + "Visualizzazione da _START_ a _END_ di _TOTAL_ libri": "Anzeige von _START_ bis _END_ von _TOTAL_ Büchern", + "Visualizzazione gerarchica di generi e sottogeneri": "Hierarchische Ansicht von Genres und Untergenres", + "Voci totali": "Einträge gesamt", + "Vuoi aggiornare il libro \"${title}\"?": "Möchten Sie das Buch \"${title}\" aktualisieren?", + "Vuoi aggiornare il libro \"%s\"?": "Möchten Sie das Buch \"%s\" aktualisieren?", + "Vuoi aggiornare lo stato di questa copia?": "Möchten Sie den Status dieses Exemplars aktualisieren?", + "Vuoi approvare questa recensione e renderla visibile sul sito?": "Möchten Sie diese Rezension genehmigen und auf der Website sichtbar machen?", + "Vuoi attivare questo plugin?": "Möchten Sie dieses Plugin aktivieren?", + "Vuoi aumentare il numero di copie di questo libro?": "Möchten Sie die Anzahl der Exemplare dieses Buches erhöhen?", + "Vuoi correggere automaticamente i problemi di integrità rilevati?": "Möchten Sie die erkannten Integritätsprobleme automatisch beheben?", + "Vuoi creare gli indici mancanti? Questa operazione migliorerà le performance del database.": "Möchten Sie die fehlenden Indizes erstellen? Dieser Vorgang verbessert die Datenbankleistung.", + "Vuoi creare le tabelle di sistema mancanti? Queste sono necessarie per il sistema di aggiornamento.": "Möchten Sie die fehlenden Systemtabellen erstellen? Diese sind für das Aktualisierungssystem erforderlich.", + "Vuoi disattivare questo plugin?": "Möchten Sie dieses Plugin deaktivieren?", + "Vuoi disconnettere questo dispositivo?": "Möchten Sie dieses Gerät abmelden?", + "Vuoi disconnettere tutti i dispositivi? Dovrai effettuare nuovamente l'accesso su ogni dispositivo.": "Möchten Sie alle Geräte abmelden? Sie müssen sich auf jedem Gerät erneut anmelden.", + "Vuoi eliminare definitivamente questa recensione? Questa azione non può essere annullata.": "Möchten Sie diese Rezension endgültig löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "Vuoi eliminare questo elemento?": "Möchten Sie dieses Element löschen?", + "Vuoi eseguire la manutenzione completa del sistema? Questa operazione potrebbe richiedere alcuni minuti.": "Möchten Sie die vollständige Systemwartung ausführen? Dieser Vorgang kann einige Minuten dauern.", + "Vuoi impostare APP_CANONICAL_URL a:": "Möchten Sie APP_CANONICAL_URL setzen auf:", + "Vuoi procedere?": "Möchten Sie fortfahren?", + "Vuoi rifiutare questa recensione? L'utente verrà avvisato dell'esito.": "Möchten Sie diese Rezension ablehnen? Der Benutzer wird über das Ergebnis benachrichtigt.", + "WCAG AA Conforme": "WCAG AA konform", + "Website (Sito Web)": "Website", + "Wishlist": "Wunschliste", + "Wishlist disponibile": "Wunschliste verfügbar", + "Working...": "In Bearbeitung...", + "Yes, fix": "Ja, beheben", + "Yes, run": "Ja, ausführen", + "Zona Pericolosa": "Gefahrenbereich", + "acquisto": "Kauf", + "agosto": "August", + "al": "bis", + "altamente consigliato": "dringend empfohlen", + "aprile": "April", + "attivata": "aktiviert", + "autori": "Autoren", + "autori. Questa azione non può essere annullata.": "Autoren. Diese Aktion kann nicht rückgängig gemacht werden.", + "autori. Tutti i libri verranno assegnati all'autore risultante.": "Autoren. Alle Bücher werden dem resultierenden Autor zugeordnet.", + "biblioteca, prestito libri, catalogo online, scopri libri, prenotazioni": "Bibliothek, Buchausleihe, Online-Katalog, Bücher entdecken, Vormerkungen", + "bottoni nelle card": "Schaltflächen in Karten", + "bottoni principali": "Hauptschaltflächen", + "chiavi": "Schlüssel", + "chiavi tradotte": "übersetzte Schlüssel", + "classe principale": "Hauptklasse", + "come nuovo autore": "als neuer Autor", + "completamento": "Abschluss", + "con successo": "erfolgreich", + "copi": "Exemplar(e)", + "copia": "Exemplar", + "copie": "Exemplare", + "crontab -e": "crontab -e", + "danneggiato": "beschädigt", + "della lingua desiderata.": "der gewünschten Sprache.", + "deve iniziare con": "muss beginnen mit", + "di": "von", + "di %s": "von %s", + "dicembre": "Dezember", + "directory": "Verzeichnisse", + "disattivata": "deaktiviert", + "disponibile": "verfügbar", + "disponibili ora": "jetzt verfügbar", + "donazione": "Spende", + "dopo aver completato l'installazione.": "nach Abschluss der Installation.", + "eBook (PDF/ePub)": "eBook (PDF/ePub)", + "eBook caricato!": "eBook hochgeladen!", + "eBook disponibile": "eBook verfügbar", + "editori": "Verlage", + "editori. Questa azione non può essere annullata.": "Verlage. Diese Aktion kann nicht rückgängig gemacht werden.", + "editori. Tutti i libri verranno assegnati all'editore risultante.": "Verlage. Alle Bücher werden dem resultierenden Verlag zugeordnet.", + "elementi": "Elemente", + "elemento": "Element", + "elimina la cartella": "den Ordner löschen", + "errore di comunicazione con il server": "Kommunikationsfehler mit dem Server", + "es. 0.450": "z. B. 0,450", + "es. 15": "z. B. 15", + "es. 19.90": "z. B. 19,90", + "es. 2020": "z. B. 2020", + "es. 2024": "z. B. 2024", + "es. 2025": "z. B. 2025", + "es. 21x14 cm": "z. B. 21x14 cm", + "es. 26 agosto 2025": "z. B. 26. August 2025", + "es. 320": "z. B. 320", + "es. 599.9, 004.6782, 641.5945": "z.B. 599.9, 004.6782, 641.5945", + "es. 599.9, 004.6782, 641.5945, 599.1": "z.B. 599.9, 004.6782, 641.5945, 599.1", + "es. 8842935786": "z. B. 8842935786", + "es. 978-88-429-3578-0": "z. B. 978-88-429-3578-0", + "es. 9788842935780": "z. B. 9788842935780", + "es. Acquisto, Donazione, Prestito": "z. B. Kauf, Spende, Ausleihe", + "es. Biblioteca Civica": "z. B. Stadtbibliothek", + "es. Copertina rigida, Brossura": "z. B. Hardcover, Taschenbuch", + "es. Fantasy contemporaneo": "z. B. Zeitgenössische Fantasy", + "es. Gianni De Conno": "z. B. Gianni De Conno", + "es. I Classici": "z. B. Die Klassiker", + "es. INV-2024-001": "z. B. INV-2024-001", + "es. Integrazione Sito Web": "z. B. Website-Integration", + "es. Italiano, Inglese": "z. B. Italienisch, Englisch", + "es. La morale anarchica": "z. B. Die anarchistische Moral", + "es. Mario Rossi": "z. B. Max Mustermann", + "es. Noir mediterraneo": "z. B. Mediterraner Noir", + "es. Prima edizione": "z. B. Erstausgabe", + "es. RSSMRA80A01H501U": "z. B. RSSMRA80A01H501U", + "es. Urban fantasy": "z. B. Urban Fantasy", + "es. noreply@biblioteca.local": "z. B. noreply@bibliothek.local", + "es. romanzo, fantasy, avventura (separare con virgole)": "z. B. Roman, Fantasy, Abenteuer (mit Kommas trennen)", + "eventi": "Veranstaltungen", + "eventi, biblioteca, cultura": "Veranstaltungen, Bibliothek, Kultur", + "fallite.": "fehlgeschlagen.", + "fas fa-users": "fas fa-users", + "febbraio": "Februar", + "gennaio": "Januar", + "giorni prima della scadenza": "Tage vor Ablauf", + "giugno": "Juni", + "https://www.editore.com": "https://www.verlag.de", + "icone disponibili": "verfügbare Symbole", + "in attesa": "ausstehend", + "in_corso": "laufend", + "in_ritardo": "überfällig", + "info@editore.com": "info@verlag.de", + "installazione inglese usa": "Englische Installation verwendet", + "kg": "kg", + "libri": "Bücher", + "libri eliminati": "Bücher gelöscht", + "libri trovati": "Bücher gefunden", + "libri. Questa azione non può essere annullata.": "Bücher. Diese Aktion kann nicht rückgängig gemacht werden.", + "libro": "Buch", + "libro trovato": "Buch gefunden", + "linea": "Zeile", + "lingue": "Sprachen", + "lingue. Errori:": "Sprachen. Fehler:", + "link, accenti": "Links, Akzente", + "luglio": "Juli", + "maggio": "Mai", + "manutenzione": "Wartung", + "mario.rossi@email.it": "max.mustermann@email.de", + "marzo": "März", + "minuti fa": "vor Minuten", + "nell'header. Non includere i tag": "im Header. Fügen Sie keine Tags ein", + "nella directory dell'applicazione.": "im Anwendungsverzeichnis.", + "nella nostra biblioteca.": "in unserer Bibliothek.", + "nella root del progetto impedisce qualsiasi accesso non autorizzato.": "im Projektstammverzeichnis verhindert jeden unbefugten Zugriff.", + "non può contenere spazi": "darf keine Leerzeichen enthalten", + "non può essere vuota": "darf nicht leer sein", + "novembre": "November", + "o multipli separati da |": "oder mehrere getrennt durch |", + "o multipli: Engels;Marx": "oder mehrere: Engels;Marx", + "opzionale": "optional", + "opzionali": "optional", + "ordine:": "Reihenfolge:", + "ore fa": "vor Stunden", + "ottobre": "Oktober", + "pagina": "Seite", + "pagine": "Seiten", + "per conformità GDPR.": "zur DSGVO-Konformität.", + "per evitare blocchi (delay di 3 secondi tra ogni richiesta).": "um Blockierungen zu vermeiden (3 Sekunden Verzögerung zwischen jeder Anfrage).", + "per il giorno": "für den Tag", + "per pagina": "pro Seite", + "perso": "verloren", + "preferiti": "Favoriten", + "premi Invio per crearne uno nuovo.": "drücken Sie die Eingabetaste, um einen neuen zu erstellen.", + "prenotato": "vorgemerkt", + "prenotazione attiva": "aktive Vormerkung", + "prenotazioni": "Vormerkungen", + "prenotazioni attive": "aktive Vormerkungen", + "prestato": "ausgeliehen", + "prestiti attivi": "aktive Ausleihen", + "prestiti passati": "vergangene Ausleihen", + "prestiti totali": "Ausleihen gesamt", + "prestito attivo": "aktive Ausleihe", + "prestito passato": "vergangene Ausleihe", + "prima di procedere.": "bevor Sie fortfahren.", + "recensione": "Rezension", + "recensioni": "Rezensionen", + "referente@editore.com": "kontakt@verlag.de", + "restituito": "zurückgegeben", + "richiesta in sospeso": "ausstehende Anfrage", + "richieste in sospeso": "ausstehende Anfragen", + "risultati": "Ergebnisse", + "risultato": "Ergebnis", + "secondi (min: 5, max: 60)": "Sekunden (min: 5, max: 60)", + "seleziona": "durchsuchen", + "seleziona file": "Datei auswählen", + "selezionati": "ausgewählt", + "sessioni attive": "aktive Sitzungen", + "settembre": "September", + "sfoglia": "durchsuchen", + "sottogeneri": "Untergenres", + "sul server tramite SSH.": "auf dem Server über SSH.", + "titoli": "Titel", + "utente@example.com": "benutzer@beispiel.de", + "utenti": "Benutzer", + "verranno automaticamente selezionati.": "werden automatisch ausgewählt.", + "visualizzazione per copia": "Ansicht nach Exemplar", + "Български (BG)": "Bulgarisch (BG)", + "עברית (HE)": "Hebräisch (HE)", + "– Nessuno –": "– Keine –", + "••••••••": "••••••••", + "⚙️ Comportamento Automatico: Se inserisci codice in \"JavaScript Analitici\" o \"JavaScript Marketing\", i rispettivi toggle in Impostazioni Privacy verranno automaticamente selezionati.": "⚙️ Automatisches Verhalten: Wenn Sie Code in \"Analytics JavaScript\" oder \"Marketing JavaScript\" einfügen, werden die entsprechenden Schalter in den Datenschutzeinstellungen automatisch aktiviert.", + "⚠️ AZIONE RICHIESTA: Installazione Dipendenze PHP": "⚠️ AKTION ERFORDERLICH: Installation der PHP-Abhängigkeiten", + "⚠️ Privacy: Le mappe esterne vengono caricate solo se l'utente accetta i cookie Analytics.": "⚠️ Datenschutz: Externe Karten werden nur geladen, wenn der Benutzer Analytics-Cookies akzeptiert.", + "✅ Dipendenze PHP installate correttamente": "✅ PHP-Abhängigkeiten korrekt installiert", + "✓ Connessione riuscita! Database è vuoto e pronto per l'installazione.": "✓ Verbindung erfolgreich! Datenbank ist leer und bereit für die Installation.", + "✓ Crea autori mancanti": "✓ Fehlende Autoren erstellen", + "✓ Crea editori mancanti": "✓ Fehlende Verlage erstellen", + "✓ Report errori": "✓ Fehlerbericht", + "✓ Validazione dati": "✓ Datenvalidierung", + "❌ Errore di comunicazione con il server": "Kommunikationsfehler mit dem Server", + "💡 Non hai accesso SSH?": "💡 Sie haben keinen SSH-Zugang?", + "📋 Importante: Devi elencare manualmente i cookie tracciati da questi script nella Pagina Cookie per conformità GDPR.": "📋 Wichtig: Sie müssen die von diesen Skripten erfassten Cookies manuell auf der Cookie-Seite auflisten, um die DSGVO-Konformität zu gewährleisten.", + "📋 Istruzioni SSH (Click per espandere/chiudere)": "📋 SSH-Anleitung (Klicken zum Ein-/Ausklappen)", + "🔒 Sicurezza Importante": "🔒 Wichtige Sicherheit", + "Leggi PDF": "PDF lesen", + "Chiudi Visualizzatore": "Viewer schließen", + "Visualizzatore PDF": "PDF-Viewer", + "Usa la funzione di ricerca del browser per trovare testo nel documento": "Verwenden Sie die Suchfunktion des Browsers, um Text im Dokument zu finden", + "Usa il controllo schermo intero del viewer o del browser": "Verwenden Sie die Vollbildsteuerung des Viewers oder Browsers", + "Condivisione": "Teilen", + "Seleziona i pulsanti di condivisione da mostrare nella pagina del libro.": "Wählen Sie die Teilen-Schaltflächen aus, die auf der Buchseite angezeigt werden sollen.", + "Nessun pulsante selezionato": "Keine Schaltflächen ausgewählt", + "Salva impostazioni condivisione": "Freigabeeinstellungen speichern", + "Impostazioni di condivisione aggiornate.": "Freigabeeinstellungen aktualisiert.", + "Condividi su X": "Auf X teilen", + "Condividi su Telegram": "Auf Telegram teilen", + "Condividi su LinkedIn": "Auf LinkedIn teilen", + "Condividi su Reddit": "Auf Reddit teilen", + "Condividi su Pinterest": "Auf Pinterest teilen", + "Condividi su Threads": "Auf Threads teilen", + "Condividi su Bluesky": "Auf Bluesky teilen", + "Condividi su Tumblr": "Auf Tumblr teilen", + "Salva su Pocket": "Auf Pocket speichern", + "Condividi su VK": "Auf VK teilen", + "Condividi su LINE": "Auf LINE teilen", + "Invia via SMS": "Per SMS senden", + "Invia per email": "Per E-Mail senden", + "Copia link": "Link kopieren", + "Collezione: %d libri, %d autori, %d editori.": "Sammlung: %d Bücher, %d Autoren, %d Verlage.", + "Catalogo bibliotecario gestito con [Pinakes](https://github.com/fabiodalez-dev/Pinakes). Disponibile in: %s.": "Bibliothekskatalog betrieben mit [Pinakes](https://github.com/fabiodalez-dev/Pinakes). Verfügbar in: %s.", + "Pagine Principali": "Hauptseiten", + "Sfoglia e cerca la collezione completa": "Die gesamte Buchsammlung durchsuchen", + "Informazioni sulla biblioteca": "Über diese Bibliothek", + "Calendario eventi culturali": "Kulturveranstaltungskalender", + "Informativa sulla privacy": "Datenschutzerklärung", + "Feed e Scoperta": "Feeds & Entdecken", + "Feed RSS": "RSS-Feed", + "Ultime aggiunte al catalogo (RSS 2.0)": "Neueste Katalogeinträge (RSS 2.0)", + "Indice completo degli URL": "Vollständiges URL-Verzeichnis", + "Interoperabilità bibliotecaria (MARCXML, Dublin Core)": "Bibliotheksinteroperabilität (MARCXML, Dublin Core)", + "Autenticazione utente": "Benutzeranmeldung", + "Registrazione nuovo utente": "Neue Benutzerregistrierung", + "Genera automaticamente un file llms.txt per rendere la biblioteca comprensibile ai modelli linguistici (LLM)": "Automatische Generierung einer llms.txt-Datei, damit die Bibliothek für große Sprachmodelle (LLMs) verständlich wird", + "Cos'è llms.txt:": "Was ist llms.txt:", + "È uno standard emergente (llmstxt.org) che fornisce ai motori AI un sommario strutturato del sito in formato Markdown. Quando attivo, il file viene generato dinamicamente con le statistiche della biblioteca, le pagine pubbliche e le informazioni API.": "Ein aufkommender Standard (llmstxt.org), der KI-Systemen eine strukturierte Markdown-Zusammenfassung der Website bereitstellt. Wenn aktiviert, wird die Datei dynamisch mit Bibliotheksstatistiken, öffentlichen Seiten und API-Informationen generiert.", + "Abilita llms.txt": "llms.txt aktivieren", + "Rende disponibile /llms.txt e lo aggiunge a robots.txt": "Macht /llms.txt verfügbar und fügt es zur robots.txt hinzu", + "Disattivato": "Deaktiviert", + "Tipo Media": "Medientyp", + "Disco": "Schallplatte", + "Tutti i media": "Alle Medien" +} \ No newline at end of file diff --git a/locale/en_US.json b/locale/en_US.json index f3848d5c..94f1004f 100644 --- a/locale/en_US.json +++ b/locale/en_US.json @@ -1,4192 +1,4194 @@ { - "\"%s\" prestato a %s è in ritardo di %d giorni": "\"%s\" loaned to %s is %d days overdue", - "$1": "$1", - "$2": "$2", - "%d Problemi": "%d Issues", - "%d minuti fa": "%d minutes ago", - "%d minuto fa": "%d minute ago", - "%d notifica non letta": "%d unread notification", - "%d notifiche non lette": "%d unread notifications", - "%d ora fa": "%d hour ago", - "%d ore fa": "%d hours ago", - "%d prenotazione attiva": "%d active reservation", - "%d prenotazioni attive": "%d active reservations", - "%d prestiti attivi": "%d active loans", - "%d prestiti in ritardo": "%d overdue loans", - "%d prestiti passati": "%d past loans", - "%d prestito attivo": "%d active loan", - "%d prestito in ritardo": "%d overdue loan", - "%d prestito passato": "%d past loan", - "%d problemi rilevati": "%d issues detected", - "%d recensione": "%d review", - "%d recensioni": "%d reviews", - "%d richiesta in sospeso": "%d pending request", - "%d richieste in sospeso": "%d pending requests", - "%d titoli": "%d titles", - "%s ha prenotato \"%s\"": "%s has reserved \"%s\"", - "(filtrati da _MAX_ libri totali)": "(filtered from _MAX_ total books)", - "(opzionale - URL completo)": "(optional - full URL)", - "(opzionale - max 160 caratteri)": "(optional - max 160 characters)", - "(opzionale - max 60 caratteri)": "(optional - max 60 characters)", - "(opzionale - separate da virgola)": "(optional - comma separated)", - "+ 15 campi aggiuntivi disponibili (vedi CSV di esempio)": "+ 15 additional fields available (see example CSV)", - "+39 02 1234567": "+1 (555) 123-4567", - "+39 123 456 7890": "+1 123 456 7890", - ", %d errori": ", %d errors", - ", %d libri arricchiti con scraping": ", %d books enriched via scraping", - "-- Seleziona --": "-- Select --", - "-- Seleziona un template --": "-- Select a template --", - "... e altri %d errori": "... and %d more errors", - ".env caricato OK": ".env loaded OK", - "/* Inserisci il tuo codice CSS qui */\n/* Esempio: */\n/* body { font-size: 16px; } */": "/* Insert your CSS code here */\n/* Example: */\n/* body { font-size: 16px; } */", - "// Script analytics (es. Google Analytics)\n// Esempio Google Analytics 4:\n// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n// ga('create', 'UA-XXXXX-Y', 'auto');\n// ga('send', 'pageview');": "// Analytics scripts (e.g. Google Analytics)\n// Google Analytics 4 Example:\n// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n// ga('create', 'UA-XXXXX-Y', 'auto');\n// ga('send', 'pageview');", - "// Script essenziali (es. chat, accessibility)\n// Esempio:\n// console.log('Essential JS loaded');": "// Essential scripts (e.g. chat, accessibility)\n// Example:\n// console.log('Essential JS loaded');", - "// Script marketing (es. Facebook Pixel)\n// Esempio Facebook Pixel:\n// !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n// n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n// n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n// t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n// document,'script','https://connect.facebook.net/en_US/fbevents.js');\n// fbq('init', 'YOUR_PIXEL_ID');\n// fbq('track', 'PageView');": "// Marketing scripts (e.g. Facebook Pixel)\n// Facebook Pixel Example:\n// !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n// n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n// n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n// t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n// document,'script','https://connect.facebook.net/en_US/fbevents.js');\n// fbq('init', 'YOUR_PIXEL_ID');\n// fbq('track', 'PageView');", - "/catalogo": "/catalog", - "0-10 libri": "0-10 books", - "1. Accesso al server": "1. Server Access", - "1. Collegati al server via SSH:": "1. Connect to the server via SSH:", - "101-500 libri": "101-500 books", - "11-50 libri": "11-50 books", - "2. Aggiungi una delle configurazioni seguenti:": "2. Add one of the following configurations:", - "2. Vai nella directory dell'applicazione:": "2. Go to the application directory:", - "3. Installa le dipendenze con Composer:": "3. Install dependencies with Composer:", - "4. Verifica che le dipendenze siano state installate:": "4. Verify that dependencies have been installed:", - "51-100 libri": "51-100 books", - ": attiva per ordinare la colonna in ordine crescente": ": activate to sort column ascending", - ": attiva per ordinare la colonna in ordine decrescente": ": activate to sort column descending", - "A": "A", - "API": "API", - "API Keys": "API Keys", - "API Pubblica": "Public API", - "API abilitata con successo.": "API enabled successfully.", - "API disabilitata con successo.": "API disabled successfully.", - "API key creata con successo.": "API key created successfully.", - "API key eliminata con successo.": "API key deleted successfully.", - "AVVISO Trigger:": "Trigger WARNING:", - "Abilita": "Enable", - "Abilita Cookie Banner": "Enable Cookie Banner", - "Abilita Modalità Catalogo": "Enable Catalogue Mode", - "Abilita Modalità Solo Catalogo": "Enable Catalogue Only Mode", - "Abilita o disabilita l'accesso all'API pubblica": "Enable or disable public API access", - "Abilitata - Visibile nel frontend": "Enabled - Visible in frontend", - "Abilitata": "Enabled", - "Abilitato": "Enabled", - "Accedi": "Login", - "Directory Upload Pubblici": "Public Uploads Directory", - "Accedi a /installer/?force=1 per forzare una reinstallazione": "Go to /installer/?force=1 to force a reinstallation", - "Accedi al server tramite SSH e modifica il crontab:": "Access the server via SSH and edit the crontab:", - "Accedi al tuo account": "Sign in to your account", - "Accedi all'area admin con le credenziali sopra indicate": "Log in to the admin area with the credentials above", - "Accedi per aggiungere ai Preferiti": "Log in to add to Favorites", - "Accesso": "Login", - "Accesso Richiesto": "Login Required", - "Accesso in corso...": "Signing in...", - "Accesso non autorizzato": "Unauthorized access", - "Accetta selezionati": "Accept Selected", - "Accetta tutti": "Accept All", - "Accetto la": "I accept the", - "Account": "Account", - "Account In Attesa": "Pending Account", - "Account Sospeso": "Suspended Account", - "Account creato con successo! Verifica la tua email.": "Account created successfully! Check your email.", - "Account creato! In attesa di approvazione da parte dell'amministratore.": "Account created! Awaiting administrator approval.", - "Acquisto": "Purchase", - "Adesso": "Just now", - "Admin": "Admin", - "Admin Dewey": "Dewey Admin", - "Aggiorna": "Refresh", - "Aggiorna Dati": "Update Data", - "Aggiorna Evento": "Update Event", - "Aggiorna Statistiche": "Refresh Statistics", - "Aggiorna da ISBN": "Update from ISBN", - "Aggiorna i dettagli del libro:": "Update book details:", - "Aggiorna i dettagli dell'autore: %s": "Update author details: %s", - "Aggiorna i dettagli dell'editore:": "Update publisher details:", - "Aggiorna le informazioni del profilo selezionato.": "Update selected profile information.", - "Aggiorna password": "Update password", - "Aggiorna Ora": "Update Now", - "Aggiornamento alla versione %s completato": "Update to version %s completed", - "Aggiornamento completato!": "Update completed!", - "Aggiornamento completato con successo": "Update completed successfully", - "Aggiornamento fallito": "Update failed", - "Aggiornamento già in corso": "Update already in progress", - "Avvio aggiornamento": "Starting update", - "Avvio backup database": "Starting database backup", - "Backup completato": "Backup completed", - "Backup database completato": "Database backup completed", - "Backup tabella": "Backing up table", - "Download completato": "Download completed", - "Errore backup database": "Database backup error", - "Errore fatale durante aggiornamento": "Fatal error during update", - "Impossibile aprire file di backup per scrittura": "Unable to open backup file for writing", - "Impossibile creare lock file": "Unable to create lock file", - "Installazione completata": "Installation completed", - "Memory limit aumentato": "Memory limit increased", - "Modalità manutenzione rimossa automaticamente (scaduta)": "Maintenance mode automatically removed (expired)", - "Step 1: Creazione backup": "Step 1: Creating backup", - "Step 2: Download aggiornamento": "Step 2: Downloading update", - "Step 3: Installazione aggiornamento": "Step 3: Installing update", - "Trovate tabelle da backuppare": "Found tables to backup", - "Errore SQL durante migrazione %s: %s": "SQL error during migration %s: %s", - "Errore preparazione query migrazioni": "Error preparing migrations query", - "Errore recupero risultati migrazioni": "Error fetching migrations results", - "Errore recupero batch migrazioni": "Error fetching migrations batch", - "Errore preparazione insert migrazione": "Error preparing migration insert", - "Errore creazione tabella migrazioni": "Error creating migrations table", - "Errore creazione tabella update_logs": "Error creating update_logs table", - "Errore nel recupero delle tabelle": "Error retrieving tables", - "Errore nel recupero struttura tabella %s": "Error retrieving structure for table %s", - "Errore nel recupero dati tabella %s": "Error retrieving data for table %s", - "Pacchetto di aggiornamento non valido: manca %s": "Invalid update package: missing %s", - "Errore preparazione log aggiornamento": "Error preparing update log", - "Errore preparazione completamento log": "Error preparing log completion", - "Errore aggiornamento log": "Error updating log", - "URL di download non trovato": "Download URL not found", - "File di aggiornamento non valido": "Invalid update file", - "Impossibile creare directory di backup": "Unable to create backup directory", - "Impossibile creare directory di backup applicazione": "Unable to create application backup directory", - "Impossibile creare directory di backup: %s": "Unable to create backup directory: %s", - "Impossibile creare directory temporanea": "Unable to create temporary directory", - "Impossibile salvare il file di aggiornamento": "Unable to save update file", - "Impossibile creare il file di lock per l'aggiornamento": "Unable to create update lock file", - "Estrazione del pacchetto fallita": "Package extraction failed", - "Impossibile scrivere file di backup": "Unable to write backup file", - "Directory sorgente non trovata": "Source directory not found", - "Impossibile recuperare informazioni sulla release": "Unable to retrieve release information", - "Impossibile connettersi a GitHub": "Unable to connect to GitHub", - "Percorso non valido nel pacchetto: %s": "Invalid path in package: %s", - "Impossibile creare directory: %s": "Unable to create directory: %s", - "Errore nella copia del file: %s": "Error copying file: %s", - "Errore durante il controllo": "Error during check", - "Aggiornamento in corso...": "Updating...", - "Aggiornamento in corso. Riprova tra qualche minuto.": "Update in progress. Please try again in a few minutes.", - "Aggiornamento...": "Updating...", - "Aggiornamenti": "Updates", - "Aggiornata in base a scaffale, mensola e posizione.": "Updated based on shelf, rack and position.", - "Aggiornate %d righe": "Updated %d rows", - "Aggiungere una Nuova Lingua": "Adding a New Language", - "Aggiungi": "Add", - "Aggiungi Genere Rapido": "Quick Add Genre", - "Aggiungi Lingua": "Add Language", - "Aggiungi Nuova Lingua": "Add New Language", - "Aggiungi Nuovo Autore": "Add New Author", - "Aggiungi Nuovo Editore": "Add New Publisher", - "Aggiungi Nuovo Libro": "Add New Book", - "Aggiungi Prima Lingua": "Add First Language", - "Aggiungi Sottogenere": "Add Subgenre", - "Aggiungi ai Preferiti": "Add to Favorites", - "Aggiungi alla collezione": "Add to collection", - "Aggiungi eventuali note sul prestito": "Add any loan notes", - "Aggiungi eventuali note...": "Add any notes...", - "Aggiungi i libri che ti interessano dalla scheda di dettaglio per ricevere un promemoria quando tornano disponibili.": "Add books you're interested in from the detail page to receive a reminder when they become available.", - "Aggiungi la tua API key per interrogare Google Books quando importi un ISBN. Google viene utilizzato prima di Open Library, ma dopo Scraping Pro.": "Add your API key to query Google Books when importing an ISBN. Google is used before Open Library but after Scraping Pro.", - "Aggiungi le mensole (livelli) a ogni scaffale": "Add levels (shelves) to each bookcase", - "Aggiungi nuovo libro": "Add new book", - "Aggiungi primo libro": "Add first book", - "Aggiungi scaffali e mensole per la tua biblioteca": "Add shelves and racks for your library", - "Aggiungi un motivo (opzionale)": "Add a reason (optional)", - "Aggiungi un nuovo titolo per arricchire il catalogo di questo editore.": "Add a new title to enrich this publisher's catalog.", - "Aggiunto il": "Added on", - "Aiuto": "Help", - "Al momento non ci sono eventi attivi. Continua a seguirci per restare aggiornato sui prossimi appuntamenti.": "There are no active events at the moment. Keep following us to stay updated on upcoming appointments.", - "Al momento non ci sono eventi programmati. Torna a visitare questa pagina per scoprire i prossimi appuntamenti.": "There are currently no scheduled events. Come back to this page to discover upcoming events.", - "Al": "To", - "Al:": "To:", - "Alcune date richieste non sono disponibili": "Some requested dates are not available", - "Alcuni mancanti": "Some missing", - "Alcuni requisiti non sono soddisfatti. Risolvi i problemi prima di continuare.": "Some requirements are not met. Fix the issues before continuing.", - "Allegato": "Attachment", - "Almeno uno dei seguenti parametri è richiesto:": "At least one of the following parameters is required:", - "Altri eventi in programma": "Other upcoming events", - "Altri filtri": "More filters", - "Altro": "Other", - "Amministratore": "Administrator", - "Anno": "Year", - "Anno (YYYY)": "Year (YYYY)", - "Anno di Pubblicazione": "Publication Year", - "Anno di pubblicazione": "Publication year", - "Anno di Uscita": "Release Year", - "Anno max": "Year max", - "Anno min": "Year min", - "Anno numerico (usato per filtri e ordinamento)": "Numeric year (used for filters and sorting)", - "Anno pubblicazione": "Publication year", - "Anno pubblicazione a": "Publication year to", - "Anno pubblicazione da": "Publication year from", - "Anno:": "Year:", - "Annulla": "Cancel", - "Annulla prenotazione": "Cancel reservation", - "Annullare questa prenotazione?": "Cancel this reservation?", - "Annullata": "Cancelled", - "Annullato": "Cancelled", - "Anteprima": "Preview", - "Anteprima Banner": "Banner preview", - "Anteprima copertina": "Cover preview", - "Anteprima immagine caricata": "Uploaded image preview", - "Anteprima logo": "Logo preview", - "Anteprima non disponibile": "Preview not available", - "Anteprima:": "Preview:", - "Apparirà nei risultati di ricerca Google. Se vuoto, usa il titolo hero o il nome dell'app.": "Will appear in Google search results. If empty, uses the hero title or app name.", - "Apparirà sotto il titolo nei risultati di ricerca. Se vuoto, usa il sottotitolo hero o una descrizione generica.": "Will appear under the title in search results. If empty, uses the hero subtitle or a generic description.", - "Applica": "Apply", - "Applica Filtri": "Apply Filters", - "Applicazione Già Installata": "Application Already Installed", - "Applicazione configurata:": "Application configured:", - "Approva": "Approve", - "Approva Prestiti": "Approve Loans", - "Approva Prestito?": "Approve Loan?", - "Approva e Invia Email Attivazione": "Approve and Send Activation Email", - "Approva o rifiuta le recensioni degli utenti": "Approve or reject user reviews", - "Approva o rifiuta le richieste degli utenti": "Approve or reject user requests", - "Approva prestito?": "Approve loan?", - "Approva recensione": "Approve review", - "Approvata": "Approved", - "Approvata il": "Approved on", - "Approvato": "Approved", - "Approvato!": "Approved!", - "Approverai questa richiesta di prestito?": "Will you approve this loan request?", - "Apri": "Open", - "Apri Editor": "Open Editor", - "Apri Google Cloud Console": "Open Google Cloud Console", - "Apri file": "Open file", - "Apri menu": "Open menu", - "Archivia": "Archive", - "Archiviato": "Archived", - "Archivio": "Archive", - "Arricchimento automatico dati": "Automatic Data Enrichment", - "Artista": "Artist", - "Artista sconosciuto": "Unknown artist", - "Artisti": "Artists", - "Articolo": "Article", - "Ascolta Audiobook": "Listen to Audiobook", - "Ascolta l'audiobook": "Listen to the audiobook", - "Assicurati che corrisponda al tipo di carta per etichette che utilizzi.": "Make sure it matches the type of label paper you use.", - "Assicurati che il path assoluto dello script sia corretto": "Make sure the absolute path to the script is correct", - "Assicurati che sia configurato correttamente per evitare URL duplicati.": "Make sure it's configured correctly to avoid duplicate URLs.", - "At least one search parameter is required (ean, isbn13, isbn10, or author)": "At least one search parameter is required (ean, isbn13, isbn10, or author)", - "Attendere prego": "Please wait", - "Attendere prego...": "Please wait...", - "Attenzione": "Warning", - "Attenzione!": "Warning!", - "Attenzione:": "Warning:", - "Attenzione: %d prestiti in ritardo": "Warning: %d overdue loans", - "Attenzione: %d prestito in ritardo": "Warning: %d overdue loan", - "Attenzione: Azione Manuale Richiesta": "Warning: Manual Action Required", - "Attenzione: Non è stato possibile rimuovere tutte le copie richieste. Alcune copie sono attualmente in prestito.": "Warning: Could not remove all requested copies. Some copies are currently on loan.", - "Attivando questa modalità verranno disabilitati completamente i prestiti, le prenotazioni e la wishlist. Gli utenti potranno solo consultare il catalogo.": "Enabling this mode will completely disable loans, reservations and wishlist. Users will only be able to browse the catalogue.", - "Attiva": "Active", - "Attiva Direttamente": "Activate Directly", - "Attivato:": "Activated:", - "Attivi": "Active", - "Attività": "Activity", - "Attivo": "Active", - "Attivo:": "Active:", - "Attuale": "Current", - "Attualmente prestati": "Currently on loan", - "Audio": "Audio", - "Audio URL": "Audio URL", - "Audiobook": "Audiobook", - "Audiobook (MP3/M4A/OGG)": "Audiobook (MP3/M4A/OGG)", - "Audiobook caricato!": "Audiobook uploaded!", - "Audiobook disponibile": "Audiobook available", - "Aumenta Copie": "Increase Copies", - "Autenticazione": "Authentication", - "Auto": "Auto", - "Auto-attivazione: Se compili questo campo, il toggle \"Mostra Cookie Analitici\" in Privacy verrà attivato automaticamente.": "Auto-activation: If you fill this field, the \"Show Analytics Cookies\" toggle in Privacy will be automatically activated.", - "Auto-attivazione: Se compili questo campo, il toggle \"Mostra Cookie Marketing\" in Privacy verrà attivato automaticamente.": "Auto-activation: If you fill this field, the \"Show Marketing Cookies\" toggle in Privacy will be automatically activated.", - "Auto-detect se vuoto": "Auto-detect if empty", - "Automatismi": "Automations", - "Autore": "Author", - "Autore \"${normalizedLabel}\" pronto per essere creato": "Author \"${normalizedLabel}\" ready to be created", - "Autore \"${normalizedLabel}\" è già selezionato": "Author \"${normalizedLabel}\" is already selected", - "Autore \"%s\" pronto per essere creato": "Author \"%s\" ready to be created", - "Autore \"%s\" è già selezionato": "Author \"%s\" is already selected", - "Autore A-Z": "Author A-Z", - "Autore Z-A": "Author Z-A", - "Autore eliminato con successo.": "Author deleted successfully.", - "Autore principale": "Primary author", - "Autore sconosciuto": "Unknown author", - "Autore/i:": "Author(s):", - "Autore:": "Author:", - "Autori": "Authors", - "Autori con biografie": "Authors with biographies", - "Autori ed editori vengono creati automaticamente": "Authors and publishers are created automatically", - "Autori multipli separati da %s": "Multiple authors separated by %s", - "Autori multipli separati da %s o %s": "Multiple authors separated by %s or %s", - "Autori pubblicati": "Published Authors", - "Autori uniti": "Authors merged", - "Autori uniti con successo": "Authors merged successfully", - "Autori:": "Authors:", - "Avanti": "Next", - "Avanzate": "Advanced", - "Avvisi scadenza prestiti (configurabile in Impostazioni → Avanzate, default 3 giorni prima)": "Loan expiration warnings (configurable in Settings → Advanced, default 3 days before)", - "Avviso": "Warning", - "Azione richiesta:": "Action required:", - "Azioni": "Actions", - "Azioni Rapide": "Quick Actions", - "Azioni Veloci": "Quick Actions", - "Azioni di Approvazione": "Approval Actions", - "Azioni di Manutenzione": "Maintenance Actions", - "Azzera": "Clear", - "Backup": "Backup", - "Backup Automatico": "Automatic Backup", - "Backup creato con successo": "Backup created successfully", - "Backup disponibili": "Available backups", - "Backup e Sicurezza": "Backup and Security", - "I backup sono salvati in:": "Backups are saved in:", - "Backup fallito": "Backup failed", - "Backup Salvati": "Saved Backups", - "Backup eliminato": "Backup deleted", - "Backup non trovato": "Backup not found", - "Caricamento backup...": "Loading backups...", - "Crea un backup manuale o attendi il prossimo aggiornamento.": "Create a manual backup or wait for the next update.", - "Eliminare questo backup?": "Delete this backup?", - "Eliminazione in corso...": "Deleting...", - "Impossibile eliminare il backup": "Unable to delete backup", - "Impossibile leggere il file di backup": "Unable to read backup file", - "Nessun backup disponibile": "No backups available", - "Nome File": "File Name", - "Nome backup non specificato": "Backup name not specified", - "Nome backup non valido": "Invalid backup name", - "Barcode": "Barcode", - "Barra laterale": "Sidebar", - "Benvenuto": "Welcome", - "Benvenuto nell'Installer": "Welcome to the Installer", - "Benvenuto, %s!": "Welcome, %s!", - "Biblioteca": "Library", - "Biblioteca Digitale": "Digital Library", - "Biblioteca Digitale - La tua biblioteca online": "Digital Library - Your Online Library", - "Biblioteca Digitale - Scopri e Prenota i Tuoi Libri Preferiti": "Digital Library - Discover and Reserve Your Favorite Books", - "Biblioteca digitale con catalogo completo di libri disponibili per il prestito": "Digital library with complete catalog of books available for loan", - "Biografia": "Biography", - "Biografia dell'autore": "Author Biography", - "Bluesky": "Bluesky", - "Books": "Books", - "Breadcrumb": "Breadcrumb", - "Breve descrizione per i motori di ricerca": "Short description for search engines", - "Breve descrizione per i motori di ricerca (max 160 caratteri)": "Short description for search engines (max 160 characters)", - "Buono": "Good", - "CMS": "CMS", - "CSRF Fallito": "CSRF Failed", - "CSRF non valido.": "Invalid CSRF token.", - "CSS Personalizzato": "Custom CSS", - "CSV": "CSV", - "Calendario eventi": "Events calendar", - "Call to Action": "Call to Action", - "Call to Action (CTA)": "Call to Action (CTA)", - "Cambia lingua": "Change language", - "Cambia password": "Change password", - "Campo": "Field", - "Campo %s obbligatorio": "%s field required", - "Campo Obbligatorio": "Required Field", - "Campo obbligatorio": "Required field", - "Campo obbligatorio mancante: %s": "Missing required field: %s", - "Cancella filtri": "Clear filters", - "Cancella tutti i filtri": "Clear all filters", - "Caratteristica": "Feature", - "Carica": "Upload", - "Carica %{smart_count} file": "Upload %{smart_count} file", - "Carica Altri": "Load More", - "Carica File CSV": "Upload CSV File", - "Carica File JSON": "Upload JSON File", - "Carica Nuovo File JSON": "Upload New JSON File", - "Carica Plugin": "Upload Plugin", - "Carica il file JSON di traduzione (opzionale)": "Upload the translation JSON file (optional)", - "Carica il file usando l'uploader": "Upload the file using the uploader", - "Carica logo (PNG, JPG, SVG)": "Upload logo (PNG, JPG, SVG)", - "Carica o collega eBook (PDF/ePub) e audiobook (MP3/M4A) per renderli disponibili agli utenti.": "Upload or link eBooks (PDF/ePub) and audiobooks (MP3/M4A) to make them available to users.", - "Carica un file CSV per importare più libri contemporaneamente": "Upload a CSV file to import multiple books at once", - "Carica un file ZIP contenente il plugin. Il file deve includere un %s con le informazioni del plugin.": "Upload a ZIP file containing the plugin. The file must include a %s with the plugin information.", - "Carica un nuovo file per aggiornare le traduzioni (opzionale). Verrà creato un backup del file precedente.": "Upload a new file to update translations (optional). A backup of the previous file will be created.", - "Caricamento .env...": "Loading .env...", - "Caricamento categorie...": "Loading categories...", - "Caricamento completato": "Upload completed", - "Caricamento condizionale:": "Conditional loading:", - "Caricamento fallito": "Upload failed", - "Caricamento file...": "Uploading file...", - "Caricamento in corso...": "Uploading...", - "Caricamento libri...": "Loading books...", - "Caricamento non riuscito. Riprova.": "Upload failed. Please try again.", - "Caricamento...": "Loading...", - "Caroselli Generi": "Genre Carousels", - "Casa Editrice": "Publisher", - "Case editrici": "Publishing houses", - "Catalogo": "Catalog", - "Catalogo Completo Libri - Biblioteca Digitale": "Complete Book Catalog - Digital Library", - "Catalogo Libri": "Book Catalog", - "Catalogo Libri - Biblioteca": "Book Catalog - Library", - "Catalogo libri": "Book Catalog", - "Català (CA)": "Catalan (CA)", - "Categoria": "Category", - "Categorie": "Categories", - "Categorie Cookie": "Cookie Categories", - "Centro Impostazioni": "Settings Center", - "Cerca": "Search", - "Cerca IP...": "Search IP...", - "Cerca Libri": "Search Books", - "Cerca Libro": "Search Book", - "Cerca Utente": "Search User", - "Cerca autore...": "Search author...", - "Cerca codice o nome...": "Search code or name...", - "Cerca autori esistenti o aggiungine di nuovi...": "Search for existing authors or add new ones...", - "Cerca editore esistente o inserisci nuovo...": "Search for existing publisher or enter new...", - "Cerca editore...": "Search publisher...", - "Cerca email...": "Search email...", - "Cerca genere...": "Search genre...", - "Cerca icona... (es. user, home, book)": "Search icon... (e.g. user, home, book)", - "Cerca libri, autori, editori, utenti...": "Search books, authors, publishers, users...", - "Cerca libri, autori, editori...": "Search books, authors, publishers...", - "Cerca libri, autori...": "Search books, authors...", - "Cerca libri, autori, ISBN...": "Search books, authors, ISBN...", - "Cerca libri...": "Search books...", - "Cerca nella biblioteca": "Search the library", - "Cerca per ISBN-10": "Search by ISBN-10", - "Cerca per ISBN-13": "Search by ISBN-13", - "Cerca per codice EAN": "Search by EAN code", - "Cerca per nome autore (corrispondenza parziale)": "Search by author name (partial match)", - "Cerca per nome, cognome, telefono, email o tessera": "Search by name, surname, phone, email or card", - "Cerca per nome...": "Search by name...", - "Cerca per pseudonimo...": "Search by pseudonym...", - "Cerca pseudonimo...": "Search pseudonym...", - "Cerca per titolo o sottotitolo": "Search by title or subtitle", - "Cerca per titolo o stato (es. disponibile)": "Search by title or status (e.g. available)", - "Cerca posizione...": "Search location...", - "Cerca rapido...": "Quick search...", - "Cerca testo": "Search text", - "Cerca titoli": "Search Titles", - "Cerca titoli, autori, ISBN...": "Search titles, authors, ISBN...", - "Cerca:": "Search:", - "Chi Siamo": "About Us", - "Chiave": "Key", - "Chiave API Google Books": "Google Books API key", - "Chiave Google Books aggiornata.": "Google Books key updated.", - "Chiave Google Books rimossa.": "Google Books key removed.", - "Chiave Google Books salvata correttamente.": "Google Books key saved successfully.", - "Chiave Route": "Route Key", - "Chiedi al tuo amministratore di database di eseguire i comandi contenuti nel file": "Ask your database administrator to execute the commands contained in the file", - "Chiudi": "Close", - "Chiudi Player": "Close Player", - "Chiudi menu": "Close menu", - "Chiudi alternative": "Close alternatives", - "Citazione": "Quote", - "Città": "City", - "Classe (000-900)": "Class (000-900)", - "Classificazione Dewey": "Dewey Classification", - "Classi principali": "Main classes", - "classe principale": "main class", - "Clicca o trascina per caricare un logo": "Click or drag to upload a logo", - "Clicca per selezionare": "Click to select", - "Clicca su \"Esegui Manutenzione\" per correggere automaticamente i problemi riparabili.": "Click \"Run Maintenance\" to automatically fix repairable issues.", - "Clicca su 'Aggiungi Lingua'": "Click on 'Add Language'", - "Clicca su \\": "Click on \\", - "Clicca su un'icona per selezionarla": "Click on an icon to select it", - "Codice": "Code", - "Codice *": "Code *", - "Codice CSS": "CSS Code", - "Codice CSS da applicare a tutte le pagine del frontend": "CSS code to apply to all frontend pages", - "Codice Dewey selezionato:": "Selected Dewey code:", - "Codice Fiscale": "Tax ID", - "Codice ISBN o EAN": "ISBN or EAN Code", - "Codice ISO 2 lettere (es: IT, FR, GB)": "ISO 2-letter code (e.g. IT, FR, GB)", - "Codice JavaScript": "JavaScript Code", - "Codice JavaScript Analytics": "Analytics JavaScript Code", - "Codice Lingua": "Language Code", - "Codice Tessera": "Card Number", - "Codice Tessera:": "Membership Code:", - "Codice embed completo": "Full embed code", - "Codice fiscale": "Tax code", - "Codice fiscale dell'editore (opzionale)": "Publisher's tax code (optional)", - "Codice fiscale italiano (opzionale)": "Italian tax ID (optional)", - "Codice postale...": "ZIP code...", - "Codice tessera": "Card Code", - "Cognome": "Last Name", - "Collana": "Series", - "Collocazione": "Location", - "Collocazione calcolata": "Calculated location", - "Collocazione suggerita": "Suggested location", - "Segui l'installazione guidata per completare la configurazione.": "Follow the guided installation to complete the configuration.", - "Come Funziona": "How It Works", - "Come ottenere il codice": "How to get the code", - "Commento": "Comment", - "Compila con i dati dei tuoi libri": "Fill in with your book data", - "Compila i dettagli del libro per aggiungerlo alla biblioteca": "Fill in the book details to add it to the library", - "Compila i dettagli dell'autore per aggiungerlo alla biblioteca": "Fill in the author details to add them to the library", - "Compila i dettagli della casa editrice per aggiungerla alla biblioteca": "Fill in the publishing house details to add it to the library", - "Compila tutti i campi obbligatori prima di salvare.": "Fill in all required fields before saving.", - "Compila tutti i campi per creare una nuova prenotazione": "Fill in all fields to create a new reservation", - "Compila tutti i campi richiesti": "Fill in all required fields", - "Compila nome e URL per tutti i server.": "Fill in name and URL for all servers.", - "Completamento": "Completion", - "Completata": "Completed", - "Completati": "Completed", - "Completato": "Completed", - "Completato!": "Completed!", - "Complimenti!": "Congratulations!", - "Componente": "Component", - "Con valore 3, un prestito che scade il 15 Gennaio riceverà l'avviso il 12 Gennaio": "With value 3, a loan expiring on January 15 will receive the notice on January 12", - "Condividi": "Share", - "Condividi la tua opinione su questo libro...": "Share your opinion about this book...", - "Condividi su Facebook": "Share on Facebook", - "Condividi su Twitter": "Share on Twitter", - "Condividi su WhatsApp": "Share on WhatsApp", - "Condiviso": "Shared", - "Condizioni": "Conditions", - "Consegna immediata": "Immediate delivery", - "Conferma": "Confirm", - "Conferma Aggiornamento": "Confirm Update", - "Conferma aggiornamento": "Confirm update", - "Controlla Aggiornamenti": "Check for Updates", - "Controllo aggiornamenti": "Checking for updates", - "Crea Backup Manuale": "Create Manual Backup", - "Creazione backup database": "Creating database backup", - "Creazione backup...": "Creating backup...", - "Creare backup?": "Create backup?", - "Cronologia Aggiornamenti": "Update History", - "Conferma Annullamento": "Confirm Cancellation", - "Conferma Disinstallazione": "Confirm Uninstallation", - "Conferma eliminazione": "Confirm deletion", - "Conferma Password": "Confirm Password", - "Conferma Salvataggio": "Confirm Save", - "Conferma la tua email": "Confirm your email", - "Conferma modifica": "Confirm change", - "Conferma password": "Confirm password", - "Conferma restituzione": "Confirm return", - "Confermi l'eliminazione dell'editore?": "Confirm publisher deletion?", - "Confermi l'operazione?": "Confirm the operation?", - "Confermi?": "Confirm?", - "Configura Google Books": "Configure Google Books", - "Configura i testi mostrati all'interno del pannello delle preferenze dei cookie.": "Configure the texts shown inside the cookie preferences panel.", - "Configura i testi visualizzati agli utenti in ogni parte del cookie banner.": "Configure the texts displayed to users in every part of the cookie banner.", - "Configura i testi visualizzati agli utenti nel banner iniziale.": "Configure the texts displayed to users in the initial banner.", - "Configura l'identità dell'applicazione, i metodi di invio email e personalizza i template delle notifiche automatiche.": "Configure application identity, email sending methods and customize automatic notification templates.", - "Configura le date della prenotazione": "Configure reservation dates", - "Configura le impostazioni email per l'invio di notifiche agli utenti.": "Configure email settings for sending notifications to users.", - "Configura le impostazioni rimanenti (privacy, contatti, etc.)": "Configure the remaining settings (privacy, contacts, etc.)", - "Configura quando inviare l'avviso di scadenza prestiti agli utenti": "Configure when to send loan expiry warning to users", - "Configurazione": "Configuration", - "Configurazione Cron Job": "Cron Job Configuration", - "Configurazione Database": "Database Configuration", - "Configurazione Email": "Email Configuration", - "Configurazione Etichette Libri": "Book Labels Configuration", - "Configurazione SMTP": "SMTP Configuration", - "Configurazione del banner cookie": "Cookie banner configuration", - "Configurazione guidata in pochi passaggi.": "Guided configuration in a few steps.", - "Configurazione invio": "Sending Configuration", - "Configurazione sistema": "System configuration", - "Connessione al database fallita": "Database connection failed", - "Connessione fallita": "Connection failed", - "Connesso": "Connected", - "Conserva queste informazioni in un luogo sicuro!": "Keep this information in a safe place!", - "Consigliato": "Recommended", - "Consigliato JPG o PNG ad alta risoluzione (min 1920x1080px). Max 5MB.": "Recommended high-resolution JPG or PNG (min 1920x1080px). Max 5MB.", - "Consigliato JPG, PNG o WebP (min 800x600px). Max 5MB.": "Recommended JPG, PNG or WebP (min 800x600px). Max 5MB.", - "Consigliato PNG o SVG con sfondo trasparente. Dimensione massima 2MB.": "Recommended PNG or SVG with transparent background. Maximum size 2MB.", - "Consigliato: 150-160 caratteri": "Recommended: 150-160 characters", - "Consigliato: 50-60 caratteri": "Recommended: 50-60 characters", - "Consigliato: PHP mail() per semplicità, SMTP per maggiore controllo": "Recommended: PHP mail() for simplicity, SMTP for more control", - "Contatta il tuo provider di hosting e chiedi di eseguire": "Contact your hosting provider and ask them to run", - "Contattaci": "Contact Us", - "Contatti": "Contacts", - "Contatti e accesso": "Contacts and Access", - "Contenuti Digitali": "Digital Content", - "Contenuti homepage aggiornati con successo!": "Homepage content updated successfully!", - "Contenuto": "Content", - "Contenuto Cookie Policy": "Cookie Policy Content", - "Contenuto Pagina": "Page Content", - "Contenuto Privacy Policy": "Privacy Policy Content", - "Contenuto Testuale": "Text Content", - "Contenuto della pagina /cookies accessibile dal banner": "Content of /cookies page accessible from banner", - "Contenuto pagina": "Page content", - "Contenuto testuale HTML con editor avanzato": "HTML text content with advanced editor", - "Continua": "Continue", - "Cookie Analitici": "Analytics Cookies", - "Cookie Banner": "Cookie Banner", - "Cookie Essenziali": "Essential Cookies", - "Cookie di Marketing": "Marketing Cookies", - "Cookies": "Cookies", - "Copertina": "Cover", - "Copertina Attuale": "Current Cover", - "Copertina attuale": "Current cover", - "Copertina del Libro": "Book Cover", - "Copertina del libro": "Book cover", - "Copertina recuperata automaticamente": "Cover automatically retrieved", - "Copia": "Copy", - "Copia link negli appunti": "Copy link to clipboard", - "Copiato!": "Copied!", - "Copie": "Copies", - "Copie Aggiunte!": "Copies Added!", - "Copie Disponibili": "Available Copies", - "Copie Eccessive": "Excess Copies", - "Copie Fisiche": "Physical Copies", - "Copie Negative": "Negative Copies", - "Copie Totali": "Total Copies", - "Copie disponibili:": "Available copies:", - "Copie totali:": "Total copies:", - "Copyright": "Copyright", - "Corpo Email": "Email Body", - "Corpo email": "Email body", - "Correggi Permessi Automaticamente": "Fix Permissions Automatically", - "Corrente": "Current", - "Correzione Automatica Permessi": "Auto-fix Permissions", - "Correzione Manuale via SSH (se automatica fallisce)": "Manual Fix via SSH (if automatic fails)", - "Correzione parziale:": "Partial fix:", - "Correzioni applicate: %d record aggiornati": "Corrections applied: %d records updated", - "Cos'è la Collocazione?": "What is Location?", - "Cosa fare:": "What to do:", - "Cosa ne pensi di questo libro?": "What do you think about this book?", - "Cosa sono le Route?": "What are Routes?", - "Cosa viene nascosto:": "What will be hidden:", - "Crea": "Create", - "Crea API Key": "Create API Key", - "Crea Admin": "Create Admin", - "Crea Evento": "Create Event", - "Crea Nuova API Key": "Create New API Key", - "Crea Nuova Prenotazione": "Create New Reservation", - "Crea Nuovo Evento": "Create New Event", - "Crea Nuovo Genere": "Create New Genre", - "Crea Nuovo Prestito": "Create New Loan", - "Crea Prenotazione": "Create Reservation", - "Crea Prestito": "Create Loan", - "Crea Prima API Key": "Create First API Key", - "Crea Primo Genere": "Create First Genre", - "Crea Utente Admin": "Create Admin User", - "Crea Utente Amministratore": "Create Administrator User", - "Crea e gestisci gli eventi della biblioteca": "Create and manage library events", - "Crea gli scaffali (es: A, B, C)": "Create shelves (e.g.: A, B, C)", - "Crea il primo utente amministratore. Questo account avrà accesso completo a tutte le funzionalità del sistema.": "Create the first administrator user. This account will have full access to all system features.", - "Crea il tuo primo evento": "Create your first event", - "Crea la cartella logs se non esiste: mkdir -p logs": "Create the logs folder if it doesn't exist: mkdir -p logs", - "Crea nuovo": "Create new", - "Crea nuovo \"${item.label}\"": "Create new \"${item.label}\"", - "Crea un nuovo account": "Create a new account", - "Crea un nuovo profilo amministratore o lettore.": "Create a new administrator or reader profile.", - "Creata:": "Created:", - "Creato il": "Created on", - "Credenziali Admin:": "Admin Credentials:", - "Credenziali Errate": "Invalid Credentials", - "Crediti": "Credits", - "Crescente": "Ascending", - "Crittografia": "Encryption", - "Cronologia": "History", - "Da": "From", - "Da Inventariare": "To Be Inventoried", - "Da approvare": "To approve", - "Da consegnare": "To deliver", - "Da creare": "To be created", - "Da prenotazione": "From reservation", - "Da prenotazioni": "From reservations", - "Da %s (%s)": "From %s (%s)", - "Da qui puoi gestire tutte le lingue disponibili nell'applicazione. Carica file JSON di traduzione e abilita/disabilita lingue.": "From here you can manage all available languages in the application. Upload JSON translation files and enable/disable languages.", - "Dal": "From", - "Dal %s al %s": "From %s to %s", - "Dal:": "From:", - "Danneggiato": "Damaged", - "Dansk (DA)": "Danish (DA)", - "Dashboard": "Dashboard", - "Data": "Date", - "Data Acq.": "Acq. Date", - "Data Acquisizione": "Acquisition Date", - "Data Evento": "Event Date", - "Data Fine": "End Date", - "Data Inizio": "Start Date", - "Data Prenotazione": "Reservation Date", - "Data Prestito": "Loan Date", - "Data Prestito:": "Loan Date:", - "Data Pubblicazione": "Publication Date", - "Data Restituzione:": "Return Date:", - "Data Scadenza": "Due Date", - "Data Scadenza:": "Due Date:", - "Data acquisizione": "Acquisition date", - "Data acquisizione a": "Acquisition date to", - "Data acquisizione da": "Acquisition date from", - "Data di Pubblicazione": "Publication Date", - "Data di inizio della prenotazione (default: oggi)": "Reservation start date (default: today)", - "Data di morte": "Date of Death", - "Data di nascita": "Date of Birth", - "Data di pubblicazione": "Publication date", - "Data di scadenza della prenotazione (default: +30 giorni)": "Reservation expiry date (default: +30 days)", - "Data fine": "End date", - "Data inizio": "Start date", - "Data inizio richiesta mancante": "Request start date missing", - "Data morte a": "Death date to", - "Data morte da": "Death date from", - "Data nascita a": "Birth date to", - "Data nascita da": "Birth date from", - "Data originale di pubblicazione (formato italiano)": "Original publication date (Italian format)", - "Data prestito": "Loan date", - "Data prestito (A)": "Loan date (To)", - "Data prestito (Da)": "Loan date (From)", - "Data pubblicazione da": "Publication date from", - "Data scadenza prevista": "Expected due date", - "Data:": "Date:", - "Database installato (30 tabelle)": "Database installed (30 tables)", - "Database:": "Database:", - "Date": "Dates", - "Date Non Valide": "Invalid Dates", - "Dati Account": "Account Data", - "Dati bibliografici completi (titolo, sottotitolo, ISBN, EAN, ecc.)": "Complete bibliographic data (title, subtitle, ISBN, EAN, etc.)", - "Dati della Prenotazione": "Reservation Details", - "Dati essenziali caricati": "Essential data loaded", - "Database installato (41 tabelle)": "Database installed (41 tables)", - "Dati iniziali importati OK": "Initial data imported OK", - "Dati mancanti": "Missing data", - "Dati personali": "Personal data", - "Dati Utente": "User Details", - "Debug": "Debug", - "Debug Log:": "Debug Log:", - "Deceduto il %s": "Died on %s", - "Decrescente": "Descending", - "Default: un mese dopo la data inizio": "Default: one month after start date", - "Definisce i privilegi dell'utente.": "Defines user privileges.", - "Demo": "Demo", - "Deseleziona tutti": "Deselect all", - "Decimali": "Decimals", - "Descrivi l'utilizzo di questa API key...": "Describe the usage of this API key...", - "Descrizione": "Description", - "Descrizione Banner": "Banner Description", - "Descrizione Evento": "Event Description", - "Descrizione Modale": "Modal Description", - "Descrizione OG": "OG Description", - "Descrizione Open Graph": "Open Graph Description", - "Descrizione SEO": "SEO Description", - "Descrizione Twitter": "Twitter Description", - "Descrizione banner": "Banner description", - "Descrizione breve": "Short description", - "Descrizione completa dell'evento con possibilità di formattazione HTML": "Full event description with HTML formatting options", - "Descrizione cookie analitici": "Analytics cookies description", - "Descrizione cookie essenziali": "Essential cookies description", - "Descrizione cookie marketing": "Marketing cookies description", - "Descrizione del libro...": "Book description...", - "Descrizione footer": "Footer description", - "Descrizione modale": "Modal description", - "Descrizione nella modale preferenze. Puoi usare HTML.": "Description in the preferences modal. You can use HTML.", - "Descrizione per anteprima social. Se vuoto, usa la descrizione SEO.": "Description for social preview. If empty, uses the SEO description.", - "Descrizione troppo lunga (max 2000 caratteri)": "Description too long (max 2000 characters)", - "Descrizione:": "Description:", - "Dettagli": "Details", - "Dettagli Acquisizione": "Acquisition Details", - "Dettagli Fisici": "Physical Details", - "Dettagli Libro": "Book Details", - "Dettagli Messaggio": "Message Details", - "Dettagli del Prestito": "Loan Details", - "Dettagli evento": "Event details", - "Dettagli principali dell'evento": "Main event details", - "Dettagli restituzione": "Return details", - "Deutsch (DE)": "German (DE)", - "Deve contenere maiuscole, minuscole e numeri": "Must contain uppercase, lowercase and numbers", - "Deve iniziare con": "Must start with", - "Devi accettare la Privacy Policy per procedere": "You must accept the Privacy Policy to proceed", - "Devi eseguire": "You must run", - "Dewey": "Dewey", - "Dimensione": "Size", - "Dimensioni": "Dimensions", - "Dipendenze": "Dependencies", - "Directory plugin già esistente.": "Plugin directory already exists.", - "Disabilita": "Disable", - "Disabilita se il tuo sito non usa cookie analitici (es. Google Analytics)": "Disable if your site doesn't use analytics cookies (e.g. Google Analytics)", - "Disabilita se il tuo sito non usa cookie di marketing/advertising": "Disable if your site doesn't use marketing/advertising cookies", - "Disabilitata - Nascosta nel frontend": "Disabled - Hidden in frontend", - "Disabilitata": "Disabled", - "Disabilita prestiti, prenotazioni e wishlist. Gli utenti potranno solo consultare il catalogo.": "Disable loans, reservations and wishlist. Users will only be able to browse the catalogue.", - "Disabilita tutte le funzionalità di prestito e prenotazione": "Disable all loan and reservation features", - "Disabilitato": "Disabled", - "Disattiva": "Deactivate", - "Disattiva modalità manutenzione": "Disable maintenance mode", - "Disattivata": "Inactive", - "Discografia": "Discography", - "Disconnesso": "Disconnected", - "Disinstalla": "Uninstall", - "Divisioni": "Divisions", - "Disponibile": "Available", - "Disponibile dal:": "Available from:", - "Disponibile ora": "Available Now", - "Disponibile per il prestito.": "Available for loan.", - "Disponibile solo con driver SMTP": "Available only with SMTP driver", - "Disponibili": "Available", - "Disponibili e in prestito": "Available and on loan", - "Disponibilità": "Availability", - "Disponibilità copie": "Copy availability", - "Divisione (010-990)": "Division (010-990)", - "Documentazione": "Documentation", - "Documentazione API": "API Documentation", - "Documento": "Document", - "Documento generato il %s alle %s": "Document generated on %s at %s", - "Donazione": "Donation", - "Dopo la conferma, un amministratore approverà la tua iscrizione.": "After confirmation, an administrator will approve your registration.", - "Dopo la rigenerazione, invia l'URL della sitemap a Google Search Console e Bing Webmaster Tools": "After regeneration, submit sitemap URL to Google Search Console and Bing Webmaster Tools", - "Driver": "Driver", - "Driver Email": "Email Driver", - "EAN": "EAN", - "EAN:": "EAN:", - "ERRORE:": "ERROR:", - "Eccellente": "Excellent", - "Editor Classificazione Dewey": "Dewey Classification Editor", - "Editore": "Publisher", - "Editore \"${item.label}\" selezionato": "Publisher \"${item.label}\" selected", - "Editore \"${value}\" pronto per essere creato": "Publisher \"${value}\" ready to be created", - "Editore \"%s\" pronto per essere creato": "Publisher \"%s\" ready to be created", - "Editore \"%s\" selezionato": "Publisher \"%s\" selected", - "Editore eliminato con successo.": "Publisher deleted successfully.", - "Editore sconosciuto": "Unknown publisher", - "Editore selezionato:": "Selected publisher:", - "Editore trovato:": "Publisher found:", - "Editore:": "Publisher:", - "Editore: %s": "Publisher: %s", - "Editori": "Publishers", - "Editori uniti": "Publishers merged", - "Editori uniti con successo": "Publishers merged successfully", - "Editore principale": "Primary publisher", - "Edizione": "Edition", - "Elaborato da": "Processed by", - "Elementi": "Items", - "Elenco Autori": "Authors List", - "Elenco Autori - Biblioteca": "Author List - Library", - "Elenco Editori": "Publishers List", - "Elenco Editori - Biblioteca": "Publisher List - Library", - "Elenco Libri": "Books List", - "Elenco Libri - Biblioteca": "Book List - Library", - "Elenco Prestiti": "Loans List", - "Elenco Utenti": "Users List", - "Elenco Utenti - Biblioteca": "Users List - Library", - "Elimina": "Delete", - "Elimina Installer": "Delete Installer", - "Elimina Installer (Richiede Composer)": "Delete Installer (Requires Composer)", - "Elimina Lingua": "Delete Language", - "Elimina copia": "Delete copy", - "Elimina il file .installed dalla root del progetto e riprova": "Delete the .installed file from the project root and try again", - "Elimina questa lingua. Questa azione non può essere annullata.": "Delete this language. This action cannot be undone.", - "Eliminare il libro?": "Delete book?", - "Eliminare l'utente?": "Delete the user?", - "Eliminare questa mensola? (Solo se vuota)": "Delete this shelf? (Only if empty)", - "Eliminare questo scaffale? (Solo se vuoto)": "Delete this bookcase? (Only if empty)", - "Eliminato!": "Deleted!", - "Eliminati": "Deleted", - "Email": "Email", - "Email *": "Email *", - "Email Contatto": "Contact Email", - "Email Non Valida": "Invalid Email", - "Email Non Verificata": "Unverified Email", - "Email Referente": "Contact Person Email", - "Email associata al tuo account": "Email associated with your account", - "Email configurata": "Email configured", - "Email di contatto": "Contact email", - "Email di recupero inviata con successo!": "Recovery email sent successfully!", - "Email dove ricevere i messaggi dal form contatti": "Email where to receive messages from contact form", - "Email e telefono visibili sulla pagina contatti": "Email and phone visible on contact page", - "Email già registrata": "Email already registered", - "Email non trovata nel nostro sistema": "Email not found in our system", - "Email non valida. Verifica il formato": "Invalid email. Check the format", - "Email non verificata. Controlla la tua casella di posta e clicca sul link di verifica": "Email not verified. Check your inbox and click the verification link", - "Email o password non corretti. Verifica le credenziali e riprova": "Email or password incorrect. Check your credentials and try again", - "Email per notifiche": "Email for notifications", - "Email troppo lunga (massimo 255 caratteri)": "Email too long (maximum 255 characters)", - "Email utente": "User email", - "Email:": "Email:", - "Embed della mappa (Google Maps o OpenStreetMap). Puoi inserire l'URL o il codice iframe completo.": "Map embed (Google Maps or OpenStreetMap). You can insert the URL or full iframe code.", - "Emoji Bandiera": "Flag Emoji", - "Emoji della bandiera del paese (opzionale)": "Country flag emoji (optional)", - "Emoji della bandiera del paese (opzionale, default: 🌐)": "Country flag emoji (optional, default: 🌐)", - "Encryption": "Encryption", - "Endpoint": "Endpoint", - "Es. Italiana...": "E.g. Italian...", - "Es. Milano...": "E.g. Milan...", - "English (EN)": "English (EN)", - "Errore": "Error", - "Errore Installazione": "Installation Error", - "Errore Upload": "Upload Error", - "Errore caricamento Audiobook": "Audiobook upload error", - "Errore caricamento classificazione Dewey": "Error loading Dewey classification", - "Errore caricamento eBook": "eBook upload error", - "Errore database:": "Database error:", - "Errore del Server": "Server Error", - "Errore del database": "Database error", - "Errore del database durante la registrazione. Riprova più tardi": "Database error during registration. Please try again later", - "Errore del server": "Server error", - "Errore del server. Riprova più tardi.": "Server error. Please try again later.", - "Errore di comunicazione con il server": "Server communication error", - "Errore di configurazione del server.": "Server configuration error.", - "Errore di configurazione.": "Configuration error.", - "Errore di connessione": "Connection error", - "Errore di connessione durante l'importazione": "Connection error during import", - "Errore di connessione:": "Connection error:", - "Errore di salvataggio": "Save error", - "Errore di sicurezza": "Security error", - "Errore di sicurezza, riprova": "Security error, try again", - "Errore di sicurezza. Aggiorna la pagina e riprova": "Security error. Refresh the page and try again", - "Errore di sicurezza. Ricarica la pagina e riprova.": "Security error. Reload the page and try again.", - "Errore di sistema.": "System error.", - "Errore durante il caricamento dei dettagli del plugin.": "Error loading plugin details.", - "Errore durante il caricamento del file (code: %s).": "Error uploading file (code: %s).", - "Errore durante il caricamento del file.": "Error during file upload.", - "Errore durante il ricalcolo:": "Error during recalculation:", - "Errore durante il rifiuto": "Error during rejection", - "Errore durante il salvataggio": "Error while saving", - "Errore durante il salvataggio delle impostazioni:": "Error saving settings:", - "Errore durante il salvataggio nel database.": "Error saving to database.", - "Errore durante il salvataggio.": "Error during save.", - "Errore durante il salvataggio:": "Error during save:", - "Errore durante il seed": "Error during seed", - "Errore durante l'aggiornamento": "Error during update", - "Errore durante l'aggiornamento dell'evento.": "Error updating event.", - "Errore durante l'aggiornamento della chiave Google Books.": "Error updating Google Books key.", - "Errore durante l'approvazione": "Error during approval", - "Errore durante l'attivazione del plugin.": "Error activating plugin.", - "Errore durante l'attivazione: %s": "Error during activation: %s", - "Errore durante l'eliminazione dell'evento.": "Error deleting event.", - "Errore durante l'estrazione del plugin.": "Error extracting plugin.", - "Errore durante l'import: %s": "Import error: %s", - "Errore durante l'importazione (HTTP %d)": "Import error (HTTP %d)", - "Errore durante l'importazione dati": "Error during data import", - "Errore durante l'installazione del plugin.": "Error installing plugin.", - "Errore durante l'installazione:": "Error during installation:", - "Errore durante l'installazione: %s": "Error during installation: %s", - "Errore durante l'invio dell'email. Riprova più tardi": "Error sending the email. Please try again later", - "Errore durante l'unione degli autori": "Error merging authors", - "Errore durante l'unione degli editori": "Error merging publishers", - "Errore imprevisto durante l'unione degli autori": "Unexpected error merging authors", - "Errore imprevisto durante l'unione degli editori": "Unexpected error merging publishers", - "Errore durante l'upload.": "Upload error.", - "Errore durante la correzione:": "Error during correction:", - "Errore durante la creazione del prestito.": "Error creating the loan.", - "Errore durante la creazione dell'evento.": "Error creating event.", - "Errore durante la creazione dell'utente:": "Error during user creation:", - "Errore durante la disattivazione del plugin.": "Error during plugin deactivation.", - "Errore durante la disattivazione: %s": "Error during deactivation: %s", - "Errore durante la disinstallazione del plugin.": "Error during plugin uninstallation.", - "Errore durante la finalizzazione:": "Error during finalization:", - "Errore durante la manutenzione:": "Error during maintenance:", - "Errore durante la registrazione": "Registration error", - "Errore durante la ricerca su": "Error during search on", - "Errore durante la rimozione dal database.": "Error removing from database.", - "Errore interno del database. Riprova più tardi.": "Internal database error. Please try again later.", - "Errore interno durante l'approvazione": "Internal error during approval", - "Errore interno: %s": "Internal error: %s", - "Errore nel caricamento dei libri": "Error loading books", - "Errore nel caricamento del file": "Error while uploading the file", - "Aggiunge badge cliccabili alla scheda libro per cercare su Anna's Archive, Z-Library e Project Gutenberg con un click. Ispirato all'estensione browser GoodLib.": "Adds clickable badges to the book detail page to search on Anna's Archive, Z-Library, and Project Gutenberg in one click. Inspired by the GoodLib browser extension.", - "Anna's Archive": "Anna's Archive", - "Catalogo pubblico": "Public catalog", - "Configura Fonti": "Configure Sources", - "Domini mirror": "Mirror domains", - "Dominio non valido. Inserisci solo host o host:porta, senza percorsi.": "Invalid domain. Enter only host or host:port, without paths.", - "Dominio personalizzato...": "Custom domain...", - "Errore durante l'aggiornamento del profilo.": "Error updating profile.", - "Cerca su:": "Search on:", - "Predefinita del sito": "Site default", - "Cerca \"%s\" su %s": "Search \"%s\" on %s", - "Fonti attive": "Active sources", - "GoodLib — External Sources": "GoodLib — External Sources", - "GoodLib — Fonti Esterne": "GoodLib — External Sources", - "Impostazioni GoodLib salvate correttamente.": "GoodLib settings saved successfully.", - "Mostra badge nella pagina dettaglio libro": "Show badges on the book detail page", - "Mostra badge nell'area amministrazione": "Show badges in the admin area", - "Mostra i badge nella pagina dettaglio libro del catalogo": "Show badges on the catalog book detail page", - "Mostra i badge nella scheda libro dell'area amministrazione": "Show badges on the admin book page", - "Project Gutenberg": "Project Gutenberg", - "Puoi scegliere un mirror suggerito oppure selezionare dominio personalizzato.": "You can choose a suggested mirror or select a custom domain.", - "Puoi usare i mirror suggeriti oppure inserire un dominio custom.": "You can use the suggested mirrors or enter a custom domain.", - "Questi siti cambiano dominio spesso. Seleziona un mirror funzionante.": "These sites often change domain. Select a working mirror.", - "Scheda libro admin": "Admin book page", - "Sono accettati anche domini personalizzati; se incolli un URL completo verrà salvato solo l'host.": "Custom domains are also accepted; if you paste a full URL, only the host will be saved.", - "Visibilita": "Visibility", - "Visibilità": "Visibility", - "Z-Library": "Z-Library", - "Errore nel caricamento del file JSON": "Error loading JSON file", - "Errore nel caricamento. Riprova.": "Error loading. Please try again.", - "Errore nel download della copertina.": "Error downloading the cover.", - "Errore nel recupero delle categorie.": "Error fetching the categories.", - "Errore nel recupero delle divisioni.": "Error fetching the divisions.", - "Errore nel recupero delle specifiche.": "Error fetching the specific sections.", - "Errore nel rifiuto": "Error in rejection", - "Errore nel rifiuto della richiesta": "Error while rejecting the request", - "Errore nel salvataggio dell'immagine.": "Error saving the image.", - "Errore nel salvataggio dell'ordine. Ricarica la pagina e riprova.": "Error saving order. Please reload the page and try again.", - "Errore nell'aggiornamento del template": "Error updating template", - "Errore nell'aggiornamento dello stato dell'API key: %s": "Error updating API key status: %s", - "Errore nell'aggiornamento:": "Error updating:", - "Errore nell'aggiornare i preferiti.": "Error updating favorites.", - "Errore nell'approvazione": "Error in approval", - "Errore nell'eliminazione dell'API key: %s": "Error deleting API key: %s", - "Errore nell'eliminazione:": "Error deleting:", - "Errore nell'operazione:": "Error in operation:", - "Errore nella Verifica dell'Installazione": "Installation Verification Error", - "Errore nella comunicazione con il server": "Server communication error", - "Errore nella copia:": "Copy error:", - "Errore nella copia: ": "Copy error: ", - "Errore nella creazione del genere.": "Error while creating the genre.", - "Errore nella creazione dell'API key: %s": "Error creating API key: %s", - "Errore nella creazione della recensione": "Error creating review", - "Errore nella creazione della richiesta di prestito": "Error creating loan request", - "Errore nella creazione:": "Error creating:", - "Errore nella prenotazione": "Reservation error", - "Errore nella query.": "Query error.", - "Errore nella ricerca": "Search error", - "Errore suggerimento": "Suggestion error", - "Errore!": "Error!", - "Errore:": "Error:", - "Errore: ": "Error: ", - "Errore: Utente non trovato": "Error: User not found", - "Errore: la data di scadenza deve essere successiva alla data di prestito.": "Error: the due date must be after the loan date.", - "Errore: tutti i campi obbligatori devono essere compilati.": "Error: all required fields must be filled.", - "Errori durante l'import": "Import Errors", - "Errori di validazione dopo il merge.": "Validation errors after merge.", - "Es. Biblioteca Digitale - Migliaia di libri da esplorare": "E.g. Digital Library - Thousands of books to explore", - "Es. Esplora migliaia di libri, prenota online e gestisci i tuoi prestiti.": "E.g. Explore thousands of books, book online and manage your loans.", - "Es. Italiana, Americana, Francese...": "E.g. Italian, American, French...", - "Es. Italiana, Americana...": "E.g. Italian, American...", - "Es. La Tua Biblioteca Digitale": "E.g. Your Digital Library", - "Es. Presentazione libro \"Il Nome della Rosa\"": "E.g. Book presentation \"The Name of the Rose\"", - "Es. Scopri il nostro catalogo digitale con migliaia di libri disponibili per il prestito. Registrati gratuitamente e inizia a leggere oggi stesso.": "E.g. Discover our digital catalog with thousands of books available for loan. Register for free and start reading today.", - "Es. Un libro fantastico!": "E.g. An amazing book!", - "Es. Un libro straordinario!": "E.g. An extraordinary book!", - "Es. biblioteca digitale, prestito libri, catalogo online, libri gratis": "E.g. digital library, book loan, online catalog, free books", - "Es. https://tuosito.com": "E.g. https://yoursite.com", - "Es. https://tuosito.com/uploads/og-image.jpg": "E.g. https://yoursite.com/uploads/og-image.jpg", - "Esci": "Logout", - "Esecuzione ogni 30 minuti (consigliato)": "Execute every 30 minutes (recommended)", - "Esecuzione ogni ora (8:00-20:00)": "Execute every hour (8:00-20:00)", - "Esegue la rigenerazione ogni giorno alle 02:00 e registra il log in": "Runs regeneration daily at 02:00 and logs to", - "Esegue la rigenerazione ogni giorno alle 02:00 e registra il log in storage/logs/sitemap.log.": "Executes regeneration daily at 02:00 and logs to storage/logs/sitemap.log.", - "Esegui": "Run", - "Esegui Manutenzione": "Run Maintenance", - "Eseguito da": "Executed by", - "Esempio": "Example", - "Esempio di Chiamata": "Request Example", - "Esempio route inglese:": "English route example:", - "Esempio route italiana:": "Italian route example:", - "Esempio:": "Example:", - "Esistente": "Existing", - "Esito restituzione": "Return outcome", - "Español (ES)": "Spanish (ES)", - "Esplora Catalogo": "Explore Catalog", - "Esplora catalogo": "Browse Catalog", - "Esplora e gestisci gli autori della biblioteca": "Explore and manage library authors", - "Esplora e gestisci gli editori della biblioteca": "Explore and manage library publishers", - "Esplora e gestisci gli utenti registrati alla biblioteca": "Explore and manage registered library users", - "Esplora e gestisci la collezione della biblioteca": "Explore and manage the library collection", - "Esplora i generi principali": "Explore the main genres", - "Esplora il catalogo": "Explore the catalog", - "Esplora il nostro vasto catalogo di libri, prenota i tuoi titoli preferiti e scopri nuove letture": "Explore our vast catalog of books, reserve your favorite titles and discover new reads", - "Esplora il nostro vasto catalogo di libri, prenota i tuoi titoli preferiti e scopri nuove letture. Sistema di prestito moderno e intuitivo con ricerca avanzata e categorie organizzate.": "Explore our vast book catalog, reserve your favorite titles and discover new reads. Modern and intuitive lending system with advanced search and organized categories.", - "Esplora per Categoria": "Explore by Category", - "Esporta": "Export", - "Esporta CSV": "Export CSV", - "Esporta Prestiti": "Export Loans", - "Seleziona gli stati dei prestiti da esportare:": "Select the loan statuses to export:", - "Seleziona almeno 2 autori da unire": "Select at least 2 authors to merge", - "Seleziona almeno 2 autori": "Select at least 2 authors", - "Seleziona almeno 2 editori": "Select at least 2 publishers", - "Seleziona almeno 2 editori da unire": "Select at least 2 publishers to merge", - "Seleziona almeno uno stato": "Select at least one status", - "Esporta CSV (formato compatibile per import)": "Export CSV (compatible format for import)", - "Esporta Excel": "Export Excel", - "Esporta PDF": "Export PDF", - "Esporta selezionati": "Export selected", - "Esportazione di %d utenti filtrati su %d totali": "Exporting %d filtered users out of %d total", - "Esportazione di tutti i %d utenti": "Exporting all %d users", - "Esportazione di %d libri filtrati su %d totali": "Exporting %d filtered books out of %d total", - "Esportazione di tutti i %d libri del catalogo": "Exporting all %d books from the catalog", - "Estensione": "Extension", - "Estensione del file non valida.": "Invalid file extension.", - "Estensioni": "Extensions", - "Etichetta": "Label", - "Etichette": "Labels", - "Etichette interne grandi (Herma 4630, Avery 3490)": "Large internal labels (Herma 4630, Avery 3490)", - "European Article Number (opzionale)": "European Article Number (optional)", - "Eventi": "Events", - "Eventi Recenti": "Recent Events", - "Evento": "Event", - "Evento aggiornato con successo!": "Event updated successfully!", - "Evento creato con successo!": "Event created successfully!", - "Evento della biblioteca": "Library event", - "Evento eliminato con successo!": "Event deleted successfully!", - "Evento non trovato.": "Event not found.", - "Evento visibile sul sito": "Event visible on website", - "Eventuali annotazioni sullo stato del libro...": "Any notes on book condition...", - "Excel": "Excel", - "Exporting %d filtered users out of %d total": "Exporting %d filtered users out of %d total", - "Exporting all %d users": "Exporting all %d users", - "FAQ": "FAQ", - "FATAL ERROR:": "FATAL ERROR:", - "Facebook": "Facebook", - "Fallimento": "Failure", - "Fatal Error:": "Fatal Error:", - "Fatto!": "Done!", - "Feature %d": "Feature %d", - "Feature 1": "Feature 1", - "Feature 2": "Feature 2", - "Feature 3": "Feature 3", - "Feature 4": "Feature 4", - "Features - Caratteristiche": "Features - Features", - "Femmina": "Female", - "File": "File", - "File \"%s\" pronto per l'upload": "File \"%s\" ready for upload", - "File %s nella directory root": "File %s in the root directory", - "File .env:": ".env file:", - "File .htaccess creato": ".htaccess file created", - "File .installed:": ".installed file:", - "File CSV (max 10MB)": "CSV file (max 10MB)", - "File CSV non valido: usa \";\" o \",\" come separatore.": "Invalid CSV file: use ';' or ',' as delimiter.", - "File CSV vuoto o formato non valido": "Empty CSV file or invalid format", - "File JSON con le traduzioni (opzionale). Puoi caricarlo anche in seguito.": "JSON file with translations (optional). You can upload it later.", - "File JSON non valido": "Invalid JSON file", - "File Principale:": "Main File:", - "File URL": "File URL", - "File ZIP con struttura plugin valida": "ZIP file with valid plugin structure", - "File ZIP non trovato.": "ZIP file not found.", - "File ZIP troppo grande. Dimensione massima: 100 MB.": "ZIP file too large. Maximum size: 100 MB.", - "File attuale": "Current file", - "File di Esempio": "Example File", - "File di Traduzione": "Translation File", - "File di Traduzione Attuale": "Current Translation File", - "File di Traduzione JSON": "JSON Translation File", - "File di traduzione non trovato": "Translation file not found", - "File esistente (data modifica)": "Existing file (modification date)", - "File non trovato nell'upload.": "File not found in upload.", - "File non valido o corrotto.": "Invalid or corrupted file.", - "File plugin.json non trovato nel pacchetto.": "plugin.json file not found in package.", - "File plugin.json non valido.": "Invalid plugin.json file.", - "File principale PHP specificato in %s": "Main PHP file specified in %s", - "File principale del plugin non trovato.": "Plugin main file not found.", - "File sitemap non trovato": "Sitemap file not found", - "File sitemap presente": "Sitemap file present", - "File troppo grande. Dimensione massima 10MB.": "File too large. Maximum size 10MB.", - "File:": "File:", - "Filtra": "Filter", - "Filtra per Mensola": "Filter by Shelf", - "Filtra per Scaffale": "Filter by Bookcase", - "Filtra per tipo": "Filter by type", - "Filtra mensole per scaffale": "Filter shelves by bookcase", - "Filtri": "Filters", - "Filtri attivi:": "Active filters:", - "Filtri cancellati": "Filters cleared", - "Filtri di Ricerca": "Search Filters", - "Filtri salvati": "Filters saved", - "Filtro Libro": "Book Filter", - "Filtro Utente": "User Filter", - "Filtro genere attivo": "Genre filter active", - "Filtro attivo": "Active filter", - "Filtro sottogenere attivo": "Subgenre filter active", - "Fallito": "Failed", - "Fine": "Finish", - "Fine:": "End:", - "Fino a quando? (opzionale):": "Until when? (optional):", - "Footer": "Footer", - "Formati supportati: JPG, PNG, GIF, WebP. Dimensione massima: 5MB": "Supported formats: JPG, PNG, GIF, WebP. Maximum size: 5MB", - "Formati supportati: MP3, M4A, OGG • Dimensione massima: 500 MB": "Supported formats: MP3, M4A, OGG • Max size: 500 MB", - "Formati supportati: PDF, ePub • Dimensione massima: 100 MB": "Supported formats: PDF, ePub • Max size: 100 MB", - "Formato": "Format", - "Formato CSV Dettagliato": "Detailed CSV Format", - "Formato Etichetta": "Label Format", - "Formato File JSON": "JSON File Format", - "Formato ISBN non valido.": "Invalid ISBN format.", - "Formato biblioteche scolastiche (compatibile A4)": "School library format (A4 compatible)", - "Formato biblioteche scolastiche (compatibili A4)": "School library format (A4 compatible)", - "Formato immagine non supportato. Usa JPG, PNG o WebP.": "Image format not supported. Use JPG, PNG or WebP.", - "Formato impostazioni non valido.": "Invalid settings format.", - "Formato orizzontale per dorso": "Horizontal format for spine", - "Formato quadrato Tirrenia": "Tirrenia square format", - "Formato: CSV con separatore %s • Max 10MB": "Format: CSV with %s separator • Max 10MB", - "Formato: xx_XX (es. it_IT, en_US, es_ES)": "Format: xx_XX (e.g. it_IT, en_US, es_ES)", - "Français (FR)": "French (FR)", - "Frecce ↑ ↓ per il volume": "↑ ↓ arrows for volume", - "From Email": "From Email", - "From Name": "From Name", - "Fuori Catalogo": "Out of Catalog", - "Genera automaticamente": "Generate automatically", - "Generato il": "Generated on", - "Generato il:": "Generated on:", - "Generazione CSV in corso...": "Generating CSV...", - "Generazione...": "Generating...", - "Genere": "Genre", - "Genere letterario": "Literary genre", - "Genere letterario del libro": "Literary genre of the book", - "Genere padre (opz.)": "Parent genre (opt.)", - "Genere principale": "Main genre", - "Genere:": "Genre:", - "Generi": "Genres", - "Generi Principali": "Main Genres", - "Generi e sottogeneri": "Genres and subgenres", - "Gestione Autori": "Authors Management", - "Gestione Biblioteca": "Library Management", - "Gestione Collocazione": "Location Management", - "Gestione Contenuti (CMS)": "Content Management (CMS)", - "Gestione Editori": "Publishers Management", - "Gestione Eventi": "Event Management", - "Gestione Generi": "Genres Management", - "Gestione Generi e Sottogeneri": "Genres and Subgenres Management", - "Gestione JavaScript Personalizzati basata su Cookie": "Cookie-based Custom JavaScript Management", - "Gestione Libri": "Books Management", - "Gestione Lingue": "Language Management", - "Gestione Multilingua": "Multilingual Management", - "Gestione Plugin": "Plugin Management", - "Gestione Prenotazioni": "Reservation Management", - "Gestione Prestiti": "Loans Management", - "Gestione Recensioni": "Reviews Management", - "Gestione Utenti": "Users Management", - "Gestione autori": "Authors management", - "Gestione classificazione Dewey: seed e statistiche": "Dewey classification management: seed and statistics", - "Gestione collezione": "Collection management", - "Gestione prestiti": "Loans management", - "Gestione recensioni": "Reviews management", - "Gestione utenti": "Users management", - "Gestisci": "Manage", - "Gestisci Eventi": "Manage Events", - "Gestisci Restituzione": "Manage Return", - "Gestisci gli aggiornamenti dell'applicazione": "Manage application updates", - "Gestisci gli autori della collezione": "Manage collection authors", - "Gestisci gli eventi della biblioteca: crea, modifica ed elimina eventi con immagini e descrizioni": "Manage library events: create, edit and delete events with images and descriptions", - "Gestisci i generi letterari": "Manage literary genres", - "Gestisci i prestiti attivi e storici": "Manage active and historical loans", - "Gestisci i tuoi titoli preferiti, scopri quando tornano disponibili e accedi rapidamente ai dettagli del libro.": "Manage your favorite titles, find out when they become available, and quickly access book details.", - "Gestisci il contenuto della pagina Chi Siamo con testo e immagine": "Manage the About Us page content with text and image", - "Gestisci il contenuto della pagina Chi Siamo con testo e immagine personalizzati": "Manage About Us page content with custom text and image", - "Gestisci l'accesso all'API per cercare libri via EAN, ISBN e autore": "Manage API access to search books via EAN, ISBN and author", - "Gestisci la collocazione fisica dei libri": "Manage physical location of books", - "Gestisci la visibilità delle categorie di cookie nel banner. I cookie essenziali sono sempre visibili e obbligatori.": "Manage cookie category visibility in banner. Essential cookies are always visible and mandatory.", - "Gestisci le case editrici": "Manage publishers", - "Gestisci le classificazioni Dewey per italiano e inglese": "Manage Dewey classifications for Italian and English", - "Gestisci le estensioni dell'applicazione": "Manage application extensions", - "Gestisci preferenze cookie": "Manage cookie preferences", - "Gestisci restituzione": "Manage return", - "Gestisci tutte": "Manage all", - "Gestito da": "Managed by", - "Giorni di preavviso per scadenza prestito": "Days of advance warning for loan expiry", - "Già Installato": "Already Installed", - "Già recensito": "Already reviewed", - "Gli amministratori non richiedono tessera e riceveranno un invito per impostare la password.": "Administrators do not require a library card and will receive an invitation to set their password.", - "Gli appuntamenti della biblioteca": "Library events", - "Gli script JavaScript sono divisi in 3 categorie in base alla tipologia di cookie:": "JavaScript scripts are divided into 3 categories based on cookie type:", - "Gli utenti possono selezionare questa lingua": "Users can select this language", - "Globale": "Global", - "Google Books API": "Google Books API", - "Google Books Configurato": "Google Books configured", - "Google reCAPTCHA v3": "Google reCAPTCHA v3", - "Grazie per aver scelto Pinakes!": "Thank you for choosing Pinakes!", - "Gruppo": "Group", - "Guida": "Guide", - "Guida alla Gestione Lingue": "Language Management Guide", - "Guida alle Route": "Route Guide", - "Hai aggiunto %s copie a \"%s\"": "You added %s copies to \"%s\"", - "Hai già un account?": "Already have an account?", - "Hai libri che dovevano essere restituiti. Restituiscili al più presto per evitare sanzioni.": "You have books that should have been returned. Return them as soon as possible to avoid penalties.", - "Hai modifiche non salvate che andranno perse. Continuare?": "You have unsaved changes that will be lost. Continue?", - "Hai modifiche non salvate. I dati attuali verranno sostituiti.": "You have unsaved changes. Current data will be replaced.", - "Hai modifiche non salvate. Vuoi continuare e perderle?": "You have unsaved changes. Do you want to continue and lose them?", - "Header HTTP (consigliato):": "HTTP Header (recommended):", - "Heading 1": "Heading 1", - "Heading 2": "Heading 2", - "Heading 3": "Heading 3", - "Heading 4": "Heading 4", - "Heading 5": "Heading 5", - "Heading 6": "Heading 6", - "Hero - Testata principale": "Hero - Main Header", - "Home": "Home", - "Homepage": "Homepage", - "Host": "Host", - "Host Database": "Database Host", - "I Cookie Essenziali sono sempre visibili e non possono essere disabilitati poiché necessari per il funzionamento del sito.": "Essential Cookies are always visible and cannot be disabled as they are necessary for site functionality.", - "I Miei Preferiti": "My Favorites", - "I campi con * sono obbligatori": "Fields with * are required", - "I campi null indicano dati non disponibili": "Null fields indicate unavailable data", - "I contenitori fisici principali dove sono organizzati i libri": "The main physical containers where books are organized", - "I dati provengono dal file JSON, nessun seeding necessario.": "Data comes from the JSON file, no seeding required.", - "I doppioni (per ID, ISBN13 o EAN) vengono aggiornati senza modificare le copie fisiche": "Duplicates (by ID, ISBN13 or EAN) are updated without modifying physical copies", - "I filtri correnti sono stati salvati nell'URL": "Current filters have been saved in the URL", - "I filtri vengono applicati automaticamente mentre digiti": "Filters are applied automatically as you type", - "I livelli (ripiani) all'interno di ogni scaffale": "The levels (shelves) within each bookcase", - "I miei preferiti": "My Favorites", - "I tuoi preferiti": "Your Favorites", - "ID": "ID", - "ID:": "ID:", - "ID Editore": "Publisher ID", - "ID Prestito": "Loan ID", - "ID Prestito:": "Loan ID:", - "ID libro non valido": "Invalid book ID", - "ID libro:": "Book ID:", - "ID prestito non valido": "Invalid loan ID", - "ID utente:": "User ID:", - "IP": "IP", - "IP Address": "IP Address", - "ISBN": "ISBN", - "ISBN 10": "ISBN 10", - "ISBN 13": "ISBN 13", - "ISBN Mancante": "Missing ISBN", - "ISBN a 13 cifre (univoco)": "13-digit ISBN (unique)", - "ISBN non trovato nelle fonti disponibili.": "ISBN not found in available sources.", - "ISBN non valido. Specifica 10 o 13 cifre (eventualmente con X finale).": "Invalid ISBN. Please provide 10 or 13 digits (X allowed at the end).", - "ISBN-13:": "ISBN-13:", - "ISBN10": "ISBN10", - "ISBN10 Non Valido": "Invalid ISBN10", - "ISBN10 deve contenere esattamente 10 caratteri (9 cifre + 1 cifra o X).": "ISBN10 must contain exactly 10 characters (9 digits + 1 digit or X).", - "ISBN10 o ISBN13": "ISBN10 or ISBN13", - "ISBN13": "ISBN13", - "ISBN13 Non Valido": "Invalid ISBN13", - "ISBN13 deve contenere esattamente 13 cifre.": "ISBN13 must contain exactly 13 digits.", - "ISBN13: %s": "ISBN13: %s", - "ISBN:": "ISBN:", - "IT": "IT", - "Icona FontAwesome": "FontAwesome Icon", - "Identità": "Identity", - "Identità Applicazione": "Application Identity", - "Ieri": "Yesterday", - "Ieri alle %s": "Yesterday at %s", - "Il Mio Profilo": "My Profile", - "Prima di ogni aggiornamento viene creato automaticamente un backup del database.": "Before each update, a database backup is automatically created.", - "Pinakes è aggiornato": "Pinakes is up to date", - "Pinakes è stato aggiornato con successo.": "Pinakes has been successfully updated.", - "Pinakes è stato installato con successo ed è pronto per essere utilizzato.": "Pinakes has been successfully installed and is ready to use.", - "Il campo è obbligatorio": "This field is required", - "Il codice lingua non può essere modificato dopo la creazione.": "The language code cannot be modified after creation.", - "Il codice lingua è obbligatorio (es. it_IT, en_US)": "Language code is required (e.g. it_IT, en_US)", - "Il codice scaffale \"%s\" esiste già. Usa un codice diverso.": "Shelf code \"%s\" already exists. Use a different code.", - "Il codice tessera sarà generato automaticamente (formato: ADMIN-YYYYMMDD-XXX).": "The membership code will be generated automatically (format: ADMIN-YYYYMMDD-XXX).", - "Il codice deve iniziare con le stesse tre cifre della classe principale": "The code must start with the same three digits of the main class", - "Il codice verrà inserito in un tag ": "The code will be inserted in a tags", - "Il cron utilizza gli stessi permessi dell'utente di sistema che lo esegue": "Cron uses same permissions as system user executing it", - "Il database '%s' non è vuoto. Deve essere un database vuoto.": "The database '%s' is not empty. It must be an empty database.", - "Il database deve essere vuoto.": "The database must be empty.", - "Il database è coerente e non sono stati rilevati problemi.": "The database is consistent and no issues were found.", - "Il database è stato installato, ma mancano le librerie PHP necessarie per eseguire l'applicazione.": "The database has been installed, but the PHP libraries needed to run the application are missing.", - "Il file JSON deve contenere coppie chiave-valore:": "The JSON file must contain key-value pairs:", - "Il file JSON non è valido:": "JSON file is not valid:", - "Il file deve avere estensione .csv": "The file must have a .csv extension", - "Il file deve contenere coppie chiave (italiano) - valore (traduzione).": "The file must contain key (Italian) - value (translation) pairs.", - "Il file deve essere un JSON valido": "File must be a valid JSON", - "Il file generato si trova in": "Generated file is located in", - "Il file generato si trova in public/sitemap.xml": "Generated file is located at public/sitemap.xml", - "Il formato scelto verrà utilizzato per generare i PDF delle etichette con codice a barre.": "The chosen format will be used to generate label PDFs with barcodes.", - "Il formato selezionato verrà applicato a tutte le etichette generate dal sistema.": "The selected format will be applied to all labels generated by the system.", - "Il libro selezionato è già in prestito. Seleziona un altro libro.": "The selected book is already on loan. Select another book.", - "Il libro viene consegnato subito all'utente. Se deselezionato, il prestito rimarrà in stato 'Da ritirare' fino alla conferma del ritiro.": "The book is delivered immediately to the user. If unchecked, the loan will remain in 'Ready for pickup' status until pickup is confirmed.", - "Il logo verrà ridimensionato automaticamente": "The logo will be automatically resized", - "Il mio profilo": "My Profile", - "Il nome del genere è obbligatorio.": "Genre name is required.", - "Il nome dell'": "The name of", - "Il nome dell'API key è obbligatorio.": "API key name is required.", - "Il nome dell'autore è obbligatorio.": "Author name is required.", - "Il nome dell'editore è obbligatorio.": "Publisher name is required.", - "Il nome della rosa": "The Name of the Rose", - "Il nome inglese è obbligatorio": "English name is required", - "Il nome inglese è obbligatorio (es. Italian, English)": "English name is required (e.g. Italian, English)", - "Il nome nativo è obbligatorio": "Native name is required", - "Il nome nativo è obbligatorio (es. Italiano, English)": "Native name is required (e.g. Italiano, English)", - "Il nostro team è stato notificato e sta lavorando per risolvere il problema.": "Our team has been notified and is working to resolve the issue.", - "Il pacchetto contiene percorsi non validi.": "Package contains invalid paths.", - "Il pacchetto non contiene file validi.": "Package does not contain valid files.", - "Il prestito è stato approvato con successo.": "The loan has been successfully approved.", - "Il prestito è stato rifiutato.": "The loan has been rejected.", - "Il sistema creerà automaticamente libri, autori ed editori": "The system will automatically create books, authors, and publishers", - "Il sistema include un cron job che gestisce automaticamente:": "The system includes a cron job that automatically handles:", - "Il sistema invierà automaticamente una email di promemoria agli utenti prima della scadenza del prestito. Il valore predefinito è 3 giorni.": "The system will automatically send a reminder email to users before the loan expires. Default value is 3 days.", - "Il server ha restituito una risposta non valida. Controlla i log per dettagli.": "The server returned an invalid response. Check the logs for details.", - "Il sito web deve essere un URL valido (es. https://www.esempio.com).": "Website must be a valid URL (e.g. https://www.example.com).", - "Il sito web deve essere un URL valido.": "Website must be a valid URL.", - "Il titolo del libro è obbligatorio.": "The book title is required.", - "Il titolo principale della pagina": "The main page title", - "Il titolo verrà utilizzato anche per generare l'URL della pagina": "The title will also be used to generate the page URL", - "Il titolo è obbligatorio.": "Title is required.", - "Il tuo account è in attesa di approvazione. Riceverai un'email quando sarà attivato": "Your account is pending approval. You will receive an email when it is activated", - "Il tuo account è stato sospeso. Contatta l'amministratore per maggiori informazioni": "Your account has been suspended. Contact the administrator for more information", - "Il tuo browser non supporta la riproduzione audio.": "Your browser does not support audio playback.", - "Immagine": "Image", - "Immagine Caricata!": "Image Uploaded!", - "Immagine Open Graph": "Open Graph Image", - "Immagine attuale": "Current Image", - "Immagine di copertina della pagina (opzionale)": "Page cover image (optional)", - "Immagine di sfondo Hero": "Hero Background Image", - "Immagine in Evidenza": "Featured Image", - "Immagine mostrata quando condividi la pagina su social media (Facebook, Twitter, LinkedIn). Se vuoto, usa l'immagine hero di sfondo. Dimensioni consigliate: 1200x630px (rapporto 1.91:1).": "Image shown when sharing the page on social media (Facebook, Twitter, LinkedIn). If empty, uses the hero background image. Recommended size: 1200x630px (1.91:1 ratio).", - "Immagine mostrata quando condividi su social. Dimensioni consigliate: 1200x630px (rapporto 1.91:1). Se vuoto, usa l'immagine hero di sfondo.": "Image shown when sharing on social media. Recommended dimensions: 1200x630px (1.91:1 ratio). If empty, uses the hero background image.", - "Immagini JPG, PNG o WebP (max 5MB)": "JPG, PNG or WebP images (max 5MB)", - "Import CSV": "CSV Import", - "Import Libri da CSV": "Import Books from CSV", - "Import Massivo Libri": "Bulk Book Import", - "Import completato: %d libri nuovi, %d libri aggiornati, %d autori creati, %d editori creati": "Import completed: %d new books, %d updated books, %d authors created, %d publishers created", - "Import dati iniziali...": "Importing initial data...", - "Import massivo da CSV": "Bulk import from CSV", - "Import schema in corso...": "Importing schema...", - "Import trigger...": "Importing triggers...", - "Importa": "Import", - "Importa Dati": "Import Data", - "Importa da ISBN": "Import from ISBN", - "Importazione completata con successo!": "Import completed successfully!", - "Importazione in corso...": "Import in progress...", - "Importazione libro": "Importing book", - "Importazione...": "Importing...", - "Impossibile aggiornare l'utente. Riprova più tardi.": "Unable to update user. Please try again later.", - "Impossibile aggiornare la chiave Google Books.": "Unable to update the Google Books key.", - "Impossibile aggiornare la posizione automatica": "Unable to update automatic position", - "Impossibile aggiornare le copie.": "Unable to update copies.", - "Impossibile approvare la recensione": "Unable to approve the review", - "Impossibile aprire il file CSV": "Unable to open the CSV file", - "Impossibile aprire il file ZIP.": "Unable to open ZIP file.", - "Impossibile archiviare il messaggio.": "Unable to archive the message.", - "Impossibile caricare gli editori. Controlla la console per i dettagli.": "Unable to load publishers. Check console for details.", - "Impossibile caricare i libri. Controlla la console per i dettagli.": "Unable to load books. Check console for details.", - "Impossibile completare l'operazione. Riprova più tardi.": "Unable to complete the operation. Try again later.", - "Impossibile comunicare con il server. Riprova più tardi.": "Unable to communicate with the server. Please try again later.", - "Impossibile configurare autocomplete: elementi mancanti": "Unable to configure autocomplete: missing elements", - "Impossibile contattare il servizio di scraping. Riprova più tardi.": "Unable to contact the scraping service. Please try again later.", - "Impossibile creare il file .env. Verifica i permessi.": "Unable to create the .env file. Check permissions.", - "Impossibile creare la cartella di upload.": "Unable to create the upload directory.", - "Impossibile creare la directory del plugin.": "Unable to create plugin directory.", - "Impossibile creare la prenotazione": "Unable to create reservation", - "Impossibile creare la struttura del plugin.": "Unable to create plugin structure.", - "Impossibile eliminare il file di manutenzione": "Unable to delete maintenance file", - "Impossibile eliminare il messaggio.": "Unable to delete the message.", - "Impossibile eliminare l'autore: sono presenti libri associati.": "Cannot delete the author: there are books associated with them.", - "Impossibile eliminare l'editore: sono presenti libri associati.": "Cannot delete the publisher: there are books associated with it.", - "Impossibile eliminare l'installer:": "Cannot delete the installer:", - "Impossibile eliminare l'installer: devi prima installare le dipendenze PHP con": "Cannot delete the installer: you must first install the PHP dependencies with", - "Impossibile eliminare la notifica.": "Unable to delete the notification.", - "Impossibile generare la risposta JSON.": "Unable to generate the JSON response.", - "Impossibile importare i dati per questo ISBN.": "Unable to import data for this ISBN.", - "Impossibile inizializzare Uppy per i contenuti digitali.": "Unable to initialize Uppy for digital content.", - "Impossibile inviare la recensione": "Unable to submit review", - "Impossibile inviare la recensione.": "Unable to submit review.", - "Impossibile leggere il file caricato": "Unable to read the uploaded file", - "Impossibile processare l'immagine.": "Unable to process the image.", - "Impossibile ridurre le copie a %d. Ci sono %d copie non disponibili (in prestito, perse o danneggiate). Il numero minimo di copie totali è %d.": "Cannot reduce the copies to %d. There are %d unavailable copies (on loan, lost, or damaged). The minimum total number of copies is %d.", - "Impossibile rifiutare la recensione": "Unable to reject the review", - "Impossibile rigenerare la sitemap: %s": "Unable to regenerate sitemap: %s", - "Impossibile salvare l'utente. Riprova più tardi.": "Unable to save user. Please try again later.", - "Impossibile segnare come letta la notifica.": "Unable to mark the notification as read.", - "Impossibile segnare tutte le notifiche come lette.": "Unable to mark all notifications as read.", - "Impossibile segnare tutti i messaggi come letti.": "Unable to mark all messages as read.", - "Impossibile recuperare i dati degli autori": "Unable to retrieve author data", - "Impossibile recuperare i dati degli editori": "Unable to retrieve publisher data", - "Imposta come Predefinita": "Set as Default", - "Imposta come attiva o predefinita": "Set as active or default", - "Imposta come lingua predefinita per nuovi utenti": "Set as default language for new users", - "Imposta il nome mostrato nel backend e il logo utilizzato nel layout.": "Set the name shown in the backend and the logo used in the layout.", - "Impostare questa lingua come predefinita?\n\nQuesta diventerà la lingua dell'intera applicazione per tutti gli utenti.": "Set this language as default?\n\nThis will become the language of the entire application for all users.", - "Impostare questa lingua come predefinita?\\n\\nQuesta diventerà la lingua dell'intera applicazione per tutti gli utenti.": "Set this language as default?\\n\\nThis will become the language of the entire application for all users.", - "Impostazioni": "Settings", - "Impostazioni Applicazione": "Application Settings", - "Impostazioni Date": "Date Settings", - "Impostazioni Discogs salvate correttamente.": "Discogs settings saved successfully.", - "Impostazioni SEO": "SEO Settings", - "Impostazioni avanzate aggiornate correttamente.": "Advanced settings updated successfully.", - "Impostazioni contatti aggiornate correttamente.": "Contact settings updated successfully.", - "Impostazioni email aggiornate correttamente.": "Email settings updated successfully.", - "Impostazioni generali aggiornate correttamente.": "General settings updated successfully.", - "Impostazioni privacy aggiornate correttamente.": "Privacy settings updated successfully.", - "Impostazioni salvate.": "Settings saved.", - "In Attesa di Approvazione": "Pending Approval", - "In Corso": "In Progress", - "In Riparazione": "Under Repair", - "In Ritardo": "Overdue", - "In attesa": "Pending", - "In attesa di approvazione": "Pending approval", - "In corso": "In progress", - "In corso di restituzione": "Pending return", - "In corso...": "In progress...", - "In manutenzione": "Under maintenance", - "In prestito": "On loan", - "In questa pagina trovi tutti gli eventi, gli incontri e i laboratori organizzati dalla biblioteca.": "On this page you will find every event, talk, and workshop organized by the library.", - "In ritardo": "Overdue", - "Inattivo": "Inactive", - "Indietro": "Back", - "Indirizzo": "Address", - "Indirizzo:": "Address:", - "Indirizzo completo": "Full Address", - "Indirizzo completo *": "Full address *", - "Info": "Info", - "Informazione": "Information", - "Informazioni": "Information", - "Informazioni Base": "Basic Information", - "Informazioni Evento": "Event Information", - "Informazioni Importanti": "Important Information", - "Informazioni Libro": "Book Information", - "Informazioni Personali": "Personal Information", - "Informazioni Prestito": "Loan Information", - "Informazioni Report": "Report Info", - "Informazioni di Contatto": "Contact Information", - "Informazioni di contatto": "Contact information", - "Informazioni editore": "Publisher information", - "Informazioni generali": "General Information", - "Informazioni personali": "Personal Information", - "Informazioni tessera": "Card information", - "Informazioni utili per il personale": "Useful information for staff", - "Inizia Installazione": "Start Installation", - "Inizia ad aggiungere libri al catalogo": "Start adding books to the catalog", - "Inizia aggiungendo il primo libro alla collezione": "Start by adding the first book to the collection", - "Inizia aggiungendo la prima lingua.": "Start by adding the first language.", - "Inizia caricando il tuo primo plugin": "Get started by uploading your first plugin", - "Inizia creando il primo genere letterario": "Start by creating your first literary genre", - "Inizia la Tua Avventura Letteraria": "Start Your Literary Adventure", - "Inizializzazione...": "Initializing...", - "Inizio installazione...": "Starting installation...", - "Inizio:": "Start:", - "Inserisci $1": "Enter $1", - "Inserisci codice locale (es. es_ES per Spagnolo)": "Enter locale code (e.g. es_ES for Spanish)", - "Inserisci il motivo del rifiuto...": "Enter the reason for rejection...", - "Inserisci il titolo": "Enter title", - "Inserisci la data di inizio (YYYY-MM-DD)": "Enter the start date (YYYY-MM-DD)", - "Inserisci la tua email per ricevere il link di reset.": "Enter your email to receive the reset link.", - "Inserisci la tua email per ricevere un link di reset": "Enter your email to receive a reset link", - "Inserisci la tua nuova password": "Enter your new password", - "Inserisci le credenziali del tuo database MySQL. Assicurati che il database sia già stato creato e sia vuoto.": "Enter your MySQL database credentials. Make sure the database has been created and is empty.", - "Inserisci le informazioni del nuovo evento": "Enter the information for the new event", - "Inserisci parole chiave separate da virgole per facilitare la ricerca": "Enter keywords separated by commas to facilitate searching", - "Inserisci solo script che NON tracciano utenti. Per analytics/marketing usa le sezioni dedicate.": "Only insert scripts that DO NOT track users. For analytics/marketing use the dedicated sections.", - "Inserisci un codice ISBN per continuare.": "Enter an ISBN code to continue.", - "Inserisci un numero valido di copie": "Enter a valid number of copies", - "Instagram": "Instagram", - "Installa": "Install", - "Installa Plugin": "Install Plugin", - "Installato": "Installed", - "Installato:": "Installed:", - "Installazione": "Installation", - "Installazione Completata": "Installation Completed", - "Installazione Completata!": "Installation Completed!", - "Installazione Cron Job": "Cron Job Installation", - "Installazione Database": "Database Installation", - "Installazione Guidata": "Guided Installation", - "Installazione delle tabelle del database e configurazione iniziale...": "Installing database tables and initial configuration...", - "Installazione fallita": "Installation failed", - "Installazione file": "Installing files", - "Installazione in corso...": "Installation in progress...", - "Installazione italiana usa": "Italian installation uses", - "Installazione plugin Open Library...": "Installing Open Library plugin...", - "Installer Pinakes": "Pinakes Installer", - "Installer eliminato con successo!": "Installer deleted successfully!", - "Integrità dati": "Data integrity", - "Internal server error": "Internal server error", - "Intestazione": "Header", - "Intestazione sezione": "Section Header", - "Inventario": "Inventory", - "Invia Richiesta": "Submit Request", - "Invia link": "Send link", - "Invia link di reset": "Send reset link", - "Invia messaggio": "Send message", - "Invia recensione": "Submit review", - "Inviaci un messaggio": "Send us a message", - "Inviato": "Sent", - "Invio in corso...": "Sending...", - "Invita gli utenti a registrarsi": "Invite users to register", - "Italiano (IT)": "Italian (IT)", - "JPG, PNG, GIF, WEBP - Max 5MB": "JPG, PNG, GIF, WEBP - Max 5MB", - "JavaScript Analitici": "Analytics JavaScript", - "JavaScript Essenziali": "Essential JavaScript", - "JavaScript Marketing": "Marketing JavaScript", - "L'API key può essere fornita in due modi:": "API key can be provided in two ways:", - "L'API è limitata a 50 risultati per richiesta": "API is limited to 50 results per request", - "L'applicazione NON può funzionare senza questo passaggio!": "The application CANNOT work without this step!", - "L'applicazione è stata installata correttamente e tutte le verifiche sono andate a buon fine.": "The application has been successfully installed and all checks have passed.", - "L'email di attivazione è stata inviata. L'utente potrà verificare il proprio account cliccando il link ricevuto (valido 7 giorni).": "Activation email has been sent. User can verify their account by clicking the link received (valid for 7 days).", - "L'immagine verrà scaricata al salvataggio": "The image will be downloaded on save", - "L'immagine è troppo grande. Max 5MB.": "Image is too large. Max 5MB.", - "L'indirizzo email deve essere valido.": "Email address must be valid.", - "L'installazione non è completa o valida.": "The installation is not complete or valid.", - "L'installazione è stata completata senza errori.": "The installation has been completed without errors.", - "L'ID primario deve essere presente nella lista degli autori da unire": "The primary ID must be present in the list of authors to merge", - "L'ID primario deve essere presente nella lista degli editori da unire": "The primary ID must be present in the list of publishers to merge", - "L'ora dell'evento deve essere nel formato corretto (HH:MM).": "Event time must be in the correct format (HH:MM).", - "L'ora deve essere nel formato corretto (HH:MM).": "Time must be in the correct format (HH:MM).", - "L'URL canonico non è valido. Deve iniziare con http:// o https://": "Canonical URL is not valid. It must start with http:// or https://", - "L'ultima sezione che invita all'azione": "The final call-to-action section", - "L'utente del database non ha i permessi per creare i TRIGGER. L'installazione è stata completata, ma per garantire la piena integrità dei dati è necessario installarli manualmente.": "The database user does not have permissions to create TRIGGERS. The installation has been completed, but to ensure full data integrity it is necessary to install them manually.", - "L'utente non è in stato sospeso. Solo gli utenti sospesi richiedono approvazione.": "User is not in suspended state. Only suspended users require approval.", - "L'utente riceverà un'email con link di verifica (valido 7 giorni) e potrà attivare autonomamente l'account.": "User will receive an email with verification link (valid for 7 days) and can activate the account autonomously.", - "L'utente riceverà una notifica via email della prenotazione creata": "User will receive email notification of the created reservation", - "L'utente richiesto non esiste nel database.": "Requested user does not exist in database.", - "L'utente sarà attivato immediatamente e riceverà un'email di benvenuto. Potrà accedere subito.": "User will be activated immediately and will receive a welcome email. Can log in right away.", - "L'utente è stato attivato e può già effettuare il login. È stata inviata un'email di benvenuto.": "User has been activated and can already log in. A welcome email has been sent.", - "L'utente è stato eliminato.": "The user has been deleted.", - "La Tua Biblioteca Digitale": "Your Digital Library", - "La cartella vendor/ esiste e contiene le librerie necessarie.": "The vendor/ folder exists and contains the necessary libraries.", - "La classificazione Dewey è utilizzata per organizzare i libri per argomento secondo standard internazionali": "The Dewey classification is used to organize books by subject according to international standards", - "La collocazione può essere assegnata automaticamente o inserita manualmente durante la creazione/modifica del libro": "Location can be assigned automatically or entered manually during book creation/editing", - "La collocazione è l'indirizzo fisico che identifica dove si trova un libro nella biblioteca.": "Location is the physical address that identifies where a book is located in the library.", - "La copertina verrà rimossa al salvataggio del libro": "The cover will be removed when saving the book", - "La data dell'evento è obbligatoria e deve essere nel formato corretto.": "Event date is required and must be in the correct format.", - "La data dell'evento è obbligatoria.": "Event date is required.", - "La data di nascita deve essere precedente alla data di morte.": "Birth date must be before death date.", - "La lingua contrassegnata come 'Predefinita' verrà usata in tutta l'applicazione per tutti gli utenti. Per cambiare la lingua dell'intera app, clicca sull'icona stella": "The language marked as 'Default' will be used throughout the application for all users. To change the language of the entire app, click the star icon", - "La pagina che stai cercando non esiste o è stata spostata.": "The page you are looking for does not exist or has been moved.", - "La password deve contenere almeno 8 caratteri, lettere maiuscole, minuscole e numeri": "Password must contain at least 8 characters with uppercase letters, lowercase letters, and numbers", - "La password deve contenere almeno una lettera maiuscola, una minuscola e un numero": "Password must contain at least one uppercase letter, one lowercase letter and one number", - "La password deve essere lunga almeno 8 caratteri": "Password must be at least 8 characters long", - "La password deve essere lunga almeno 8 caratteri!": "Password must be at least 8 characters long!", - "La posizione fisica è indipendente dalla classificazione Dewey e indica dove si trova il libro sugli scaffali.": "The physical position is independent of the Dewey classification and indicates where the book is located on the shelves.", - "La posizione in coda sarà calcolata automaticamente in base alle prenotazioni esistenti": "Queue position will be calculated automatically based on existing reservations", - "La posizione viene assegnata automaticamente": "Position is assigned automatically", - "La recensione è stata approvata e pubblicata con successo.": "The review has been approved and published successfully.", - "La recensione è stata rifiutata e non sarà pubblicata.": "The review has been rejected and will not be published.", - "La risposta include tutti i dati del libro:": "Response includes all book data:", - "La scadenza verrà estesa di 14 giorni": "The due date will be extended by 14 days", - "La sessione è scaduta. Aggiorna la pagina e riprova.": "The session has expired. Refresh the page and try again.", - "La sezione principale che appare per prima sulla home": "The main section that appears first on the homepage", - "La sitemap viene aggiornata automaticamente quando premi il pulsante oppure tramite lo script CLI": "Sitemap is updated automatically when you press the button or via CLI script", - "La sitemap viene aggiornata automaticamente quando premi il pulsante oppure tramite lo script CLI php scripts/generate-sitemap.php. Usa questa azione dopo aver importato un grande numero di libri o modifiche ai contenuti CMS.": "Sitemap is automatically updated when you press button or via CLI script php scripts/generate-sitemap.php. Use this action after importing many books or CMS content changes.", - "La cronologia degli aggiornamenti apparirà qui": "The update history will appear here", - "La tua biblioteca digitale...": "Your digital library...", - "La versione %s è disponibile. Prima di aggiornare, verrà creato un backup automatico del database.": "Version %s is available. Before updating, an automatic database backup will be created.", - "La tua sessione è scaduta. Per motivi di sicurezza, effettua nuovamente l'accesso": "Your session has expired. For security reasons, please sign in again", - "La tua sessione è scaduta. Per motivi di sicurezza, ricarica la pagina e riprova": "Your session has expired. For security reasons, refresh the page and try again", - "La tua sessione è scaduta. Per motivi di sicurezza, ricarica la pagina ed effettua nuovamente l'accesso.": "Your session has expired. For security reasons, reload the page and log in again.", - "La tua wishlist è vuota": "Your wishlist is empty", - "Lascia una recensione": "Leave a review", - "Lascia vuoto o usa \"Genera\" per assegnare automaticamente la prossima posizione disponibile.": "Leave empty or use \"Generate\" to automatically assign the next available position.", - "Lascia vuoto o usa \\": "Leave empty or use \\", - "Lascia vuoto per 1 mese": "Leave empty for 1 month", - "Lascia vuoto per auto-rilevamento. Necessario solo su macOS/Linux con socket personalizzati.": "Leave empty for auto-detection. Only needed on macOS/Linux with custom sockets.", - "Lascia vuoto per generare automaticamente": "Leave blank to generate automatically", - "Lascia vuoto per inviare un link di impostazione": "Leave blank to send a setup link", - "Lascia vuoto per nascondere il social dal footer": "Leave empty to hide the social from footer", - "Lascia vuoto per nascondere il titolo": "Leave empty to hide the title", - "Lascia vuoto per mantenere la chiave esistente. Inserisci un nuovo valore per aggiornarla.": "Leave empty to keep the existing key. Enter a new value to update it.", - "Lascia vuoto per mantenere il nome attuale": "Leave empty to keep the current name", - "Lascia vuoto per non modificare": "Leave empty to not modify", - "Lascia vuoto se l'autore è vivente": "Leave blank if the author is alive", - "Le API key disattivate restituiranno errore 401": "Disabled API keys will return 401 error", - "Le Mie Prenotazioni": "My Reservations", - "Le Mie Recensioni": "My Reviews", - "Le copie disponibili vengono calcolate automaticamente": "Available copies are calculated automatically", - "Le date rosse non sono disponibili. La richiesta verrà valutata da un amministratore.": "Red dates are unavailable. Your request will be reviewed by an administrator.", - "Le mie prenotazioni": "My Reservations", - "Le password non coincidono": "Passwords do not match", - "Le password non coincidono!": "Passwords do not match!", - "Le posizioni si generano automaticamente": "Positions are generated automatically", - "Le route non possono contenere spazi": "Routes cannot contain spaces", - "Le route sono gli URL usati nell'applicazione. Traducendole, puoi avere URL in italiano o inglese in base alla lingua dell'installazione.": "Routes are the URLs used in the application. By translating them, you can have URLs in Italian or English based on the installation language.", - "Le tue recensioni": "Your reviews", - "Letto": "Read", - "Lettore": "Reader", - "Libero": "Free", - "Librerie di upload non caricate. Ricarica la pagina.": "Upload libraries not loaded. Please reload the page.", - "Libri": "Books", - "Libri Disponibili": "Available Books", - "Libri Prestati": "Loaned Books", - "Libri Totali": "Total Books", - "Libri per Collocazione": "Books by Location", - "Libro": "Book", - "Libro Esistente:": "Existing Book:", - "Libro Già Esistente": "Book Already Exists", - "Libro aggiornato con successo!": "Book updated successfully!", - "Libro aggiunto con successo!": "Book added successfully!", - "Libro da prenotare": "Book to reserve", - "Libro e utente sono campi obbligatori.": "Book and user are required fields.", - "Libro non disponibile": "Book not available", - "Libro non trovato su Open Library.": "Book not found on Open Library.", - "Libro non trovato.": "Book not found.", - "Libro non trovato": "Book not found", - "Libro senza titolo": "Untitled book", - "Libro:": "Book:", - "Licenza": "License", - "Limite massimo rinnovi raggiunto": "Maximum renewal limit reached", - "Limiti: massimo 50 libri con scraping attivo, timeout 5 minuti": "Limits: maximum 50 books with scraping enabled, 5 minute timeout", - "Lingua": "Language", - "Lingua App": "App Language", - "Lingua Attiva": "Active Language", - "Lingua Predefinita": "Default Language", - "Lingua Predefinita:": "Default Language:", - "Lingua aggiornata con successo": "Language updated successfully", - "Lingua creata con successo": "Language created successfully", - "Lingua eliminata con successo": "Language deleted successfully", - "Lingua non trovata": "Language not found", - "Lingua originale del libro": "Original language of the book", - "Lingua predefinita impostata con successo": "Default language set successfully", - "Lingue": "Languages", - "Lingue Configurate": "Configured Languages", - "Link": "Link", - "Link Cookie Statement": "Cookie Statement Link", - "Link Cookie Technologies": "Cookie Technologies Link", - "Link Social Media": "Social Media Links", - "Link al file digitale (se disponibile)": "Link to digital file (if available)", - "Link all'audiolibro (se disponibile)": "Link to audiobook (if available)", - "Link copiato!": "Link copied!", - "Link di reset non valido o scaduto": "Reset link invalid or expired", - "Link pulsante": "Button Link", - "LinkedIn": "LinkedIn", - "Livello": "Level", - "Livello ${m.numero_livello}": "Level ${m.numero_livello}", - "Livello *": "Level *", - "Livello 1 (Classi)": "Level 1 (Classes)", - "Livello 2 (Divisioni)": "Level 2 (Divisions)", - "Livello 3 (Specifiche)": "Level 3 (Specifics)", - "Livello principale (es. Prosa, Poesia, Teatro)": "Main level (e.g. Prose, Poetry, Theater)", - "Lo script CLI utilizza il valore di APP_CANONICAL_URL. Assicurati che sia configurato correttamente per evitare URL duplicati.": "CLI script uses APP_CANONICAL_URL value. Make sure it is configured correctly to avoid duplicate URLs.", - "Lo stato della prenotazione sarà impostato automaticamente come \"attiva\"": "The reservation status will be automatically set as \"active\"", - "Lo stato della prenotazione sarà impostato automaticamente come \\": "Reservation status will be automatically set as \\", - "Loans": "Loans", - "Locale": "Local", - "Lock file creato (installazione protetta)": "Lock file created (installation protected)", - "Log": "Log", - "Log Sicurezza": "Security Logs", - "Log di Sicurezza": "Security Log", - "Login": "Login", - "Login Riuscito": "Login Successful", - "Logo": "Logo", - "Logo Applicazione (opzionale)": "Application Logo (optional)", - "Logout effettuato con successo": "Logout successful", - "MP3, M4A o OGG, max 500 MB": "MP3, M4A or OGG, max 500 MB", - "Mai generata": "Never generated", - "Mai utilizzata": "Never used", - "Mancante": "Missing", - "Mantieni in ritardo": "Keep overdue", - "Manuale": "Manual", - "Manutenzione": "Maintenance", - "Manutenzione completata: %d record corretti": "Maintenance completed: %d records fixed", - "Manutenzione giornaliera del database": "Daily database maintenance", - "MaintenanceService connessione database fallita": "MaintenanceService database connection failed", - "MaintenanceService errore attivazione prestiti": "MaintenanceService loan activation error", - "MaintenanceService errore attivazione prestito": "MaintenanceService loan activation error", - "MaintenanceService errore conversione prenotazioni": "MaintenanceService reservation conversion error", - "MaintenanceService errore durante hook login admin": "MaintenanceService admin login hook error", - "MaintenanceService errore elaborazione prenotazione": "MaintenanceService reservation processing error", - "MaintenanceService errore generazione ICS": "MaintenanceService ICS generation error", - "MaintenanceService errore notifiche": "MaintenanceService notification error", - "MaintenanceService errore prenotazioni scadute": "MaintenanceService expired reservations error", - "MaintenanceService errore prestiti in ritardo": "MaintenanceService overdue loans error", - "MaintenanceService errore scadenza prenotazione": "MaintenanceService reservation expiration error", - "MaintenanceService eseguito al login admin": "MaintenanceService executed on admin login", - "MaintenanceService ICS non generato": "MaintenanceService ICS not generated", - "MaintenanceService prenotazione convertita in prestito": "MaintenanceService reservation converted to loan", - "MaintenanceService prenotazione scaduta": "MaintenanceService reservation expired", - "Manutenzione disattivata": "Maintenance disabled", - "Mappa Interattiva": "Interactive Map", - "Mappa del sito per i motori di ricerca": "Site map for search engines", - "Mappa non disponibile": "Map not available", - "Mario": "John", - "Maschio": "Male", - "Max 10.000 righe • Max 100 copie per libro": "Max 10,000 rows • Max 100 copies per book", - "Mediocre": "Fair", - "Membro": "Member", - "Mensola": "Shelf", - "Mensola creata e %d posizioni generate.": "Shelf created and %d positions generated.", - "Mensola creata.": "Shelf created.", - "Mensole": "Shelves", - "Menu": "Menu", - "Menu Principale": "Main Menu", - "Menu \"Prestiti\" nell'admin sidebar": "\"Loans\" menu in admin sidebar", - "Migrazione database": "Database migration", - "Messaggi": "Messages", - "Messaggi di Contatto": "Contact Messages", - "Messaggio": "Message", - "Messaggio inviato con successo! Ti risponderemo al più presto.": "Message sent successfully! We will reply as soon as possible.", - "Messaggio non trovato.": "Message not found.", - "Metadati:": "Metadata:", - "Metodo di invio": "Sending method", - "Minimo 8 caratteri": "Minimum 8 characters", - "Minimo 8 caratteri, con lettere maiuscole, minuscole e numeri": "Minimum 8 characters, with uppercase, lowercase and numbers", - "Mittente": "From", - "Mittente (email)": "Sender (email)", - "Mittente (nome)": "Sender (name)", - "Moderatore": "Moderator", - "Modalità Catalogo": "Catalogue Mode", - "Modalità Solo Catalogo": "Catalogue Only Mode", - "Modalità di importazione": "Import mode", - "Merge - Aggiungi e aggiorna (mantiene dati esistenti)": "Merge - Add and update (keeps existing data)", - "Merge completato": "Merge completed", - "Merge completato: %d aggiunti, %d aggiornati, %d invariati. Totale: %d voci.": "Merge completed: %d added, %d updated, %d unchanged. Total: %d entries.", - "Modifica": "Edit", - "Modifica %s": "Edit %s", - "Modifica Autore": "Edit Author", - "Modifica Autore:": "Edit Author:", - "Modifica Chi Siamo": "Edit About Us", - "Modifica Editore": "Edit Publisher", - "Modifica Evento": "Edit Event", - "Modifica Evento: %s": "Edit Event: %s", - "Modifica Homepage": "Edit Homepage", - "Modifica Libro": "Edit Book", - "Modifica Lingua:": "Edit Language:", - "Modifica Prenotazione": "Edit Reservation", - "Modifica Prenotazione #%s": "Edit Reservation #%s", - "Modifica Route Tradotte": "Edit Translated Routes", - "Modifica Stato Copia": "Edit Copy Status", - "Modifica Utente": "Edit User", - "Modifica i contenuti della homepage: hero, features, CTA e immagine di sfondo": "Edit homepage content: hero, features, CTA and background image", - "Modifica il contenuto e le impostazioni della pagina": "Edit page content and settings", - "Modifica le informazioni dell'evento": "Edit the event information", - "Modifica le pagine statiche del sito": "Edit static site pages", - "Modifica prestito": "Edit loan", - "Modifica prestito #%s": "Edit Loan #%s", - "Modifica profilo": "Edit profile", - "Modifica stato": "Edit status", - "Modifica utente": "Edit user", - "Modulo": "Module", - "Molto buono": "Very good", - "Mondadori": "Mondadori", - "Monitora tentativi di login e eventi di sicurezza": "Monitor login attempts and security events", - "Mostra": "Show", - "Mostra API Key": "Show API Key", - "Mostra Cookie Analitici": "Show Analytics Cookies", - "Mostra Cookie di Marketing": "Show Marketing Cookies", - "Mostra _MENU_ libri": "Show _MENU_ books", - "Mostra categoria \\": "Show category \\", - "Mostra filtri": "Show filters", - "Mostra gli ultimi libri aggiunti al catalogo": "Show the latest books added to the catalog", - "Motivo del rifiuto (opzionale)": "Reason for rejection (optional)", - "Motivo del rifiuto (opzionale):": "Reason for rejection (optional):", - "N. Libri": "No. of Books", - "N/D": "N/A", - "Narrativa": "Fiction", - "Nascondi": "Hide", - "Nascondi API Key": "Hide API Key", - "Nascondi filtri": "Hide filters", - "Nascondi se il sito non utilizza cookie di marketing o advertising": "Hide if site does not use marketing or advertising cookies", - "Nascondi se il sito non utilizza strumenti di analytics (es. Google Analytics)": "Hide if site does not use analytics tools (e.g. Google Analytics)", - "Nascita a": "Birth date to", - "Nascita da": "Birth date from", - "Nascosto": "Hidden", - "Nato il %s": "Born on %s", - "Nazionalità": "Nationality", - "Nederlands (NL)": "Dutch (NL)", - "Nei Preferiti": "In Favorites", - "Nella collezione": "In collection", - "Nessun aggiornamento": "No updates", - "Nessun Problema": "No Issues", - "Nessun autore trovato": "No authors found", - "Nessun autore trovato, premi Invio per aggiungerne uno nuovo": "No author found, press Enter to add a new one", - "Nessun dato": "No data", - "Nessun dato trovato su LibreriaUniversitaria/Feltrinelli.": "No data found on LibreriaUniversitaria/Feltrinelli.", - "Nessun editore trovato": "No publishers found", - "Nessun editore trovato per \"${query}\" — premi Invio per crearne uno nuovo.": "No publisher found for \"${query}\" — press Enter to create a new one.", - "Nessun elemento trovato": "No items found", - "Nessun evento": "No events", - "Nessun evento in programma": "No events scheduled", - "Nessun file caricato": "No file uploaded", - "Nessun file caricato.": "No file uploaded.", - "Nessun file di traduzione caricato. Carica un file JSON per abilitare questa lingua.": "No translation file uploaded. Upload a JSON file to enable this language.", - "Nessun genere trovato": "No genres found", - "Nessun libro": "No books", - "Nessun libro ancora inserito": "No books added yet", - "Nessun libro con collocazione trovato": "No books with location found", - "Nessun libro nel database": "No books in database", - "Nessun libro recente disponibile": "No recent books available", - "Nessun libro registrato": "No books registered", - "Nessun libro trovato": "No books found", - "Nessun log disponibile": "No logs available", - "Nessun logo caricato": "No logo uploaded", - "Nessun messaggio ricevuto": "No messages received", - "Nessun motivo specificato": "No reason specified", - "Nessun plugin installato": "No plugins installed", - "Nessun prestito attivo": "No active loans", - "Nessun prestito disponibile per generare il grafico": "No loans available to generate chart", - "Nessun prestito in corso": "No active loans", - "Nessun prestito passato": "No past loans", - "Nessun prestito registrato": "No loans registered", - "Nessun prestito scaduto": "No overdue loans", - "Nessun prestito trovato": "No loans found", - "Nessun prestito trovato.": "No loans found.", - "Nessun ritiro": "No pickups", - "Nessun risultato": "No results", - "Nessun risultato trovato": "No results found", - "Nessun risultato trovato con i filtri applicati": "No results found with applied filters", - "Nessun risultato trovato per la ricerca.": "No results found for search.", - "Nessun sottogenere": "No subgenre", - "Nessun sottogenere definito": "No subgenres defined", - "Nessun suggerimento": "No suggestion", - "Nessun suggerimento disponibile": "No suggestion available", - "Nessun titolo corrisponde al filtro corrente.": "No titles match the current filter.", - "Nessuna": "None", - "Nessun aggiornamento registrato": "No updates recorded", - "Nessuna API key configurata": "No API keys configured", - "Nessuna collocazione trovata": "No locations found", - "Nessuna copia attualmente disponibile": "No copy currently available", - "Nessuna copertina caricata": "No cover uploaded", - "Nessuna copia disponibile per questo libro": "No copy available for this book", - "Nessuna copia disponibile per il periodo richiesto.": "No copy available for the requested period.", - "Nessuna descrizione disponibile": "No description available", - "Nessuna descrizione disponibile per questo libro.": "No description available for this book.", - "Nessuna lingua configurata": "No languages configured", - "Nessuna mensola. Creane una per iniziare!": "No shelves. Create one to get started!", - "Nessuna mensola per questo scaffale. Creane una!": "No shelves for this bookcase. Create one!", - "Nessuna notifica": "No notifications", - "Nessuna prenotazione": "No reservations", - "Nessuna prenotazione attiva": "No active reservations", - "Nessuna recensione": "No reviews", - "Nessuna recensione approvata": "No approved reviews", - "Nessuna recensione in attesa": "No pending reviews", - "Nessuna recensione rifiutata": "No rejected reviews", - "Nessuna richiesta": "No requests", - "Nessuna richiesta in attesa": "No pending requests", - "Nessuna richiesta in attesa di approvazione.": "No requests pending approval.", - "Nessuna selezione": "No selection", - "Nessuno": "None", - "Nessuno scaffale. Creane uno per iniziare!": "No bookcases. Create one to get started!", - "Nessuno storico": "No history", - "No": "No", - "Nome": "First Name", - "Nome *": "Name *", - "Nome Applicazione": "Application Name", - "Nome Categoria": "Category Name", - "Nome Cognome": "First Last Name", - "Nome Database": "Database Name", - "Nome Editore": "Publisher Name", - "Nome Inglese": "English Name", - "Nome Nativo": "Native Name", - "Nome Referente": "Contact Person Name", - "Nome applicazione": "Application name", - "Nome autore": "Author name", - "Nome editore...": "Publisher name...", - "Nome, pseudonimo, biografia...": "Name, pseudonym, biography...", - "Nome categoria esistente": "Existing category name", - "Nome completo": "Full Name", - "Nome cookie analitici": "Analytics cookies name", - "Nome cookie essenziali": "Essential cookies name", - "Nome cookie marketing": "Marketing cookies name", - "Nome d'arte o pseudonimo": "Stage name or pseudonym", - "Nome dell'editore": "Publisher name", - "Nome della casa editrice": "Publisher name", - "Nome della lingua in inglese (es. Italian, English, Spanish)": "Name of the language in English (e.g. Italian, English, Spanish)", - "Nome della lingua nella lingua stessa (es. Italiano, English, Español)": "Name of the language in the language itself (e.g. Italiano, English, Español)", - "Nome e cognome del referente": "Contact person name", - "Nome e cognome dell'autore": "Author's full name", - "Nome editore": "Publisher name", - "Nome o cognome troppo lungo (massimo 100 caratteri)": "Name or surname too long (maximum 100 characters)", - "Nome plugin non valido. Usa solo lettere, numeri, trattini o underscore.": "Invalid plugin name. Use only letters, numbers, hyphens or underscores.", - "Nome, cognome, email...": "Name, surname, email...", - "Nome:": "Name:", - "Non Disponibile": "Not Available", - "Non Disponibili": "Unavailable", - "Non ancora restituito": "Not yet returned", - "Non assegnata": "Not assigned", - "Non autenticato": "Not authenticated", - "Non autorizzato.": "Unauthorized.", - "Non ci sono dati da esportare": "There is no data to export", - "Non ci sono recensioni in attesa di approvazione.": "There are no reviews waiting for approval.", - "Non ci sono richieste di prestito in attesa di approvazione.": "There are no loan requests pending approval.", - "Non disponibile": "Not available", - "Non disponibile ora": "Not available now", - "Non eliminabile": "Cannot Delete", - "Non hai ancora creato nessun evento. Inizia creando il tuo primo evento.": "You haven't created any events yet. Start by creating your first event.", - "Non hai ancora lasciato recensioni": "You have not left any reviews yet", - "Non hai libri in prestito al momento": "You have no books on loan at the moment", - "Non hai prenotazioni attive al momento": "You have no active reservations at the moment", - "Non hai prestiti passati": "You have no past loans", - "Non hai un account?": "Don't have an account?", - "Non includere tag ": "Do not include tags", - "Non letto": "Unread", - "Non puoi eliminare l'installer finché non completi l'installazione delle dipendenze PHP.": "You cannot delete the installer until you complete the PHP dependencies installation.", - "Non puoi recensire questo libro (devi averlo preso in prestito e non averlo già recensito)": "You cannot review this book (you must have borrowed it and not already reviewed it)", - "Non rinnovabile: prestito in ritardo": "Not renewable: loan overdue", - "Non installato": "Not installed", - "Non scrivibile": "Not writable", - "Non selezionato": "Not selected", - "Non specificata": "Not specified", - "Non specificato": "Not specified", - "Non usare spazi nelle route": "Do not use spaces in routes", - "Non è stato possibile eliminare l'utente. Controlla la console.": "Unable to delete the user. Check the console.", - "Non è stato trovato alcun aggiornamento": "No updates found", - "Nota:": "Note:", - "Nota: Impostare come predefinita disattiverà lo status di predefinita per tutte le altre lingue.": "Note: Setting as default will disable the default status for all other languages.", - "Nota: in produzione limita questa funzione agli amministratori.": "Note: in production limit this function to administrators.", - "Note": "Notes", - "Note (opzionali)": "Notes (optional)", - "Note Importanti": "Important Notes", - "Note Varie": "Miscellaneous Notes", - "Note aggiuntive o osservazioni particolari...": "Additional notes or special observations...", - "Note importanti:": "Important notes:", - "Note interne": "Internal Notes", - "Note sul prestito": "Loan notes", - "Note sulla restituzione": "Return notes", - "Note tecniche": "Technical notes", - "Notifiche": "Notifications", - "Notifiche Automatiche": "Automatic Notifications", - "Notifiche Prestiti": "Loan Notifications", - "Notifiche disponibilità libri in wishlist": "Wishlist book availability notifications", - "Notifiche prestiti scaduti": "Overdue loan notifications", - "N. Inventario": "Inventory No.", - "Numero Inventario": "Inventory Number", - "Numero Libri": "Number of Books", - "Numero Pagine": "Number of Pages", - "Numero Serie": "Series Number", - "Numero di Pagine": "Number of Pages", - "Numero di copie non valido.": "Invalid number of copies.", - "Numero di libri": "Number of books", - "Numero inventario": "Inventory number", - "Numero massimo di righe superato (%d). Dividi il file in parti più piccole.": "Maximum number of rows exceeded (%d). Split the file into smaller parts.", - "Numero o descrizione dell'edizione": "Edition number or description", - "Numero prenotazioni attive": "Number of active reservations", - "Numero serie": "Series number", - "Numero tessera": "Card number", - "Nuova Collocazione": "New Location", - "Nuova Password": "New Password", - "Nuova password": "New password", - "Nuova prenotazione": "New Reservation", - "Nuova recensione da approvare": "New review to approve", - "Nuova registrazione utente": "New User Registration", - "Nuova richiesta di prestito": "New loan request", - "Nuovo": "New", - "Novità nelle versioni successive": "What's new in upcoming versions", - "Non chiudere questa finestra": "Do not close this window", - "Nuovo aggiornamento disponibile!": "New update available!", - "Nuovo Autore": "New Author", - "Nuovo Editore": "New Publisher", - "Nuovo Evento": "New Event", - "Nuovo Genere": "New Genre", - "Nuovo Libro": "New Book", - "Nuovo messaggio di contatto": "New Contact Message", - "Nuovo Prestito": "New Loan", - "Nuovo Utente": "New User", - "Nuovo editore:": "New publisher:", - "Nuovo utente": "New User", - "Nuovo nome (opzionale)": "New name (optional)", - "OFF": "Off", - "OK": "OK", - "ON": "On", - "Obbligatorio": "Required", - "Obbligatorio per utenti non amministratori.": "Required for non-administrator users.", - "Obsoleto": "Obsolete", - "Occupato": "Busy", - "Occupato (prestito attivo)": "Occupied (active loan)", - "Occupato (in ritardo)": "Occupied (overdue)", - "Prenota questo libro": "Reserve this book", - "Seleziona le date per la tua prenotazione. La richiesta verrà inviata alla biblioteca per approvazione.": "Select dates for your reservation. The request will be sent to the library for approval.", - "Accedi per Prenotare": "Login to Reserve", - "Libro disponibile per la prenotazione": "Book available for reservation", - "Richiesta inviata!": "Request sent!", - "La tua richiesta di prestito è stata inviata. Riceverai una notifica quando verrà approvata.": "Your loan request has been sent. You will receive a notification when it is approved.", - "Richiesta inviata con successo!": "Request sent successfully!", - "Errore durante la prenotazione": "Error during reservation", - "Offline": "Offline", - "Oggetto": "Subject", - "Oggetto dell'email": "Email subject", - "Ogni 15 minuti nei giorni lavorativi (8:00-18:00)": "Every 15 minutes on weekdays (8:00-18:00)", - "Ogni route deve iniziare con": "Each route must start with", - "Online": "Online", - "Open Graph (Facebook)": "Open Graph (Facebook)", - "Open Graph (Facebook, LinkedIn)": "Open Graph (Facebook, LinkedIn)", - "Operatore": "Operator", - "Operazione annullata": "Operation cancelled", - "Operazione completata": "Operation completed", - "Operazione non consentita": "Operation not allowed", - "Operazioni": "Operations", - "Opere": "Works", - "Oppure usa il terminale SSH del tuo hosting (cPanel, Plesk, etc.)": "Or use your hosting's SSH terminal (cPanel, Plesk, etc.)", - "Ops, qualcosa è andato storto": "Oops, something went wrong", - "Opzionale": "Optional", - "Opzionale per amministratori": "Optional for administrators", - "Opzione 1:": "Option 1:", - "Opzione 2:": "Option 2:", - "Opzione 3:": "Option 3:", - "Ora Evento": "Event Time", - "Ora puoi accedere con la tua nuova password.": "You can now sign in with your new password.", - "Ora puoi ricaricare questa pagina - il warning sparirà se tutto è OK.": "Now you can reload this page - the warning will disappear if everything is OK.", - "Ordina Sezioni Homepage": "Sort Homepage Sections", - "Ordina per": "Sort by", - "Ordinamento": "Sorting", - "Ordinamento libri": "Book sorting", - "Ordine salvato con successo!": "Order saved successfully!", - "Ordine:": "Order:", - "Organizza e gestisci i generi letterari della biblioteca": "Organize and manage library literary genres", - "Organizza scaffali, mensole e posizioni per la biblioteca fisica": "Organize shelves, levels, and positions for the physical library", - "Ospite": "Guest", - "Ottieni le chiavi da Google reCAPTCHA": "Get keys from Google reCAPTCHA", - "Ottimizza l'evento per i motori di ricerca e i social media": "Optimize event for search engines and social media", - "Ottimizzazione": "Optimization", - "Ottimizzazione SEO (Meta Tags)": "SEO Optimization (Meta Tags)", - "Ottimizzazione SEO e Social Media": "SEO and Social Media Optimization", - "Output atteso: cartella vendor/ con sottocartelle (slim, monolog, etc.)": "Expected output: vendor/ folder with subfolders (slim, monolog, etc.)", - "PDF": "PDF", - "PDF o ePub, max 100 MB": "PDF or ePub, max 100 MB", - "PHP mail()": "PHP mail()", - "PHP mail() - Predefinito": "PHP mail() - Default", - "PHPMailer": "PHPMailer", - "PNG, SVG, JPG o WebP (max 2MB)": "PNG, SVG, JPG or WebP (max 2MB)", - "Paese": "Country", - "Pagina": "Page", - "Pagina Cookie Policy": "Cookie Policy Page", - "Pagina Non Trovata": "Page Not Found", - "Pagina \\": "Page \\", - "Pagina aggiornata con successo.": "Page updated successfully.", - "Pagina attiva (visibile sul sito)": "Active page (visible on site)", - "Pagina non trovata.": "Page not found.", - "Pagina precedente": "Previous page", - "Pagina successiva": "Next page", - "Paginazione eventi": "Events pagination", - "Pagine": "Pages", - "Pannello": "Panel", - "Panoramica generale": "General overview", - "Panoramica generale di Pinakes": "General overview of Pinakes", - "Panoramica completa di prestiti, ritiri e prenotazioni": "Complete overview of loans, pickups and reservations", - "Paragrafo": "Paragraph", - "Paragraph": "Paragraph", - "Parametri di Ricerca": "Search Parameters", - "Parametri non validi": "Invalid parameters.", - "Parametro ISBN mancante.": "Missing ISBN parameter.", - "Parametro category_id obbligatorio.": "Parameter category_id is required.", - "Parametro cover_url mancante.": "Missing cover_url parameter.", - "Parametro division_id obbligatorio.": "Parameter division_id is required.", - "Parole Chiave": "Keywords", - "Parole Chiave SEO": "SEO Keywords", - "Parole chiave": "Keywords", - "Parole chiave SEO": "SEO Keywords", - "Parole chiave per i motori di ricerca (impatto SEO limitato). Separate da virgola.": "Keywords for search engines (limited SEO impact). Comma separated.", - "Password": "Password", - "Password aggiornata con successo.": "Password updated successfully.", - "Password dimenticata": "Forgot password", - "Password dimenticata?": "Forgot password?", - "Password iniziale": "Initial Password", - "Password resettata con successo!": "Password reset successfully!", - "Password troppo lunga (massimo 128 caratteri)": "Password too long (maximum 128 characters)", - "Pattern URL": "URL Pattern", - "Pendente": "Pending", - "Pending": "Pending", - "Per aggiornare automaticamente la sitemap ogni giorno:": "To automatically update sitemap daily:", - "Per assistenza, contatta l'amministrazione della biblioteca.": "For assistance, contact the library administration.", - "Per inserire il codice JavaScript Analytics (Google Analytics, Matomo, ecc.), vai su {{variabile}} per inserire dati dinamici.": "Customize the content of automatic emails with the TinyMCE editor. Use placeholders {{variable}} to insert dynamic data.", - "Personalizza il contenuto delle mail automatiche con l'editor TinyMCE. Usa i segnaposto sospeso e richiede approvazione. Scegli un'opzione:": "This user is in suspended state and requires approval. Choose an option:", - "Radice": "Root", - "Rallenta l'importazione": "Slows down import", - "Recensione (opzionale)": "Review (optional)", - "Recensione approvata": "Review approved", - "Recensione del": "Review on", - "Recensione inviata con successo!": "Review submitted successfully!", - "Recensione inviata con successo! Sarà pubblicata dopo l'approvazione di un amministratore.": "Review successfully submitted! It will be published after administrator approval.", - "Recensione inviata!": "Review submitted!", - "Recensione per \"%s\" da %s - %s": "Review for \"%s\" by %s - %s", - "Recensione rifiutata": "Review rejected", - "Recensione eliminata": "Review deleted", - "La recensione è stata eliminata definitivamente.": "The review has been permanently deleted.", - "Elimina recensione": "Delete review", - "Vuoi eliminare definitivamente questa recensione? Questa azione non può essere annullata.": "Do you want to permanently delete this review? This action cannot be undone.", - "Impossibile eliminare la recensione": "Unable to delete the review", - "Operazione non riuscita": "Operation failed", - "Recensioni": "Reviews", - "Recensioni Approvate": "Approved Reviews", - "Recensioni Rifiutate": "Rejected Reviews", - "Recensioni utenti": "User reviews", - "Recente": "Recent", - "Recupera Password": "Recover Password", - "Referente": "Contact Person", - "Registra Restituzione": "Register Return", - "Registra prestito": "Register loan", - "Registra restituzione": "Register return", - "Registra restituzione prestito": "Register loan return", - "Registra una prenotazione per permettere ad un utente di riservare un libro specifico": "Register a reservation to allow a user to reserve a specific book", - "Registrati": "Register", - "Registrati Ora": "Register Now", - "Registrato da": "Registered from", - "Registrato il": "Registered on", - "Registrazione": "Registration", - "Registrazione Completata": "Registration Completed", - "Registrazione completata": "Registration completed", - "Registrazione completata! Effettua l'accesso": "Registration completed! Please sign in", - "Reimposta password": "Reset password", - "Reindirizzamento verso dominio non autorizzato bloccato.": "Redirect to an unauthorized domain blocked.", - "Reinstalla da Capo": "Reinstall from Scratch", - "Remoto": "Remote", - "Report": "Report", - "Report Integrità Dati": "Data Integrity Report", - "Report e analisi": "Reports and analytics", - "Requisiti": "Requirements", - "Requisiti del plugin:": "Plugin requirements:", - "Requisiti di Sistema": "System Requirements", - "Requisiti di sistema non soddisfatti": "System requirements not met", - "Richiesto": "Required", - "Reset": "Reset", - "Reset Filtri": "Reset Filters", - "Reset anni": "Reset years", - "Resetta Password": "Reset Password", - "Recupera la tua password": "Recover your password", - "Abbiamo ricevuto una richiesta di reset della password per il tuo account.": "We received a request to reset the password for your account.", - "Clicca sul pulsante qui sotto per resettare la tua password:": "Click the button below to reset your password:", - "Oppure copia e incolla questo link nel tuo browser:": "Or copy and paste this link in your browser:", - "Questo link scadrà tra 2 ore.": "This link will expire in 2 hours.", - "Se non hai richiesto il reset della password, puoi ignorare questa email. Il tuo account rimane sicuro.": "If you did not request a password reset, you can ignore this email. Your account remains secure.", - "Ciao": "Hello", - "Restituito": "Returned", - "Restituito in ritardo": "Returned late", - "Restituito regolarmente": "Returned on time", - "Restituzione": "Return", - "Restituzione prestito": "Loan return", - "Restituzione prestito #%s": "Loan Return #%s", - "Ricarica Dewey (seed)": "Reload Dewey (seed)", - "Ricarica Pagina": "Reload Page", - "Ricerca": "Search", - "Ricerca Libro": "Search Book", - "Ricerca Utente": "Search User", - "Ricerca in corso...": "Searching...", - "Ricerca rapida": "Quick Search", - "Riceverai un link di reset via email. Il link sarà valido per 24 ore.": "You will receive a reset link via email. The link will be valid for 24 hours.", - "Riceverai una conferma via email appena la richiesta sarà approvata.": "You'll receive an email confirmation once the request is approved.", - "Ricevuto": "Received", - "Richiede App:": "Requires App:", - "Richiede PHP:": "Requires PHP:", - "Richiedi Prestito": "Request Loan", - "Richiedi approvazione admin dopo la conferma email": "Require admin approval after email confirmation", - "Richiesta Inviata!": "Request Sent!", - "Richiesta Prestito": "Loan Request", - "Richiesta del %s": "Request of %s", - "Ricevuta di Prestito": "Loan Receipt", - "Ricevuta di prestito bibliotecario": "Library loan receipt", - "Richiesta di prestito dal %1$s al %2$s": "Loan request from %1$s to %2$s", - "Richiesta di prestito dal %s per 1 mese": "Loan request starting on %s for 1 month", - "Richiesta di prestito inviata con successo": "Loan request successfully submitted", - "Richiesta di prestito per \"%s\" da %s dal %s al %s": "Loan request for \"%s\" by %s from %s to %s", - "Richiesta di prestito per \\": "Loan request for \\", - "Richiesta fallita:": "Request failed:", - "Richiesta manuale": "Manual request", - "Richieste Manuali": "Manual Requests", - "Richiesta rifiutata": "Request rejected", - "Richieste Pendenti": "Pending Requests", - "Richieste di Prestito": "Loan Requests", - "Richieste di Prestito in Attesa": "Pending Loan Requests", - "Richieste in Sospeso": "Pending Requests", - "Richieste in sospeso": "Pending requests", - "Richieste pendenti": "Pending Requests", - "Richiesto il": "Requested on", - "Richiesto il %s": "Requested on %s", - "Ricordami": "Remember me", - "Ricordi la password?": "Remember your password?", - "Riepilogo Installazione": "Installation Summary", - "Riepilogo wishlist": "Wishlist Summary", - "Rifiuta": "Reject", - "Rifiuta Prestito?": "Reject Loan?", - "Rifiuta non essenziali": "Reject Non-Essential", - "Rifiuta prestito": "Reject loan", - "Rifiuta recensione": "Reject review", - "Rifiutata": "Rejected", - "Rifiutata il": "Rejected on", - "Rifiutato": "Rejected", - "Rifiuterai questa richiesta di prestito?": "Will you reject this loan request?", - "Ritiri da Confermare": "Pickups to Confirm", - "Riga %d (%s): %s": "Row %d (%s): %s", - "Riga %d: numero di colonne non corrispondente": "Row %d: column count does not match", - "Rigenera Sitemap": "Regenerate Sitemap", - "Rigenera adesso": "Regenerate now", - "Rimuovere dalla wishlist?": "Remove from Wishlist?", - "Rimuovere i libri associati prima di eliminare l'autore": "Remove associated books before deleting the author", - "Rimuovere i libri dell'editore prima di eliminarlo": "Remove publisher's books before deleting", - "Rimuovi": "Remove", - "Rimuovi dai Preferiti": "Remove from Favorites", - "Rimuovi dalla wishlist": "Remove from Wishlist", - "Rimuovi editore": "Remove publisher", - "Rimuovi filtro": "Remove filter", - "Rimuovi immagine": "Remove image", - "Rimuovi immagine attuale": "Remove current image", - "Rimuovi immagine di sfondo attuale": "Remove current background image", - "Rimuovi logo attuale": "Remove current logo", - "Rimuovi tutti i filtri": "Remove all filters", - "Rinnova": "Renew", - "Rinnova prestito (+14 giorni)": "Renew loan (+14 days)", - "Rinnova prestito?": "Renew loan?", - "Rinnovare il prestito? La scadenza verrà estesa di 14 giorni.": "Renew loan? The due date will be extended by 14 days.", - "Rinnovi": "Renewals", - "Rinnovi Effettuati:": "Renewals Made:", - "Rinnovi effettuati": "Renewals made", - "Riordina trascinando gli elementi": "Reorder by dragging elements", - "Ripeti la password": "Repeat password", - "Ripristina Default": "Reset to Default", - "Ripristino": "Restore", - "Riprova": "Retry", - "Riservato": "Reserved", - "Risolvi i problemi indicati sopra e ricarica la pagina.": "Fix the issues indicated above and reload the page.", - "Risorsa": "Resource", - "Risorse esterne": "External Resources", - "Rispettiamo il tuo diritto alla privacy. Puoi scegliere di non consentire alcuni tipi di cookie. Le tue preferenze si applicheranno all'intero sito web.": "We respect your right to privacy. You can choose not to allow some types of cookies. Your preferences will apply to the entire website.", - "Rispondi": "Reply", - "Risposta": "Reply", - "Risposta JSON": "JSON Response", - "Risposta non valida dal servizio ISBN.": "Invalid response from the ISBN service.", - "Risposta non valida. Controlla la console per dettagli.": "Invalid response. Check the console for details.", - "Risultati": "Results", - "Risultati per '%s' - Catalogo Biblioteca": "Results for '%s' - Library Catalog", - "Rossi": "Doe", - "Route Comuni": "Common Routes", - "Route Tradotte": "Translated Routes", - "Ruolo": "Role", - "Ruolo:": "Role:", - "SDK": "SDK", - "SEO - Meta Description": "SEO - Meta Description", - "SEO Base": "Basic SEO", - "SEO Base (Meta Tags)": "Base SEO (Meta Tags)", - "SMTP (custom)": "SMTP (custom)", - "SMTP Host": "SMTP Host", - "SMTP Password": "SMTP Password", - "SMTP Personalizzato": "Custom SMTP", - "SMTP Port": "SMTP Port", - "SMTP Username": "SMTP Username", - "SMTP personalizzato": "Custom SMTP", - "SSL": "SSL", - "Salva": "Save", - "Salva API Key": "Save API key", - "Salva Autore": "Save Author", - "Salva Contatti": "Save Contacts", - "Salva Editore": "Save Publisher", - "Salva Identità": "Save Identity", - "Salva Impostazioni": "Save Settings", - "Salva Impostazioni Avanzate": "Save Advanced Settings", - "Salva Libro": "Save Book", - "Salva Lingua": "Save Language", - "Salva Modifiche": "Save Changes", - "Salva Privacy Policy": "Save Privacy Policy", - "Salva Route": "Save Routes", - "Salva Template": "Save Template", - "Salva Testi Cookie Banner": "Save Cookie Banner Texts", - "Salva filtri correnti": "Save current filters", - "Salva identità": "Save identity", - "Salva impostazioni email": "Save email settings", - "Salva impostazioni etichette": "Save label settings", - "Salva in UTF-8": "Save as UTF-8", - "Salva la API key in un luogo sicuro. Non sarà possibile visualizzarla nuovamente dopo la creazione.": "Save the API key in a safe place. It will not be possible to view it again after creation.", - "Salva modifiche": "Save changes", - "Salva modifiche Homepage": "Save Homepage Changes", - "Salva template": "Save template", - "Salva testi banner": "Save banner texts", - "Salva utente": "Save User", - "Salvataggio in corso...": "Saving...", - "Salvataggio...": "Saving...", - "Sarà pubblicata dopo l'approvazione di un amministratore.": "It will be published after administrator approval.", - "Sarà utilizzata per accedere al sistema": "Will be used to log in to the system", - "Sarà visualizzato nell'header e in tutto il sito": "Will be displayed in the header and throughout the site", - "Scadenza": "Due date", - "Scadenza Mancante": "Missing Due Date", - "Scadenza tessera": "Card Expiration", - "Scadenza:": "Due date:", - "Scadenza: %s": "Expiry: %s", - "Scaduto": "Expired", - "Scaduta": "Expired", - "Scaduta il": "Expired on", - "Scaffale": "Bookcase", - "Scaffale *": "Bookcase *", - "Scaffale Narrativa": "Fiction Bookcase", - "Scaffali": "Bookcases", - "Scaffali e mensole": "Shelves and racks", - "Scarica": "Download", - "Scarica copertine": "Fetch covers", - "Scarica PDF": "Download PDF", - "Scarica Ricevuta PDF": "Download PDF Receipt", - "Scarica ricevuta PDF": "Download PDF receipt", - "Scarica automaticamente la ricevuta PDF dopo la creazione del prestito.": "Automatically download the PDF receipt after creating the loan.", - "Scaricamento copertine...": "Fetching covers...", - "Copertine scaricate:": "Covers fetched:", - "Già presenti o senza ISBN:": "Already present or no ISBN:", - "Nessuna copertina da scaricare": "No covers to fetch", - "Scraping fallito": "Scraping failed", - "Download aggiornamento": "Downloading update", - "Download copertina fallito": "Cover download failed", - "Download fallito": "Download failed", - "Immagine non valida": "Invalid image", - "Formato immagine non supportato": "Unsupported image format", - "Errore processamento immagine": "Image processing error", - "Errore salvataggio immagine": "Image save error", - "Scarica Audiobook": "Download Audiobook", - "Scarica JSON": "Download JSON", - "Scarica eBook": "Download eBook", - "Scarica esempio_import_libri.csv": "Download example_import_books.csv", - "Scarica il CSV di esempio con 3 libri già compilati per capire il formato corretto e iniziare subito.": "Download the example CSV with 3 pre-filled books to understand the correct format and get started immediately.", - "Scarica il file CSV di esempio": "Download the example CSV file", - "Scarica l'eBook in formato digitale": "Download the eBook in digital format", - "Scarso": "Poor", - "Scorri a destra per vedere tutte le colonne": "Scroll right to see all columns", - "Sincronizza Copertine": "Sync Covers", - "Sincronizzare le copertine?": "Sync covers?", - "Questa operazione scaricherà le copertine mancanti per tutti i libri con ISBN. Può richiedere diversi minuti.": "This operation will download missing covers for all books with ISBN. It may take several minutes.", - "Sì, sincronizza": "Yes, sync", - "Sincronizzazione...": "Syncing...", - "Sincronizzazione completata!": "Sync completed!", - "Copertine sincronizzate: %s": "Covers synced: %s", - "Copertine già presenti: %s": "Covers already present: %s", - "Si è verificato un errore durante la sincronizzazione": "An error occurred during synchronization", - "Sincronizza copertine mancanti via scraping": "Sync missing covers via scraping", - "Scegli": "Choose", - "Scegli come ordinare i libri nella sezione": "Choose how to sort books in this section", - "Scegli Icona Font Awesome": "Choose Font Awesome Icon", - "Scegli come inviare le email dal sistema. Puoi usare la funzione PHP mail(), PHPMailer o un server SMTP esterno.": "Choose how to send emails from the system. You can use the PHP mail() function, PHPMailer or an external SMTP server.", - "Scegli come inviare le email dal sistema. Puoi usare la funzione PHP con il percorso corretto di PHP sul tuo server": "Replace /usr/bin/php with the correct PHP path on your server", - "Sottocategoria": "Subcategory", - "Sottogenere": "Subgenre", - "Sottogenere specifico (opzionale)": "Specific subgenre (optional)", - "Spazio libero": "Free space", - "Sottogeneri": "Subgenres", - "Sottotitolo": "Subtitle", - "Sottotitolo CTA": "CTA Subtitle", - "Sottotitolo del libro (opzionale)": "Book subtitle (optional)", - "Sottotitolo sezione": "Section Subtitle", - "Staff": "Staff", - "Staff:": "Staff:", - "Stai per aggiornare Pinakes alla versione": "You are about to update Pinakes to version", - "Stai per eliminare": "You are about to delete", - "Stai per unire": "You are about to merge", - "Stai utilizzando l'ultima versione.": "You are using the latest version.", - "Stai utilizzando l'ultima versione disponibile.": "You are using the latest available version.", - "Stampa": "Print", - "Stampa etichetta": "Print label", - "Standard": "Standard", - "Standard Tirrenia catalogazione": "Standard Tirrenia cataloging", - "Standard dorso libri (più comune)": "Standard book spine (most common)", - "Statistiche": "Statistics", - "Statistiche Prestiti": "Loan Statistics", - "Statistiche Rapide": "Quick Statistics", - "Statistiche:": "Statistics:", - "Stato": "Status", - "Stato API": "API Status", - "Stato API key aggiornato con successo.": "API key status updated successfully.", - "Stato Incongruente": "Status Mismatch", - "Stato dell'installazione:": "Installation status:", - "Stato della copia": "Copy status", - "Stato e Gestione": "Status and Management", - "Stato attuale:": "Current status:", - "Stato prestito": "Loan status", - "Stato prestito corrente": "Current loan status", - "Stato prestito non valido.": "Invalid loan status.", - "Stato:": "Status:", - "Status attuale di questa copia del libro": "Current status of this book copy", - "Storico Prestiti": "Loan History", - "Nella stessa collana": "In the same series", - "Volumi di quest'opera": "Volumes of this work", - "volumi": "volumes", - "Questo libro è il volume %s dell'opera": "This book is volume %s of the work", - "Gestione Collane": "Series Management", - "Gestisci le collane e le serie di libri": "Manage book series and collections", - "Collane totali": "Total series", - "Libri nelle collane": "Books in series", - "Nessuna collana trovata. Aggiungi una collana a un libro per iniziare.": "No series found. Add a series to a book to get started.", - "Collane": "Series", - "Serie e collane di libri": "Book series and collections", - "Rinomina collana": "Rename series", - "Rinomina": "Rename", - "Unisci con altra collana": "Merge with another series", - "Nome collana di destinazione": "Target series name", - "Unisci": "Merge", - "Sei sicuro? Tutti i libri verranno spostati nella collana di destinazione.": "Are you sure? All books will be moved to the target series.", - "Crea opera multi-volume": "Create multi-volume work", - "Crea un libro padre che raccoglie tutti i volumi di questa collana.": "Create a parent book that collects all volumes of this series.", - "Titolo dell'opera completa": "Title of the complete work", - "Crea opera": "Create work", - "Collana rinominata: %d libri aggiornati": "Series renamed: %d books updated", - "Nome collana non valido": "Invalid series name", - "Collane unite: %d libri spostati in \"%s\"": "Series merged: %d books moved to \"%s\"", - "Parametri non validi per l'unione": "Invalid parameters for merge", - "Opera \"%s\" creata con %d volumi": "Work \"%s\" created with %d volumes", - "Errore nella creazione dell'opera": "Error creating the work", - "Aggiungi volume": "Add volume", - "Cartaceo": "Paperback", - "eBook": "eBook", - "Audiolibro": "Audiobook", - "CD Audio": "Audio CD", - "Vinile": "Vinyl", - "LP": "LP", - "Cassetta": "Cassette", - "DVD": "DVD", - "Blu-ray": "Blu-ray", - "Digitale": "Digital", - "Altro": "Other", - "Cerca libro": "Search for a book", - "Titolo o ISBN...": "Title or ISBN...", - "Numero volume": "Volume number", - "Seleziona un libro": "Select a book", - "Volume aggiunto": "Volume added", - "Rimuovi volume?": "Remove volume?", - "Il libro non sarà eliminato, solo la relazione.": "The book will not be deleted, only the relationship.", - "Volume rimosso": "Volume removed", - "Configura come opera multi-volume": "Configure as multi-volume work", - "Errore database": "Database error", - "Nuova Collana": "New Series", - "Collana \"%s\" creata": "Series \"%s\" created", - "Descrizione della collana...": "Series description...", - "Salva descrizione": "Save description", - "Descrizione salvata": "Description saved", - "Assegna collana": "Assign series", - "Collana assegnata": "Series assigned", - "%d libri assegnati alla collana \"%s\"": "%d books assigned to series \"%s\"", - "Elimina collana": "Delete series", - "Rimuove la collana da tutti i libri. I libri non verranno eliminati.": "Removes the series from all books. Books will not be deleted.", - "Sei sicuro? La collana verrà rimossa da tutti i libri.": "Are you sure? The series will be removed from all books.", - "Collana \"%s\" eliminata (%d libri aggiornati)": "Series \"%s\" deleted (%d books updated)", - "International Standard Serial Number (per periodici)": "International Standard Serial Number (for periodicals)", - "ISSN Non Valido": "Invalid ISSN", - "ISSN deve essere nel formato XXXX-XXXX (8 cifre, l'ultima può essere X).": "ISSN must be in the format XXXX-XXXX (7 digits plus a check character (digit or X)).", - "ISSN non valido. Il formato corretto è XXXX-XXXX (8 cifre, l'ultima può essere X).": "Invalid ISSN. The correct format is XXXX-XXXX (7 digits plus a check character (digit or X)).", - "Relazione ciclica: questo libro è già opera padre del libro selezionato": "Cyclic relationship: this book is already a parent work of the selected book", - "Assegna": "Assign", - "es. 1234-5678": "e.g. 1234-5678", - "es. Harry Potter": "e.g. Harry Potter", - "Identificatori": "Identifiers", - "Inserisci un nome": "Enter a name", - "Nome della collana": "Series name", - "ISSN": "ISSN", - "Volumi": "Volumes", - "Successiva": "Next", - "Successivo": "Next", - "Successo": "Success", - "Successo!": "Success!", - "Suggerimenti": "Tips", - "Suggerimento": "Tip", - "Suggerimento:": "Tip:", - "Suggerisci collocazione": "Suggest location", - "Suggerito scaffale #${data.scaffale_id}": "Suggested bookcase #${data.scaffale_id}", - "Suggerito:": "Suggested:", - "Supporto": "Support", - "Sì": "Yes", - "Sì, Aggiorna": "Yes, Update", - "Sì, Salva": "Yes, Save", - "Sì, aggiorna": "Yes, update", - "Sì, approva": "Yes, approve", - "Sì, attiva": "Yes, activate", - "Sì, disattiva": "Yes, deactivate", - "Sì, disinstalla": "Yes, uninstall", - "Sì, elimina": "Yes, delete", - "Sì, elimina!": "Yes, delete it!", - "Sì, rimuovi": "Yes, Remove", - "TLS": "TLS", - "Tag": "Tag", - "Telefono": "Phone", - "Telefono:": "Phone:", - "Telefono *": "Phone *", - "Telefono Referente": "Contact Person Phone", - "Tema": "Theme", - "Template": "Templates", - "Template Email": "Email Templates", - "Template aggiornato con successo!": "Template updated successfully!", - "Template email": "Email templates", - "Termini": "Terms", - "Termini di Servizio": "Terms of Service", - "Tessera biblioteca": "Library Card", - "Test": "Test", - "Test Connessione": "Test Connection", - "Test del cron job:": "Cron job test:", - "Testi Banner": "Banner Texts", - "Testi Banner Iniziale": "Initial Banner Texts", - "Testi Cookie Banner": "Cookie Banner Texts", - "Testi Modale Preferenze": "Preferences Modal Texts", - "Testi categorie cookie": "Cookie categories texts", - "Testo Privacy": "Privacy Text", - "Testo che apparirà nel footer del sito": "Text that will appear in the site footer", - "Testo checkbox": "Checkbox text", - "Testo della checkbox privacy nel form": "Privacy checkbox text in the form", - "Testo introduttivo": "Introductory text", - "Testo principale mostrato nel banner. Puoi usare HTML.": "Main text shown in the banner. You can use HTML.", - "Testo pulsante": "Button Text", - "Testo pulsante \"Accetta tutti\"": "\"Accept all\" button text", - "Testo pulsante \"Preferenze\"": "\"Preferences\" button text", - "Testo pulsante \"Rifiuta non essenziali\"": "\"Reject non-essential\" button text", - "Testo pulsante \"Salva selezionati\"": "\"Save selected\" button text", - "Ti abbiamo inviato un'email con il link per confermare l'indirizzo.": "We have sent you an email with the link to confirm your address.", - "Timestamp": "Timestamp", - "Tipo": "Type", - "Tipo Acquisizione": "Acquisition Type", - "Tipo Card": "Card Type", - "Tipo Contenuto": "Content Type", - "Tipo MIME non valido. Solo file CSV sono accettati.": "Invalid MIME type. Only CSV files are accepted.", - "Tipo OG": "OG Type", - "Tipo Utente": "User Type", - "Tipo acquisizione": "Acquisition type", - "Tipo di file non supportato. Solo JPEG e PNG sono consentiti.": "Unsupported file type. Only JPEG and PNG are allowed.", - "Tipo di file non valido.": "Invalid file type.", - "Tipo di file non valido. Carica un'immagine reale.": "Invalid file type. Please upload a real image.", - "Tipo non valido": "Invalid type.", - "Tipo utente": "User Type", - "Tipologia account": "Account Type", - "Tipologia:": "Type:", - "Titolo": "Title", - "Titolo:": "Title:", - "Fonte dati:": "Data source:", - "Fonti consultate:": "Sources consulted:", - "Vedi alternative": "View alternatives", - "Dati alternativi disponibili": "Alternative data available", - "Copertina:": "Cover:", - "Usa": "Use", - "Nessuna alternativa disponibile": "No alternatives available", - "Valore applicato": "Value applied", - "Editore applicato": "Publisher applied", - "Copertina applicata": "Cover applied", - "Titolo (opzionale)": "Title (optional)", - "Titolo 1": "Heading 1", - "Titolo 2": "Heading 2", - "Titolo 3": "Heading 3", - "Titolo A-Z": "Title A-Z", - "Titolo CTA": "CTA Title", - "Titolo Evento": "Event Title", - "Titolo Modale": "Modal Title", - "Titolo OG": "OG Title", - "Titolo Open Graph": "Open Graph Title", - "Titolo Pagina": "Page Title", - "Titolo SEO": "SEO Title", - "Titolo Twitter": "Twitter Title", - "Titolo Z-A": "Title Z-A", - "Titolo del libro": "Book title", - "Titolo della sezione e le 4 card con le caratteristiche": "Section title and the 4 feature cards", - "Titolo e descrizione mostrati sopra i caroselli dei generi": "Title and description shown above genre carousels", - "Titolo libro": "Book title", - "Titolo mostrato quando condividi su Facebook/LinkedIn. Se vuoto, usa il titolo SEO o hero.": "Title shown when sharing on Facebook/LinkedIn. If empty, uses the SEO or hero title.", - "Titolo non disponibile": "Title not available", - "Titolo obbligatorio mancante": "Missing required title", - "Titolo pagina": "Page title", - "Titolo principale (H1)": "Main Title (H1)", - "Titolo sezione": "Section Title", - "Titolo troppo lungo (max 255 caratteri)": "Title too long (max 255 characters)", - "Titolo, sottotitolo, descrizione...": "Title, subtitle, description...", - "Titolo...": "Title...", - "Token CSRF non valido": "Invalid CSRF token.", - "Token CSRF non valido. Riprova.": "Invalid CSRF token. Please try again.", - "Token di sicurezza non valido. Riprova.": "Invalid security token. Please try again.", - "Top 10 Lettori Più Attivi": "Top 10 Most Active Readers", - "Top 10 Libri Più Prestati": "Top 10 Most Loaned Books", - "Torna Indietro": "Go Back", - "Torna agli Eventi": "Back to Events", - "Torna agli eventi": "Back to events", - "Torna ai Libri": "Back to Books", - "Torna ai Prestiti": "Back to Loans", - "Torna al login": "Back to login", - "Torna all'Applicazione": "Back to Application", - "Torna all'elenco": "Back to list", - "Torna alla Configurazione Database": "Back to Database Configuration", - "Torna alla categoria superiore": "Back to parent category", - "Torna alla dashboard": "Back to Dashboard", - "Torna alla lista": "Back to list", - "Torna alla panoramica eventi": "Back to all events", - "Torna alle Impostazioni": "Back to Settings", - "Torna alle Impostazioni CMS": "Back to CMS Settings", - "Torna alle Lingue": "Back to Languages", - "Torna alle Prenotazioni": "Back to Reservations", - "Total users:": "Total users:", - "Totale": "Total", - "Totale Autori": "Total Authors", - "Totale Generi": "Total Genres", - "Totale Libri": "Total Books", - "Totale Prestiti": "Total Loans", - "Trasforma Pinakes in un catalogo di sola consultazione": "Transform Pinakes into a browse-only catalogue", - "Totale autori": "Total authors", - "Totale editori:": "Total publishers:", - "Totale libri": "Total books", - "Totale libri presenti": "Total books in collection", - "Totale utenti:": "Total users:", - "Totale: %s righe": "Total: %s rows", - "Tracce": "Tracks", - "Tracklist": "Tracklist", - "Traduzioni e localizzazione": "Translations and localization", - "Trascina le sezioni per riordinarle. L'ordine sarà salvato automaticamente e rispecchiato nella homepage.": "Drag sections to reorder them. The order will be saved automatically and reflected on the homepage.", - "Trascina per riordinare • Il codice deve essere univoco": "Drag to reorder • Code must be unique", - "Trascina per riordinare • Ogni scaffale + livello deve essere univoco": "Drag to reorder • Each bookcase + level must be unique", - "Trascina qui il file CSV o %{browse}": "Drag CSV file here or %{browse}", - "Trascina qui il file ZIP del plugin o %{browse}": "Drag the plugin ZIP file here or %{browse}", - "Trascina qui il logo o %{browse}": "Drag logo here or %{browse}", - "Trascina qui l'immagine di sfondo o %{browse}": "Drag the background image here or %{browse}", - "Trascina qui l'immagine o %{browse}": "Drag image here or %{browse}", - "Trascina qui l'immagine, %{browse} o importa da": "Drag image here, %{browse} or import from", - "Trascina qui la copertina del libro o %{browse}": "Drag the book cover here or %{browse}", - "Trascina qui la copertina del libro o clicca per selezionare": "Drag the book cover here or click to select", - "Trigger database configurati": "Database triggers configured", - "Trigger importati OK": "Triggers imported OK", - "Troppi tentativi. Attendi qualche minuto prima di riprovare": "Too many attempts. Please wait a few minutes before trying again", - "Trovato": "Found", - "Tutorial": "Tutorial", - "Tutte le date sono in formato ISO 8601 (YYYY-MM-DD HH:MM:SS)": "All dates are in ISO 8601 format (YYYY-MM-DD HH:MM:SS)", - "Tutte le mensole": "All shelves", - "Tutte le notifiche del sistema": "All system notifications", - "Tutte le route devono iniziare con": "All routes must start with", - "Tutti": "All", - "Tutti gli anni": "All years", - "Tutti gli autori": "All authors", - "Tutti gli editori": "All publishers", - "Tutti gli eventi": "All events", - "Tutti gli scaffali": "All bookcases", - "Tutti gli stati": "All statuses", - "Tutti i controlli di integrità sono passati con successo!": "All integrity checks passed successfully!", - "Tutti i diritti riservati.": "All rights reserved.", - "Tutti i filtri sono stati rimossi": "All filters have been removed", - "Tutti i generi": "All genres", - "Tutti i libri": "All books", - "Tutti i messaggi ricevuti tramite il form contatti": "All messages received through contact form", - "Tutti i requisiti sono soddisfatti! Puoi procedere con l'installazione.": "All requirements are met! You can proceed with the installation.", - "Tutti i ruoli": "All roles", - "Tutti soddisfatti": "All met", - "Tutto aggiornato!": "All up to date!", - "Tutto": "All", - "Twitter": "Twitter", - "Twitter Card": "Twitter Card", - "URL Canonico": "Canonical URL", - "URL Canonico (opzionale)": "Canonical URL (optional)", - "URL Non Valido": "Invalid URL", - "URL OG": "OG URL", - "URL completo della pagina (auto-generato se vuoto)": "Full page URL (auto-generated if empty)", - "URL completo del sito (es: https://biblioteca.example.com). Usato per link nelle email (verifica account, reset password). Se lasciato vuoto, verrà auto-rilevato.": "Full site URL (e.g., https://biblioteca.example.com). Used for email links (account verification, password reset). If left blank, it will be auto-detected.", - "URL della pagina con la cookie policy": "URL of the page with cookie policy", - "URL della pagina con le tecnologie dei cookie": "URL of the page with cookie technologies", - "URL non valido o non permesso.": "Invalid or unauthorized URL.", - "URL non valido.": "Invalid URL.", - "URL principale del sito. Se vuoto, usa l'URL corrente.": "Main site URL. If empty, uses the current URL.", - "URL pubblico:": "Public URL:", - "URL sito web...": "Website URL...", - "URL...": "URL...", - "Ultima generazione:": "Last generated:", - "Ultima Versione": "Latest Version", - "Ultimi Arrivi": "Latest Arrivals", - "Ultimi Libri Aggiunti": "Latest Books Added", - "Ultimi Libri Inseriti": "Recently Added Books", - "Ultimi aggiunti (data creazione)": "Recently added (creation date)", - "Ultimi modificati (data aggiornamento)": "Recently edited (update date)", - "Ultima": "Last", - "Ultimo": "Last", - "Ultimo Aggiornamento": "Last Updated", - "Ultimo accesso": "Last access", - "Ultimo aggiornamento": "Last Update", - "Ultimo uso:": "Last used:", - "Umberto Eco": "Umberto Eco", - "Un altro aggiornamento è già in corso. Riprova più tardi.": "Another update is already in progress. Please try again later.", - "Un backup viene creato automaticamente prima di salvare": "A backup is created automatically before saving", - "Un'esperienza di lettura moderna, intuitiva e sempre a portata di mano": "A modern, intuitive reading experience always at your fingertips", - "Una chiave è già salvata. Inserisci un nuovo valore per aggiornarla oppure lascia vuoto per rimuoverla.": "A key is already stored. Enter a new value to update it or leave empty to remove it.", - "Una descrizione completa aiuta gli utenti a conoscere meglio l'autore": "A complete description helps users get to know the author better", - "Una mensola con livello %d esiste già in questo scaffale. Usa un livello diverso.": "A shelf with level %d already exists on this bookcase. Use a different level.", - "Una panoramica dei libri che hai salvato per non perderli di vista.": "An overview of the books you've saved to keep track of.", - "Unisciti alla nostra community di lettori e scopri il piacere della lettura con la nostra piattaforma moderna.": "Join our community of readers and discover the joy of reading with our modern platform.", - "Unisci autori": "Merge authors", - "Unisci editori": "Merge publishers", - "Uploader non disponibile": "Uploader not available", - "Usa 'localhost' (raccomandato, rileva automaticamente TCP/socket). Puoi forzare '127.0.0.1' per TCP.": "Use 'localhost' (recommended, auto-detects TCP/socket). You can force '127.0.0.1' for TCP.", - "Usa codici semplici (A, B, C...)": "Use simple codes (A, B, C...)", - "Usa i servizi online per precompilare automaticamente i dati del libro": "Use online services to automatically prefill book data", - "Usa il pulsante \"Rigenera adesso\" per crearla": "Use \"Regenerate now\" button to create it", - "Usa il separatore %s": "Use %s separator", - "Usa l'editor per formattare il testo, aggiungere link, immagini e altro": "Use the editor to format text, add links, images, and more", - "Usa l'editor per formattare il testo, aggiungere link, immagini e altro.": "Use the editor to format text, add links, images, and more.", - "Usa le frecce ← → per saltare": "Use ← → arrows to skip", - "Usa questa azione dopo aver importato un grande numero di libri o modifiche ai contenuti CMS.": "Use this action after importing a large number of books or CMS content changes.", - "Usa questo campo per personalizzare lo stile del sito senza modificare i file di tema.": "Use this field to customize site style without modifying theme files.", - "Usata per login e comunicazioni.": "Used for login and communications.", - "Username": "Username", - "Users": "Users", - "Utente": "User", - "Utente admin creato:": "Admin user created:", - "Utente aggiornato con successo!": "User updated successfully!", - "Utente approvato con successo!": "User approved successfully!", - "Utente attivato direttamente!": "User activated directly!", - "Utente creato con successo!": "User created successfully!", - "Utente prenotante": "User making reservation", - "Utente sconosciuto": "Unknown user", - "Utente senza nome": "Unnamed user", - "Utente %s (%s) si è registrato": "User %s (%s) has registered", - "Utente:": "User:", - "Utenti": "Users", - "Utenti Attivi": "Active Users", - "Utenti registrati": "Registered users", - "Utilizza l'editor TinyMCE per formattare il testo e Uppy per caricare immagini di alta qualità. Le modifiche saranno immediatamente visibili nella pagina pubblica.": "Use the TinyMCE editor to format text and Uppy to upload high quality images. Changes will be immediately visible on the public page.", - "Utilizziamo i cookie per migliorare la tua esperienza. Continuando a visitare questo sito, accetti il nostro uso dei cookie.": "We use cookies to improve your experience. By continuing to visit this site, you accept our use of cookies.", - "Vai": "Go", - "Vai al Login": "Go to Login", - "Vai al login": "Go to login", - "Vai all'Applicazione": "Go to Application", - "Vai alla Home": "Go to Home", - "Valore compreso tra 1 e 30 giorni. Consigliato: 3 giorni": "Value between 1 and 30 days. Recommended: 3 days", - "Valore non valido": "Invalid value", - "Valutazione *": "Rating *", - "Valutazione non valida (1-5 stelle)": "Invalid rating (1-5 stars)", - "Variabili disponibili:": "Available variables:", - "Vecchio": "Old", - "Vedi": "View", - "Vedi Dettagli": "View Details", - "Vedi dettagli": "View details", - "Vedi istruzioni sotto per correggere manualmente.": "See instructions below to fix manually.", - "Vedi tutte le notifiche": "View all notifications", - "Vedi tutti": "View all", - "Vedi tutti gli eventi": "View all events", - "Verifica che il database sia accessibile e configurato correttamente nel file .env": "Verify that the database is accessible and correctly configured in the .env file", - "Verifica che le credenziali del database nel file .env siano corrette": "Verify that the database credentials in the .env file are correct", - "Verifica coerenza e integrità del database": "Check database consistency and integrity", - "Verifica completata OK": "Verification completed OK", - "Verifica i permessi di esecuzione: chmod +x cron/automatic-notifications.php": "Verify execution permissions: chmod +x cron/automatic-notifications.php", - "Verifica in corso...": "Checking...", - "Verifica versioni": "Check versions", - "Verrà creato automaticamente un backup prima dell'aggiornamento.": "A backup will be automatically created before updating.", - "Verrà creato un backup completo del database.": "A complete database backup will be created.", - "Verifica installazione...": "Verifying installation...", - "Verificato": "Verified", - "Versione": "Version", - "Versione Installata": "Installed Version", - "Versione Installer:": "Installer Version:", - "Versione non specificata": "Version not specified", - "Versione non trovata": "Version not found", - "Versione:": "Version:", - "Via Roma 123, 00100 Roma RM, Italia": "123 Main St, New York, NY 10001, USA", - "Via, numero civico, città, CAP": "Street, number, city, ZIP code", - "Via, numero...": "Street, number...", - "Video": "Video", - "Video tutorial": "Video tutorial", - "Visibile": "Visible", - "Visibile pubblicamente sulla pagina contatti": "Publicly visible on contact page", - "Visibilità Sezione Eventi": "Events Section Visibility", - "Visibilità aggiornata!": "Visibility updated!", - "Visita il sito ufficiale": "Visit official website", - "Visualizza": "View", - "Visualizza Libro": "View Book", - "Visualizza Tutte le Categorie": "View All Categories", - "Visualizza Tutto il Catalogo": "View Entire Catalog", - "Visualizza dettagli": "View details", - "Visualizza dettagli libro": "View book details", - "Visualizza e esporta l'elenco dei libri per posizione fisica": "View and export the list of books by physical position", - "Visualizza e gestisci tutti i prestiti della biblioteca": "View and manage all library loans", - "Visualizza pagina live": "View live page", - "Visualizzazione da _START_ a _END_ di _TOTAL_ libri": "Showing _START_ to _END_ of _TOTAL_ books", - "Visualizzazione gerarchica di generi e sottogeneri": "Hierarchical view of genres and subgenres", - "Voci totali": "Total entries", - "Vuoi aggiornare il libro \"${title}\"?": "Do you want to update the book \"${title}\"?", - "Vuoi aggiornare il libro \"%s\"?": "Do you want to update the book \"%s\"?", - "Vuoi aggiornare lo stato di questa copia?": "Do you want to update the status of this copy?", - "Vuoi approvare questa recensione e renderla visibile sul sito?": "Do you want to approve this review and make it visible on the site?", - "Vuoi attivare questo plugin?": "Do you want to activate this plugin?", - "Vuoi aumentare il numero di copie di questo libro?": "Do you want to increase the number of copies of this book?", - "Vuoi disattivare questo plugin?": "Do you want to deactivate this plugin?", - "Vuoi eliminare questo elemento?": "Do you want to delete this item?", - "Vuoi procedere?": "Do you want to proceed?", - "Vuoi rifiutare questa recensione? L'utente verrà avvisato dell'esito.": "Do you want to reject this review? The user will be notified of the outcome.", - "Wishlist": "Wishlist", - "Working...": "Working...", - "Zona Pericolosa": "Danger Zone", - "agosto": "August", - "acquisto": "purchase", - "al": "to", - "altamente consigliato": "highly recommended", - "aprile": "April", - "autori": "authors", - "biblioteca, prestito libri, catalogo online, scopri libri, prenotazioni": "library, book lending, online catalog, discover books, reservations", - "chiavi": "keys", - "chiavi tradotte": "translated keys", - "come nuovo autore": "as new author", - "completamento": "completion", - "con successo": "successfully", - "copi": "copi", - "copia": "copy", - "copie": "copies", - "crontab -e": "crontab -e", - "danneggiato": "damaged", - "della lingua desiderata.": "of the desired language.", - "di": "of", - "di %s": "of %s", - "dicembre": "December", - "directory": "directories", - "disattivata": "disabled", - "disponibile": "available", - "disponibili ora": "available now", - "donazione": "donation", - "dopo aver completato l'installazione.": "after completing the installation.", - "eBook (PDF/ePub)": "eBook (PDF/ePub)", - "eBook caricato!": "eBook uploaded!", - "eBook disponibile": "eBook available", - "editori": "publishers", - "elementi": "items", - "elemento": "item", - "elimina la cartella": "delete the folder", - "errore di comunicazione con il server": "server communication error", - "es. 0.450": "e.g. 0.450", - "es. 15": "e.g. 15", - "es. 19.90": "e.g. 19.90", - "es. 2020": "e.g. 2020", - "es. 2024": "e.g. 2024", - "es. 2025": "e.g. 2025", - "es. 21x14 cm": "e.g. 21x14 cm", - "es. 26 agosto 2025": "e.g. August 26, 2025", - "es. 320": "e.g. 320", - "es. 8842935786": "e.g. 8842935786", - "es. 978-88-429-3578-0": "e.g. 978-88-429-3578-0", - "es. 9788842935780": "e.g. 9788842935780", - "es. Acquisto, Donazione, Prestito": "e.g. Purchase, Donation, Loan", - "es. Biblioteca Civica": "e.g. Public Library", - "es. Copertina rigida, Brossura": "e.g. Hardcover, Paperback", - "es. Fantasy contemporaneo": "e.g. Contemporary Fantasy", - "es. I Classici": "e.g. The Classics", - "es. INV-2024-001": "e.g. INV-2024-001", - "es. Integrazione Sito Web": "e.g. Website Integration", - "es. Italiano, Inglese": "e.g. Italian, English", - "es. La morale anarchica": "e.g. The Anarchist Morality", - "es. Noir mediterraneo": "e.g. Mediterranean Noir", - "es. Prima edizione": "e.g. First edition", - "es. RSSMRA80A01H501U": "e.g. RSSMRA80A01H501U", - "es. Urban fantasy": "e.g. Urban fantasy", - "es. noreply@biblioteca.local": "e.g. noreply@library.local", - "es. romanzo, fantasy, avventura (separare con virgole)": "e.g. novel, fantasy, adventure (separate with commas)", - "eventi": "events", - "eventi, biblioteca, cultura": "events, library, culture", - "fallite.": "failed.", - "fas fa-users": "fas fa-users", - "febbraio": "February", - "gennaio": "January", - "giorni prima della scadenza": "days before expiry", - "giugno": "June", - "https://www.editore.com": "https://www.publisher.com", - "icone disponibili": "icons available", - "in attesa": "pending", - "in_corso": "in progress", - "in_ritardo": "overdue", - "info@editore.com": "info@publisher.com", - "installazione inglese usa": "English installation uses", - "kg": "kg", - "libri": "books", - "libri trovati": "books found", - "libro": "book", - "libro trovato": "book found", - "linea": "line", - "lingue": "languages", - "lingue. Errori:": "languages. Errors:", - "luglio": "July", - "maggio": "May", - "manutenzione": "maintenance", - "mario.rossi@email.it": "john.doe@email.com", - "marzo": "March", - "nella directory dell'applicazione.": "in the application directory.", - "nella nostra biblioteca.": "in our library.", - "novembre": "November", - "o multipli separati da |": "or multiple separated by |", - "o multipli: Engels;Marx": "or multiple: Engels;Marx", - "opzionale": "optional", - "opzionali": "optional", - "ottobre": "October", - "pagina": "page", - "pagine": "pages", - "per conformità GDPR.": "for GDPR compliance.", - "per evitare blocchi (delay di 3 secondi tra ogni richiesta).": "to avoid blocks (3 second delay between each request).", - "per il giorno": "for the day", - "per pagina": "per page", - "perso": "lost", - "preferiti": "favorites", - "premi Invio per crearne uno nuovo.": "press Enter to create a new one.", - "prenotazione attiva": "active reservation", - "prenotazioni attive": "active reservations", - "prenotato": "reserved", - "prestato": "on loan", - "prestiti attivi": "active loans", - "prestiti passati": "past loans", - "prestiti totali": "total loans", - "prestito attivo": "active loan", - "prestito passato": "past loan", - "prima di procedere.": "before proceeding.", - "recensione": "review", - "recensioni": "reviews", - "referente@editore.com": "contact@publisher.com", - "restituito": "returned", - "richiesta in sospeso": "pending request", - "richieste in sospeso": "pending requests", - "risultati": "results", - "risultato": "result", - "seleziona": "browse", - "seleziona file": "select file", - "selezionati": "selected", - "settembre": "September", - "sfoglia": "browse", - "sottogeneri": "subgenres", - "sul server tramite SSH.": "on the server via SSH.", - "titoli": "titles", - "utente@example.com": "user@example.com", - "utenti": "users", - "verranno automaticamente selezionati.": "will be automatically selected.", - "Български (BG)": "Bulgarian (BG)", - "עברית (HE)": "Hebrew (HE)", - "– Nessuno –": "– None –", - "••••••••": "••••••••", - "⚙️ Comportamento Automatico: Se inserisci codice in \"JavaScript Analitici\" o \"JavaScript Marketing\", i rispettivi toggle in Impostazioni Privacy verranno automaticamente selezionati.": "⚙️ Automatic Behavior: If you insert code in \"Analytics JavaScript\" or \"Marketing JavaScript\", the respective toggles in Privacy Settings will be automatically selected.", - "⚠️ AZIONE RICHIESTA: Installazione Dipendenze PHP": "⚠️ ACTION REQUIRED: PHP Dependencies Installation", - "⚠️ Privacy: Le mappe esterne vengono caricate solo se l'utente accetta i cookie Analytics.": "⚠️ Privacy: External maps are loaded only if the user accepts Analytics cookies.", - "✅ Dipendenze PHP installate correttamente": "✅ PHP dependencies installed correctly", - "✓ Connessione riuscita! Database è vuoto e pronto per l'installazione.": "✓ Connection successful! Database is empty and ready for installation.", - "✓ Crea autori mancanti": "✓ Create missing authors", - "✓ Crea editori mancanti": "✓ Create missing publishers", - "✓ Report errori": "✓ Error reporting", - "✓ Validazione dati": "✓ Data validation", - "❌ Errore di comunicazione con il server": "Communication error with the server", - "💡 Non hai accesso SSH?": "💡 Don't have SSH access?", - "📋 Importante: Devi elencare manualmente i cookie tracciati da questi script nella Pagina Cookie per conformità GDPR.": "📋 Important: You must manually list cookies tracked by these scripts in the Cookie Page for GDPR compliance.", - "📋 Istruzioni SSH (Click per espandere/chiudere)": "📋 SSH Instructions (Click to expand/collapse)", - "🔒 Sicurezza Importante": "🔒 Important Security", - "Gestione Temi": "Theme Management", - "Temi": "Themes", - "Personalizza l'aspetto dell'applicazione": "Customize the application appearance", - "Tema Attivo": "Active Theme", - "Temi Disponibili": "Available Themes", - "Personalizza": "Customize", - "Attivare questo tema?": "Activate this theme?", - "Errore durante l'attivazione": "Error during activation", - "Errore di rete": "Network error", - "Primario": "Primary", - "Secondario": "Secondary", - "Bottone": "Button", - "Testo Bottone": "Button Text", - "Accento": "Accent", - "Personalizza Tema": "Customize Theme", - "Torna ai temi": "Back to themes", - "Colori Tema": "Theme Colors", - "Personalizza la palette colori dell'applicazione": "Customize the application color palette", - "Colore Primario": "Primary Color", - "link, accenti": "links, accents", - "Colore Secondario": "Secondary Color", - "bottoni principali": "main buttons", - "Colore Bottoni CTA": "CTA Button Color", - "bottoni nelle card": "buttons in cards", - "Colore Testo Bottoni": "Button Text Color", - "Verifica Leggibilità": "Readability Check", - "Link di esempio": "Example link", - "Bottone CTA": "CTA Button", - "Bottone Primario": "Primary Button", - "Ripristina": "Reset", - "Contrasto": "Contrast", - "WCAG AA Conforme": "WCAG AA Compliant", - "AA Testo Grande": "AA Large Text", - "Insufficiente": "Insufficient", - "Ripristinare i colori?": "Reset colors to defaults?", - "Tema attivato con successo": "Theme activated successfully", - "Errore durante l'attivazione del tema": "Error activating theme", - "Colori ripristinati ai valori predefiniti": "Colors reset to defaults", - "Errore nel ripristino dei colori": "Error resetting colors", - "Tema non trovato": "Theme not found", - "Colore non valido": "Invalid color", - "Contrasto insufficiente tra bottone e testo (minimo 3:1). Attuale": "Insufficient contrast between button and text (minimum 3:1). Current", - "Tema salvato con successo": "Theme saved successfully", - "Errore nel salvataggio del tema": "Error saving theme", - "Utenti in Attesa di Approvazione": "Users Awaiting Approval", - "Invia Email": "Send Email", - "Confermi di voler attivare direttamente questo utente?": "Are you sure you want to activate this user directly?", - "Non includere tag": "Do not include tags", - "Il codice verrà inserito in un tag": "The code will be inserted in a tag", - "nell'header. Non includere i tag": "in the header. Do not include tags", - "Sicurezza Connessione": "Connection Security", - "Configura le impostazioni di sicurezza per le connessioni HTTPS": "Configure security settings for HTTPS connections", - "Attiva HTTPS solo se hai un certificato SSL valido installato. Attivare HSTS rende permanente il reindirizzamento HTTPS nel browser.": "Enable HTTPS only if you have a valid SSL certificate installed. Enabling HSTS makes HTTPS redirection permanent in the browser.", - "Info HSTS:": "HSTS Info:", - "HTTP Strict Transport Security forza i browser a usare solo connessioni HTTPS per 1 anno (raccomandato per produzione con SSL valido).": "HTTP Strict Transport Security forces browsers to use only HTTPS connections for 1 year (recommended for production with valid SSL).", - "Forza HTTPS": "Force HTTPS", - "Reindirizza automaticamente tutte le richieste HTTP a HTTPS": "Automatically redirect all HTTP requests to HTTPS", - "Abilita HSTS": "Enable HSTS", - "Attiva HTTP Strict Transport Security (max-age: 1 anno, include sottodomini)": "Enable HTTP Strict Transport Security (max-age: 1 year, includes subdomains)", - "Requisiti:": "Requirements:", - "Certificato SSL/TLS valido": "Valid SSL/TLS certificate", - "Tutte le risorse del sito devono essere HTTPS": "All site resources must be HTTPS", - "Sottodomini devono supportare HTTPS (se usati)": "Subdomains must support HTTPS (if used)", - "Funzionamento automatico:": "Automatic operation:", - "Auto-attivazione:": "Auto-activation:", - "Caricamento automatico:": "Automatic loading:", - "Devi elencare manualmente i cookie tracciati da questi script nella": "You must manually list the cookies tracked by these scripts in the", - "Pagina Cookie": "Cookie Page", - "Database '%s' non esiste. Crealo prima di procedere.": "Database '%s' does not exist. Please create it before proceeding.", - "File dati iniziali per la lingua selezionata non trovato: %s": "Initial data file for the selected language not found: %s", - "%s è richiesto": "%s is required", - "%s è richiesta": "%s is required", - "%s deve essere di almeno 8 caratteri": "%s must be at least 8 characters", - "%s non può superare i 72 caratteri": "%s cannot exceed 72 characters", - "%s non è valido": "%s is not valid", - "Schema non importato correttamente. Tabelle mancanti: %s": "Schema not imported correctly. Missing tables: %s", - "Schema incompleto: trovate %d tabelle su %d attese.": "Incomplete schema: found %d tables out of %d expected.", - "Errore verifica tabelle: %s": "Error verifying tables: %s", - "Installazione database non completa. Tabelle mancanti: %s": "Database installation incomplete. Missing tables: %s", - "Installazione database non completa. Trovate %d tabelle, attese %d": "Database installation incomplete. Found %d tables, expected %d", - "Dati di classificazione mancanti": "Classification data missing", - "Dati generi mancanti": "Genre data missing", - "Le password non corrispondono": "Passwords do not match", - "Requisito '%s' non soddisfatto": "Requirement '%s' not met", - "Non è possibile creare la directory: %s": "Cannot create directory: %s", - "Directory non scrivibile: %s": "Directory not writable: %s", - "Il file supera la dimensione massima consentita": "File exceeds maximum allowed size", - "Errore sconosciuto durante il caricamento": "Unknown error during upload", - "Il file supera la dimensione massima di %s MB": "File exceeds maximum size of %s MB", - "Tipo di file non consentito. Sono ammessi solo: %s": "File type not allowed. Only allowed: %s", - "Troppi errori durante l'import dello schema (%d errori). Primi errori:\n%s": "Too many errors during schema import (%d errors). First errors:\n%s", - "Troppi errori durante l'import dei dati (%d errori). Primi errori:\n%s": "Too many errors during data import (%d errors). First errors:\n%s", - "Impossibile determinare l'ID del plugin Open Library.": "Unable to determine Open Library plugin ID.", - "Tutte le copie in prestito": "All copies on loan", - "Tutte le copie prenotate": "All copies reserved", - "Tutte le copie di questo libro hanno già un prestito attivo o prenotato. Attendi che una copia venga restituita.": "All copies of this book already have an active or scheduled loan. Please wait for a copy to be returned.", - "Copie disponibili": "Copies available", - "Nessuna copia disponibile nelle date richieste": "No copies available for the requested dates", - "Le date rosse o arancioni non sono disponibili. La richiesta verrà valutata da un amministratore.": "Red or orange dates are not available. The request will be evaluated by an administrator.", - "Sono stati rilevati problemi di integrità": "Integrity issues were detected", - "Clicca su \\\"Esegui Manutenzione\\\" per correggere automaticamente i problemi riparabili.": "Click \\\"Run Maintenance\\\" to automatically fix resolvable issues.", - "Ricalcola Disponibilità": "Recalculate Availability", - "Aggiorna il conteggio delle copie disponibili": "Update available copy counts", - "Correggi Problemi": "Fix Issues", - "Ripara automaticamente gli errori rilevati": "Automatically repair detected errors", - "Manutenzione Completa": "Full Maintenance", - "Esegui tutte le operazioni di manutenzione": "Run all maintenance operations", - "Vuoi correggere automaticamente i problemi di integrità rilevati?": "Do you want to automatically fix the detected integrity issues?", - "Vuoi eseguire la manutenzione completa del sistema? Questa operazione potrebbe richiedere alcuni minuti.": "Do you want to run full system maintenance? This may take a few minutes.", - "Prenotazione sovrapposta a prestito": "Reservation overlaps with a loan", - "Prenotazioni sovrapposte": "Overlapping reservations", - "Sì, correggi": "Yes, fix", - "Sì, esegui": "Yes, run", - "Elaborazione...": "Processing...", - "Operazione fallita": "Operation failed", - "Processing...": "Processing...", - "Operation completed": "Operation completed", - "Operation failed": "Operation failed", - "Communication error with the server": "Communication error with the server", - "Do you want to automatically fix the detected integrity issues?": "Do you want to automatically fix the detected integrity issues?", - "Do you want to run full system maintenance? This may take a few minutes.": "Do you want to run full system maintenance? This may take a few minutes.", - "Confirm?": "Confirm?", - "Yes, fix": "Yes, fix", - "Yes, run": "Yes, run", - "Cancel": "Cancel", - "Connessione database non disponibile": "Database connection not available", - "File .env non trovato": ".env file not found", - "Impossibile caricare configurazione database": "Unable to load database configuration", - "Errore connessione database": "Database connection error", - "Il tuo sistema Pinakes per catalogare, gestire e condividere la tua collezione libraria.": "Your Pinakes system to catalog, manage, and share your book collection.", - "Eventi e Incontri": "Events and Meetings", - "ordine:": "order:", - "Traduttore": "Translator", - "Nome del traduttore (se applicabile)": "Translator name (if applicable)", - "Illustratore": "Illustrator", - "Nome dell'illustratore (se applicabile)": "Illustrator name (if applicable)", - "Curatore": "Curator", - "Nome del curatore dell'opera (se applicabile)": "Curator name (if applicable)", - "es. Gianni De Conno": "e.g. Gianni De Conno", - "es. Mario Rossi": "e.g. Mario Rossi", - "Lingua non supportata": "Unsupported language", - "Lingue valide": "Valid languages", - "(codici ISO e nomi inglesi accettati)": "(ISO codes and English names accepted)", - "Copie totali": "Total copies", - "Data creazione": "Created at", - "Ultima modifica": "Last updated", - "Copia %d di %d": "Copy %d of %d", - "File caricato con successo": "File uploaded successfully", - "Errore durante l'importazione (HTTP": "Error during import (HTTP", - "Problemi di Configurazione": "Configuration Issues", - "URL Canonico Mancante": "Missing Canonical URL", - "URL Canonico Vuoto": "Empty Canonical URL", - "URL Canonico Non Valido": "Invalid Canonical URL", - "Applica Fix": "Apply Fix", - "Problemi di Integrità Database": "Database Integrity Issues", - "Tipo di issue non valido": "Invalid issue type", - "L'URL fornito non è valido": "The provided URL is not valid", - "Impossibile leggere il file .env": "Cannot read .env file", - "Impossibile scrivere nel file .env": "Cannot write to .env file", - "Configurazione aggiornata con successo!": "Configuration updated successfully!", - "Errore durante l'applicazione del fix:": "Error while applying fix:", - "Applicazione del fix...": "Applying fix...", - "Fix applicato": "Fix applied", - "Sì, applica": "Yes, apply", - "Vuoi impostare APP_CANONICAL_URL a:": "Do you want to set APP_CANONICAL_URL to:", - "Gestisci i tuoi prestiti, esplora il catalogo e scopri nuovi titoli.": "Manage your loans, explore the catalog and discover new titles.", - "Nessun libro recente": "No recent books", - "Non ci sono nuovi arrivi al momento.": "No new arrivals at the moment.", - "Non hai prestiti in corso al momento.": "You have no active loans at the moment.", - "%d giorni": "%d days", - "Email verificata con successo! Il tuo account è ora in attesa di approvazione da parte dell'amministratore. Riceverai un'email quando sarà attivato.": "Email verified successfully! Your account is now pending administrator approval. You will receive an email when it is activated.", - "Il link di verifica email è scaduto o non valido. Registrati nuovamente per ricevere un nuovo link.": "The email verification link has expired or is invalid. Please register again to receive a new link.", - "Il link di verifica non è valido. Assicurati di aver copiato l'intero link dall'email.": "The verification link is not valid. Make sure you copied the entire link from the email.", - "La mia bacheca": "My Dashboard", - "La modalità manutenzione non era attiva": "Maintenance mode was not active", - "Modalità manutenzione disattivata": "Maintenance mode disabled", - "Se il sito resta in manutenzione, elimina il file": "If the site stays in maintenance, delete the file", - "Server in manutenzione. Attendi il completamento dell'aggiornamento.": "Server in maintenance. Wait for the update to complete.", - "Creazione indici di ottimizzazione...": "Creating optimization indexes...", - "Indici di ottimizzazione creati OK": "Optimization indexes created OK", - "Nessun libro selezionato": "No books selected", - "Stato non valido": "Invalid status", - "ID libri non validi": "Invalid book IDs", - "Stato aggiornato per %d libri": "Status updated for %d books", - "%d libri eliminati": "%d books deleted", - "%d autori eliminati": "%d authors deleted", - "%d editori eliminati": "%d publishers deleted", - "Impossibile eliminare: alcuni libri hanno prestiti attivi": "Cannot delete: some books have active loans", - "Impossibile eliminare: alcuni editori hanno libri associati": "Cannot delete: some publishers have associated books", - "ISBN o EAN...": "ISBN or EAN...", - "autori. Questa azione non può essere annullata.": "authors. This action cannot be undone.", - "autori. Tutti i libri verranno assegnati all'autore risultante.": "authors. All books will be assigned to the resulting author.", - "editori. Questa azione non può essere annullata.": "publishers. This action cannot be undone.", - "editori. Tutti i libri verranno assegnati all'editore risultante.": "publishers. All books will be assigned to the resulting publisher.", - "libri. Questa azione non può essere annullata.": "books. This action cannot be undone.", - "I libri degli altri autori verranno assegnati a questo": "Books from other authors will be assigned to this one", - "I libri degli altri editori verranno assegnati a questo": "Books from other publishers will be assigned to this one", - "Nessun autore selezionato": "No authors selected", - "Nessun editore selezionato": "No publishers selected", - "ID autori non validi": "Invalid author IDs", - "ID editori non validi": "Invalid publisher IDs", - "Ottimizzazione Indici Database": "Database Index Optimization", - "Ottimizzato": "Optimized", - "%d Indici Mancanti": "%d Missing Indexes", - "Il database è già ottimizzato!": "The database is already optimized!", - "Tutti gli indici di performance sono presenti.": "All performance indexes are present.", - "Perché servono questi indici?": "Why are these indexes needed?", - "Gli indici migliorano significativamente le performance delle query, specialmente su tabelle con molti record. Le installazioni recenti li includono già, ma le installazioni più vecchie potrebbero non averli.": "Indexes significantly improve query performance, especially on tables with many records. Recent installations already include them, but older installations may not have them.", - "Tabella": "Table", - "Nome Indice": "Index Name", - "Colonne": "Columns", - "Crea Indici Automaticamente": "Create Indexes Automatically", - "Scarica Script SQL": "Download SQL Script", - "Creazione indici...": "Creating indexes...", - "Vuoi creare gli indici mancanti? Questa operazione migliorerà le performance del database.": "Do you want to create the missing indexes? This operation will improve database performance.", - "Sì, crea indici": "Yes, create indexes", - "Indici creati:": "Indexes created:", - "Errori:": "Errors:", - "Indici creati con successo": "Indexes created successfully", - "%d indici creati con successo": "%d indexes created successfully", - "Errore durante la creazione degli indici": "Error while creating indexes", - "Errore durante la creazione degli indici:": "Error while creating indexes:", - "%d indici mancanti trovati": "%d missing indexes found", - "Cerca per titolo, ISBN o EAN": "Search by title, ISBN or EAN", - "%d copie disponibili su %d": "%d copies available out of %d", - "1 copia disponibile su %d": "1 copy available out of %d", - "Nessuna copia registrata": "No copies registered", - "Disponibile nella data selezionata": "Available on selected date", - "Non disponibile nella data selezionata": "Not available on selected date", - "Prima data disponibile: %s": "First available date: %s", - "Seleziona un libro per vedere la disponibilità": "Select a book to see availability", - "Calendario Disponibilità": "Availability Calendar", - "visualizzazione per copia": "view by copy", - "In prestito fino al": "On loan until", - "Libro '%s' (ID: %d) ha copie disponibili negative: %d": "Book '%s' (ID: %d) has negative available copies: %d", - "Libro '%s' (ID: %d) ha più copie disponibili (%d) che totali (%d)": "Book '%s' (ID: %d) has more available copies (%d) than total (%d)", - "Prestito ID %d riferisce libro/utente inesistente (libro: %d, utente: %d)": "Loan ID %d references non-existent book/user (book: %d, user: %d)", - "Prestito ID %d attivo senza data scadenza": "Active loan ID %d has no due date", - "Libro '%s' (ID: %d) ha stato '%s' ma copie disponibili: %d": "Book '%s' (ID: %d) has status '%s' but available copies: %d", - "Prenotazione ID %d si sovrappone al prestito ID %d per il libro %d": "Reservation ID %d overlaps with loan ID %d for book %d", - "Prenotazioni ID %d e %d si sovrappongono per il libro %d": "Reservations ID %d and %d overlap for book %d", - "Prenotazione ID %d scaduta il %s ma ancora attiva": "Reservation ID %d expired on %s but still active", - "Libro ID %d ha posizioni coda non sequenziali: %s": "Book ID %d has non-sequential queue positions: %s", - "Prestito ID %d da prenotazione in attesa da %d giorni (libro %d)": "Loan ID %d from reservation pending for %d days (book %d)", - "Prestito ID %d con stato '%s' ha ancora attivo = 1": "Loan ID %d with status '%s' still has active = 1", - "APP_CANONICAL_URL non configurato nel file .env. Link nelle email potrebbero non funzionare correttamente. Valore suggerito: %s": "APP_CANONICAL_URL not configured in .env file. Email links may not work correctly. Suggested value: %s", - "Aggiungi al file .env: APP_CANONICAL_URL=%s": "Add to .env file: APP_CANONICAL_URL=%s", - "APP_CANONICAL_URL configurato ma vuoto nel file .env. Link nelle email useranno fallback a HTTP_HOST. Valore suggerito: %s": "APP_CANONICAL_URL configured but empty in .env file. Email links will use HTTP_HOST fallback. Suggested value: %s", - "Imposta nel file .env: APP_CANONICAL_URL=%s": "Set in .env file: APP_CANONICAL_URL=%s", - "APP_CANONICAL_URL configurato con valore non valido: '%s'. Link nelle email potrebbero non funzionare. Valore suggerito: %s": "APP_CANONICAL_URL configured with invalid value: '%s'. Email links may not work. Suggested value: %s", - "Correggi nel file .env: APP_CANONICAL_URL=%s": "Fix in .env file: APP_CANONICAL_URL=%s", - "Prestito non trovato": "Loan not found", - "Prestito validato e aggiornato": "Loan validated and updated", - "Errore validazione prestito:": "Loan validation error:", - "Errore correzione dati:": "Data correction error:", - "Errore creazione indici:": "Index creation error:", - "Indice %s creato su %s": "Index %s created on %s", - "Errore creazione %s su %s:": "Error creating %s on %s:", - "Eccezione creazione %s su %s:": "Exception creating %s on %s:", - "Dati libro recuperati con successo da Open Library": "Book data successfully retrieved from Open Library", - "Libro non trovato nel database Open Library": "Book not found in Open Library database", - "Calendario Prestiti e Prenotazioni": "Loans and Reservations Calendar", - "Sincronizza (ICS)": "Sync (ICS)", - "Copia Link": "Copy Link", - "Prestiti programmati": "Scheduled Loans", - "Prestiti scaduti": "Overdue Loans", - "Creata il": "Created on", - "Mese": "Month", - "Settimana": "Week", - "Lista": "List", - "Programmato": "Scheduled", - "L'URL del calendario è stato copiato negli appunti.": "The calendar URL has been copied to clipboard.", - "Prestito Programmato": "Scheduled Loan", - "Prestito Scaduto": "Overdue Loan", - "Richiesta Pendente": "Pending Request", - "Calendario non disponibile": "Calendar not available", - "Errore lettura calendario": "Calendar read error", - "Inizio": "Start", - "Oggi": "Today", - "Prestiti in corso": "Active Loans", - "Sicurezza Automatica": "Automatic Security", - "L'accesso alla cartella installer è automaticamente bloccato dopo l'installazione.": "Access to the installer folder is automatically blocked after installation.", - "Il file": "The file", - "nella root del progetto impedisce qualsiasi accesso non autorizzato.": "in the project root prevents any unauthorized access.", - "SBN Italia - Integrato": "SBN Italy - Integrated", - "Il catalogo SBN (OPAC Nazionale Italiano) è già integrato e viene interrogato automaticamente durante l'importazione ISBN. Non è necessario aggiungerlo come server esterno.": "The SBN catalog (Italian National OPAC) is already integrated and automatically queried during ISBN import. No need to add it as an external server.", - "Server Esterni SRU": "External SRU Servers", - "Server SRU aggiuntivi per Copy Cataloging. SBN Italia è già integrato (vedi sopra).": "Additional SRU servers for Copy Cataloging. SBN Italy is already integrated (see above).", - "Inserimento Manuale Dewey": "Manual Dewey Entry", - "es. 599.9, 004.6782, 641.5945": "e.g. 599.9, 004.6782, 641.5945", - "es. 599.9, 004.6782, 641.5945, 599.1": "e.g. 599.9, 004.6782, 641.5945, 599.1", - "Inserisci il codice Dewey completo (supporta fino a 4 decimali)": "Enter the complete Dewey code (supports up to 4 decimal digits)", - "Inserisci qualsiasi codice Dewey (anche se non presente nell'elenco)": "Enter any Dewey code (even if not in the list)", - "Oppure naviga per categorie:": "Or browse by categories:", - "Oppure naviga per categorie": "Or browse by categories", - "Classificazione selezionata:": "Selected classification:", - "Codice Dewey trovato e impostato": "Dewey code found and set", - "Codice Dewey non trovato": "Dewey code not found", - "Errore nel recupero dei figli": "Error retrieving children", - "Usa gli endpoint specifici per il formato legacy": "Use specific endpoints for legacy format", - "Parametro code obbligatorio.": "Code parameter required.", - "Codice parent non trovato.": "Parent code not found.", - "Codice Dewey": "Dewey Code", - "Inserisci un codice Dewey": "Enter a Dewey code", - "Formato codice non valido": "Invalid code format", - "Usa formato: 599 oppure 599.9 oppure 599.93": "Use format: 599 or 599.9 or 599.93", - "Formato codice non valido. Usa formato: 599 oppure 599.9 oppure 599.93": "Invalid code format. Use format: 599 or 599.9 or 599.93", - "Questo endpoint è supportato solo per il formato Dewey legacy. Usa /api/dewey/children.": "This endpoint is only supported for the legacy Dewey format. Use /api/dewey/children.", - "Errore nella lettura del backup.": "Error reading backup file.", - "Formato dati non valido.": "Invalid data format.", - "Errore nella lettura del file.": "Error reading file.", - "Errore nella lettura del file Dewey esistente.": "Error reading existing Dewey file.", - "File Dewey esistente non è un JSON valido o è corrotto.": "Existing Dewey file is not valid JSON or is corrupted.", - "Errore nella codifica JSON.": "JSON encoding error.", - "Attiva questa opzione solo se il tuo server supporta HTTPS. Se il tuo hosting forza già HTTPS automaticamente, non è necessario abilitarla (potrebbe causare redirect loop).": "Enable this option only if your server supports HTTPS. If your hosting already forces HTTPS automatically, you don't need to enable it (may cause redirect loop).", - "Locale non supportato.": "Unsupported locale.", - "File Dewey non trovato.": "Dewey file not found.", - "Errore nel parsing del file JSON.": "Error parsing JSON file.", - "Errori di validazione.": "Validation errors.", - "Errore nel salvataggio del file.": "Error saving file.", - "Salvato con successo.": "Saved successfully.", - "Dati validi.": "Valid data.", - "Errori di validazione nel file importato.": "Validation errors in imported file.", - "Importato con successo. %d voci totali.": "Imported successfully. %d total entries.", - "Nome file non valido.": "Invalid filename.", - "Backup non trovato.": "Backup not found.", - "Errore nel ripristino.": "Error during restore.", - "Backup ripristinato con successo.": "Backup restored successfully.", - "JSON non valido.": "Invalid JSON.", - "Nessun dato.": "No data.", - "Errore nel caricamento.": "Error loading.", - "Ripristinato": "Restored", - "Aggiungi decimale": "Add decimal", - "I dati devono essere un array non vuoto.": "Data must be a non-empty array.", - "Nodo mancante di codice a profondità %d.": "Node missing code at depth %d.", - "Il codice %s ha un nome non valido (minimo 2 caratteri).": "Code %s has an invalid name (minimum 2 characters).", - "Il codice %s ha un livello non valido (deve essere 1-7).": "Code %s has an invalid level (must be 1-7).", - "Il codice %s ha un formato non valido.": "Code %s has an invalid format.", - "Il codice %s è duplicato.": "Code %s is duplicated.", - "Il codice %s non è un figlio valido di %s.": "Code %s is not a valid child of %s.", - "Classe principale mancante: %s.": "Missing main class: %s.", - "Importato": "Imported", - "Modifiche non salvate": "Unsaved changes", - "Nome della classificazione": "Classification name", - "Formato codice non valido. Usa: XXX.Y (es. 599.1)": "Invalid code format. Use: XXX.Y (e.g. 599.1)", - "Errore nel caricamento dei backup.": "Error loading backups.", - "I dati attuali verranno sostituiti.": "Current data will be replaced.", - "Ripristinare questo backup?": "Restore this backup?", - "Questo codice esiste già.": "This code already exists.", - "Formato JSON non valido": "Invalid JSON format", - "Sessioni attive": "Active sessions", - "Gestisci i dispositivi su cui hai effettuato l'accesso con 'Ricordami'. Puoi disconnetterti da singoli dispositivi o da tutti contemporaneamente.": "Manage the devices you've logged in with 'Remember Me'. You can sign out from individual devices or all at once.", - "Caricamento sessioni...": "Loading sessions...", - "Nessuna sessione attiva. Le sessioni vengono create quando accedi con 'Ricordami' selezionato.": "No active sessions. Sessions are created when you log in with 'Remember Me' selected.", - "Sessione corrente": "Current session", - "Ultimo utilizzo": "Last used", - "Creata": "Created", - "Scade": "Expires", - "Disconnetti": "Sign out", - "Disconnetti tutti": "Sign out all", - "Vuoi disconnettere questo dispositivo?": "Do you want to sign out this device?", - "Vuoi disconnettere tutti i dispositivi? Dovrai effettuare nuovamente l'accesso su ogni dispositivo.": "Do you want to sign out all devices? You will need to log in again on each device.", - "Dispositivo sconosciuto": "Unknown device", - "sessioni attive": "active sessions", - "La richiesta ha impiegato troppo tempo. Riprova.": "The request took too long. Please try again.", - "Sessione revocata": "Session revoked", - "Impossibile revocare la sessione": "Unable to revoke session", - "Revocate %d sessioni": "Revoked %d sessions", - "ID sessione non valido": "Invalid session ID", - "Non autorizzato": "Unauthorized", - "Tabelle di Sistema": "System Tables", - "Complete": "Complete", - "%d Tabelle Mancanti": "%d Missing Tables", - "Tutte le tabelle di sistema sono presenti!": "All system tables are present!", - "Il sistema di aggiornamento è pronto.": "The update system is ready.", - "Tabelle richieste per l'aggiornamento": "Tables required for updates", - "Queste tabelle sono necessarie per tracciare gli aggiornamenti e le migrazioni del database.": "These tables are required to track updates and database migrations.", - "Cronologia degli aggiornamenti eseguiti": "History of executed updates", - "Registro delle migrazioni database applicate": "Registry of applied database migrations", - "Crea Tabelle Mancanti": "Create Missing Tables", - "Creazione tabelle...": "Creating tables...", - "Vuoi creare le tabelle di sistema mancanti? Queste sono necessarie per il sistema di aggiornamento.": "Do you want to create the missing system tables? These are required for the update system.", - "Sì, crea tabelle": "Yes, create tables", - "Tabelle create:": "Tables created:", - "%d tabelle create con successo": "%d tables created successfully", - "Errore durante la creazione delle tabelle:": "Error creating tables:", - "Tabella %s creata": "Table %s created", - "Errore creazione tabella %s:": "Error creating table %s:", - "Eccezione creazione tabella %s:": "Exception creating table %s:", - "Errore riassegnazione copia": "Copy reassignment error", - "Errore riassegnazione copia persa": "Lost copy reassignment error", - "Impossibile notificare utente: dati mancanti": "Cannot notify user: missing data", - "Notifica prenotazione disponibile inviata": "Reservation available notification sent", - "Invio notifica prenotazione fallito": "Reservation notification failed", - "Impossibile notificare utente copia non disponibile": "Cannot notify user copy unavailable", - "La copia assegnata è stata segnalata come persa o danneggiata": "The assigned copy has been reported as lost or damaged", - "La prenotazione è scaduta": "The reservation has expired", - "La copia non è più disponibile": "The copy is no longer available", - "Prenotazione: copia non disponibile": "Reservation: copy unavailable", - "Prenotazione per \"%s\" (utente: %s) messa in attesa. %s.": "Reservation for \"%s\" (user: %s) put on hold. %s.", - "Notifica copia non disponibile creata": "Copy unavailable notification created", - "Errore gestione cambio stato copia": "Copy status change handling error", - "DataIntegrity warning (store loan)": "DataIntegrity warning (store loan)", - "Notifica prestito fallita": "Loan notification failed", - "Validazione prestito fallita": "Loan validation failed", - "Riassegnazione copia fallita": "Copy reassignment failed", - "Errore elaborazione restituzione": "Return processing error", - "Rinnovo prestito fallito": "Loan renewal failed", - "Errore export CSV": "CSV export error", - "Errore annullamento prestito": "Loan cancellation error", - "Errore annullamento prenotazione": "Reservation cancellation error", - "Errore modifica data prenotazione": "Reservation date change error", - "Notifica richiesta prestito fallita": "Loan request notification failed", - "Errore richiesta prestito": "Loan request error", - "Errore prenotazione": "Reservation error", - "Riassegnazione prenotazione nuova copia fallita": "New copy reservation reassignment failed", - "Elaborazione lista attesa fallita": "Waitlist processing failed", - "La tua prenotazione per \"%s\" è stata messa in attesa. %s. Verrai notificato quando sarà disponibile una nuova copia.": "Your reservation for \"%s\" has been put on hold. %s. You will be notified when a new copy becomes available.", - "Esauriti tentativi riassegnazione copia": "Exhausted copy reassignment attempts", - "Errore gestione copia non disponibile": "Copy unavailable handling error", - "Errore invio notifica differita": "Deferred notification send error", - "Da Ritirare": "Ready for Pickup", - "Conferma Ritiro": "Confirm Pickup", - "L'utente ha ritirato il libro?": "Has the user picked up the book?", - "Ritiro confermato! Il prestito è ora in corso.": "Pickup confirmed! The loan is now active.", - "Errore nella conferma del ritiro": "Error confirming pickup", - "Giorni per ritirare un prestito approvato": "Days to pick up an approved loan", - "Ritiro confermato con successo": "Pickup confirmed successfully", - "Prestito non trovato o non pronto per il ritiro": "Loan not found or not ready for pickup", - "Recati in biblioteca durante gli orari di apertura per ritirare il libro.": "Visit the library during opening hours to pick up the book.", - "Pronto per il ritiro": "Ready for Pickup", - "Ritiro scaduto": "Pickup Expired", - "Inviata quando un prestito è stato approvato e il libro è pronto per il ritiro.": "Sent when a loan has been approved and the book is ready for pickup.", - "Inviata quando il tempo per ritirare un libro è scaduto e il prestito è stato annullato.": "Sent when the pickup deadline has passed and the loan has been cancelled.", - "Scadenza ritiro": "Pickup deadline", - "Prestiti in attesa di ritiro attivati": "Loans ready for pickup activated", - "Ritiri scaduti elaborati": "Expired pickups processed", - "Prestito pronto per ritiro non trovato": "Loan ready for pickup not found", - "Errore attivazione prestito schedulato": "Scheduled loan activation error", - "Errore elaborazione ritiro scaduto": "Expired pickup processing error", - "Il termine per il ritiro è scaduto": "The pickup deadline has passed", - "Ritiro non effettuato entro il termine previsto": "Pickup not completed within the deadline", - "Ritiro già confermato o modificato": "Pickup already confirmed or modified", - "Prestito già modificato da altra richiesta": "Loan already modified by another request", - "Errore invio notifica ritiro scaduto": "Error sending pickup expired notification", - "Nessun prestito in attesa di ritiro": "No loans waiting for pickup", - "Gestisci tutti": "Manage all", - "Ritiro annullato": "Pickup cancelled", - "Inviata quando un ritiro viene annullato dall'amministratore.": "Sent when a pickup is cancelled by an administrator.", - "Prestito non trovato o non cancellabile": "Loan not found or cannot be cancelled", - "Ritiro annullato con successo": "Pickup cancelled successfully", - "Ritiro non effettuato": "Pickup not completed", - "Errore durante l'annullamento del ritiro": "Error cancelling pickup", - "Prestito senza copia assegnata - contattare l'amministratore": "Loan has no assigned copy - contact administrator", - "(opzionale - max 200 caratteri)": "(optional - max 200 characters)", - "(opzionale - max 70 caratteri)": "(optional - max 70 characters)", - "(percorso legacy)": "(legacy path)", - "+ Aggiungi da preset...": "+ Add from preset...", - "1 evento": "1 event", - "API Key già configurata": "API Key already configured", - "API configurata": "API configured", - "Abilita Client SRU": "Enable SRU Client", - "Abilita Plugin": "Enable Plugin", - "Abilita Server SRU": "Enable SRU Server", - "Accedi e Procedi": "Login and Continue", - "Accesso negato. Permessi insufficienti.": "Access denied. Insufficient permissions.", - "Acquisito a": "Acquired at", - "Acquisito da": "Acquired from", - "Aggiornamento disponibile!": "Update available!", - "Aggiunti di recente al catalogo": "Recently added to catalog", - "Anni di Vita": "Years of Life", - "Anno a": "Year to", - "Anno da": "Year from", - "Annulla Prestito": "Cancel Loan", - "Annulla Prestito Scaduto": "Cancel Expired Loan", - "Annullare il prestito scaduto?": "Cancel the expired loan?", - "Applicazione già installata": "Application already installed", - "Approvato il %s": "Approved on %s", - "Article (Articolo/Blog)": "Article (Article/Blog)", - "Autenticazione Admin Richiesta": "Admin Authentication Required", - "Autenticazione Richiesta": "Authentication Required", - "Autenticazione richiesta.": "Authentication required.", - "Autore non specificato": "Author not specified", - "Backup creato!": "Backup created!", - "Backup eliminato con successo": "Backup deleted successfully", - "Cambia vista": "Change view", - "Cancella": "Clear", - "Caricamento del logo non riuscito. Verifica le dimensioni e il formato del file.": "Logo upload failed. Check file size and format.", - "Cerca...": "Search...", - "Codice scaffale obbligatorio": "Shelf code required", - "Collocazione:": "Location:", - "Compila tutti i campi obbligatori.": "Fill in all required fields.", - "Confermare il ritiro?": "Confirm pickup?", - "Confermi di voler attivare direttamente questo utente senza richiedere verifica email?": "Are you sure you want to directly activate this user without requiring email verification?", - "Configura API": "Configure API", - "Configura Z39.50": "Configure Z39.50", - "Consigliato: Summary Large Image per homepage.": "Recommended: Summary Large Image for homepage.", - "Contenuto della pagina": "Page content", - "Controlla la tua casella di posta e clicca sul link per resettare la password. Il link sarà valido per 2 ore.": "Check your inbox and click the link to reset your password. The link will be valid for 2 hours.", - "Controllo pre-aggiornamento fallito": "Pre-update check failed", - "Copertina del libro \"%s\"": "Book cover for \"%s\"", - "Copia eliminata con successo.": "Copy deleted successfully.", - "Copia non trovata.": "Copy not found.", - "Crea Backup": "Create Backup", - "Credenziali": "Credentials", - "Credenziali non valide o utente non admin": "Invalid credentials or user is not admin", - "Da approvare o rifiutare": "To approve or reject", - "Da ritirare": "Ready for pickup", - "Data Restituzione": "Return Date", - "Data non valida.": "Invalid date.", - "Database installato (46 tabelle)": "Database installed (46 tables)", - "Descrizione per Twitter/X. Se vuoto, usa la descrizione Open Graph.": "Description for Twitter/X. If empty, uses Open Graph description.", - "Editore %s": "Publisher %s", - "Eliminare i libri selezionati?": "Delete selected books?", - "Eliminare il file .installed dalla root del progetto e rieseguire l'installer": "Delete the .installed file from the project root and run the installer again", - "Email Admin": "Admin Email", - "Endpoint SRU:": "SRU Endpoint:", - "Errore di salvataggio. Riprova più tardi.": "Save error. Please try again later.", - "Errore di sicurezza. Ricarica la pagina e riprova": "Security error. Reload the page and try again", - "Errore di sicurezza. Riprova.": "Security error. Please try again.", - "Errore durante il recupero dei dati": "Error retrieving data", - "Errore durante il recupero delle sessioni": "Error retrieving sessions", - "Errore durante il salvataggio delle impostazioni.": "Error saving settings.", - "Errore durante la conferma del ritiro": "Error confirming pickup", - "Errore durante la revoca della sessione": "Error revoking session", - "Errore durante la revoca delle sessioni": "Error revoking sessions", - "Errore durante la ricerca": "Error during search", - "Errore durante la verifica dei libri associati": "Error verifying associated books", - "Errore durante la verifica dei prestiti attivi": "Error verifying active loans", - "Errore generazione calendario": "Calendar generation error", - "Errore generazione PDF prestito": "Error generating loan PDF", - "Errore interno del database": "Internal database error", - "Errore interno del database durante la verifica": "Internal database error during verification", - "Errore invio notifica ritiro pronto": "Error sending pickup ready notification", - "Errore nel salvataggio del file di traduzione": "Error saving translation file", - "Errore nel salvataggio del file route": "Error saving route file", - "Errore nella prenotazione.": "Error creating reservation.", - "Errore nella ricerca.": "Error during search.", - "Errore nella richiesta di prestito.": "Error creating loan request.", - "Esiste già un altro libro con lo stesso identificatore (ISBN/EAN).": "Another book with the same identifier (ISBN/EAN) already exists.", - "Esiste già un libro con lo stesso identificatore (ISBN/EAN).": "A book with the same identifier (ISBN/EAN) already exists.", - "Esplora il catalogo e scopri nuovi titoli.": "Explore the catalog and discover new titles.", - "Esplora il nostro catalogo digitale": "Explore our digital catalog", - "Espone il catalogo locale via protocollo SRU per altre biblioteche.": "Exposes local catalog via SRU protocol for other libraries.", - "File backup non trovato": "Backup file not found", - "File di aggiornamento non valido (troppo piccolo)": "Invalid update file (too small)", - "File di log non trovato": "Log file not found", - "File troppo grande. Dimensione massima 5MB.": "File too large. Maximum size 5MB.", - "Formato richiesta non valido": "Invalid request format", - "Genere creato con successo!": "Genre created successfully!", - "Google Books API collegata": "Google Books API connected", - "Hai già una prenotazione attiva per questo libro.": "You already have an active reservation for this book.", - "Hai già una richiesta di prestito in attesa per questo libro": "You already have a pending loan request for this book", - "Hai già un prestito attivo o in attesa per questo libro": "You already have an active or pending loan for this book", - "ID genere non valido": "Invalid genre ID", - "IN RITARDO": "OVERDUE", - "ISBN non trovato. Fonti consultate: %s": "ISBN not found. Sources consulted: %s", - "Il download dovrebbe iniziare automaticamente": "Download should start automatically", - "Il termine per il ritiro è scaduto. Vuoi annullare questo prestito?": "The pickup deadline has passed. Do you want to cancel this loan?", - "Immagine Twitter": "Twitter Image", - "Immagine per Twitter/X. Dimensioni consigliate: 1200x675px o 1200x1200px. Se vuoto, usa l'immagine Open Graph.": "Image for Twitter/X. Recommended dimensions: 1200x675px or 1200x1200px. If empty, uses Open Graph image.", - "Importante:": "Important:", - "Impossibile acquisire il lock. Riprova tra qualche secondo.": "Unable to acquire lock. Please try again in a few seconds.", - "Impossibile creare la mensola. Riprova più tardi.": "Unable to create shelf. Please try again later.", - "Impossibile creare lo scaffale. Riprova più tardi.": "Unable to create bookcase. Please try again later.", - "Impossibile eliminare il libro: ci sono prestiti o prenotazioni attive. Termina prima i prestiti/prenotazioni.": "Cannot delete book: there are active loans or reservations. End loans/reservations first.", - "Impossibile eliminare una copia attualmente in prestito.": "Cannot delete a copy currently on loan.", - "Impossibile eliminare: la mensola contiene libri": "Cannot delete: shelf contains books", - "Impossibile eliminare: lo scaffale contiene libri": "Cannot delete: bookcase contains books", - "Impossibile eliminare: lo scaffale contiene mensole": "Cannot delete: bookcase contains shelves", - "Impossibile leggere il file di log": "Unable to read log file", - "Impossibile modificare una copia attualmente in prestito. Prima termina il prestito o imposta lo stato su \"Disponibile\" per chiuderlo automaticamente.": "Cannot edit a copy currently on loan. First end the loan or set status to \"Available\" to close it automatically.", - "Impossibile riaprire il file ZIP": "Unable to reopen ZIP file", - "Impossibile ricalcolare la disponibilità del libro.": "Unable to recalculate book availability.", - "Impossibile salvare le impostazioni.": "Unable to save settings.", - "Impostazioni API Book Scraper salvate correttamente.": "Book Scraper API settings saved successfully.", - "Impostazioni Z39.50 salvate correttamente.": "Z39.50 settings saved successfully.", - "In Attesa": "Pending", - "In scadenza": "Expiring soon", - "Indice ISBN": "ISBN Index", - "Inserisci una breve biografia dell'autore...": "Enter a brief author biography...", - "L'applicazione risulta correttamente configurata.": "The application is correctly configured.", - "L'installazione è stata completata correttamente e tutte le verifiche sono andate a buon fine.": "Installation completed successfully and all verifications passed.", - "La data non può essere nel passato.": "Date cannot be in the past.", - "La pagina che stai cercando non esiste.": "The page you are looking for does not exist.", - "La password deve contenere almeno una lettera maiuscola, una minuscola e un numero.": "Password must contain at least one uppercase letter, one lowercase letter and a number.", - "La password deve contenere maiuscole, minuscole e numeri.": "Password must contain uppercase, lowercase and numbers.", - "La password deve essere lunga almeno 8 caratteri.": "Password must be at least 8 characters long.", - "La password non può superare i 72 caratteri.": "Password cannot exceed 72 characters.", - "La password attuale non è corretta.": "Current password is incorrect.", - "Le password non coincidono.": "Passwords do not match.", - "Le sessioni scadono automaticamente per proteggere i tuoi dati.": "Sessions expire automatically to protect your data.", - "Letta": "Read", - "Libri attualmente in prestito": "Books currently on loan", - "Libri prenotati dagli utenti": "Books reserved by users", - "MaintenanceService errore ritiri scaduti": "MaintenanceService expired pickups error", - "MaintenanceService errore scadenza ritiro": "MaintenanceService pickup expiration error", - "MaintenanceService ritiro scaduto": "MaintenanceService pickup expired", - "Mensola eliminata": "Shelf deleted", - "Modifica Route": "Edit Route", - "Mostra questa guida": "Show this guide", - "Nessun editore trovato per": "No publisher found for", - "Nessun risultato trovato per": "No results found for", - "Nessun server configurato. Aggiungine uno per iniziare.": "No servers configured. Add one to get started.", - "Nessuna copia disponibile per il periodo richiesto": "No copy available for the requested period", - "Nessuna fonte di scraping disponibile. Installa almeno un plugin di scraping (es. Open Library o Scraping Pro).": "No scraping source available. Install at least one scraping plugin (e.g. Open Library or Scraping Pro).", - "Nessuna ricerca recente": "No recent searches", - "Nessuna richiesta da approvare": "No requests to approve", - "Nome Server": "Server Name", - "Nome e cognome sono obbligatori.": "First name and last name are required.", - "Non ci sono azioni urgenti da completare.": "No urgent actions to complete.", - "Nuova ricerca": "New search", - "Nuovo libro": "New book", - "Oppure accedere a /installer/?force=1 per forzare una nuova procedura": "Or go to /installer/?force=1 to force a new installation", - "PDF generato!": "PDF generated!", - "PDF prestito non generato": "Loan PDF not generated", - "Passo": "Step", - "Percorso backup non valido": "Invalid backup path", - "Periodo": "Period", - "Permette di importare libri (Copy Cataloging) e cercare su cataloghi esterni.": "Allows importing books (Copy Cataloging) and searching external catalogs.", - "Personalizzato": "Custom", - "Personalizzazione aspetto": "Appearance customization", - "Plugin API personalizzata per scraping dati libri": "Custom API plugin for book data scraping", - "Prenotazione": "Reservation", - "Prenotazione effettuata con successo": "Reservation created successfully", - "Prenotazioni attive (slot libro)": "Active reservations (book slots)", - "Prestiti approvati in attesa di consegna": "Approved loans awaiting delivery", - "Prestiti pronti per il ritiro": "Loans ready for pickup", - "Prestito annullato!": "Loan cancelled!", - "Prestito approvato - in attesa di ritiro": "Loan approved - awaiting pickup", - "Prestito chiuso automaticamente. La copia è ora disponibile.": "Loan closed automatically. The copy is now available.", - "Prestito già processato da un altro utente": "Loan already processed by another user", - "Prestito prenotato con successo": "Loan reserved successfully", - "Prestito rinnovato correttamente. Nuova scadenza: %s": "Loan renewed successfully. New due date: %s", - "Profile (Profilo)": "Profile", - "Puoi eliminare solo copie perse, danneggiate o in manutenzione. Prima modifica lo stato della copia.": "You can only delete lost, damaged or in maintenance copies. First change the copy status.", - "Quando abilitato, il plugin interrogherà l'API durante l'importazione dati libri.": "When enabled, the plugin will query the API during book data import.", - "Questa operazione cancellerà tutti i dati esistenti. Assicurati di avere un backup.": "This operation will delete all existing data. Make sure you have a backup.", - "Questi sono i server a cui la tua biblioteca si collegherà per cercare e importare libri.": "These are the servers your library will connect to for searching and importing books.", - "Questo plugin interroga un servizio API esterno per recuperare dati libri tramite ISBN/EAN. Ha priorità 3 (più alta di Open Library).": "This plugin queries an external API service to retrieve book data via ISBN/EAN. It has priority 3 (higher than Open Library).", - "Ricerche recenti": "Recent searches", - "Richiedono attenzione immediata": "Require immediate attention", - "Richieste in Attesa": "Pending Requests", - "Richiesto:": "Required:", - "Ritiro confermato!": "Pickup confirmed!", - "Ritiro scaduto il": "Pickup expired on", - "Route aggiornate con successo": "Routes updated successfully", - "Salva Configurazione": "Save Configuration", - "Scadenza prenotazione": "Reservation expiration", - "Scadenza ritiro:": "Pickup deadline:", - "Scaduto il:": "Expired on:", - "Scaffale creato": "Bookcase created", - "Scaffale eliminato": "Bookcase deleted", - "Scaffale obbligatorio": "Bookcase required", - "Cerca globale": "Global search", - "Chiudi popup": "Close popup", - "Mostra scorciatoie": "Show shortcuts", - "Navigazione": "Navigation", - "Scorciatoie da tastiera": "Keyboard shortcuts", - "Vai a Autori": "Go to Authors", - "Vai a Dashboard": "Go to Dashboard", - "Vai a Editori": "Go to Publishers", - "Vai a Impostazioni": "Go to Settings", - "Vai a Libri": "Go to Books", - "Vai a Prestiti": "Go to Loans", - "Vai a Utenti": "Go to Users", - "poi": "then", - "Se desideri reinstallare puoi:": "If you want to reinstall you can:", - "Sei sicuro di voler eliminare questo messaggio?": "Are you sure you want to delete this message?", - "Sei sicuro di voler eliminare questo utente?": "Are you sure you want to delete this user?", - "Seleziona tutti": "Select all", - "Sessione Scaduta": "Session Expired", - "Si è verificato un errore di rete.": "A network error occurred.", - "Si è verificato un errore durante il salvataggio.": "An error occurred while saving.", - "Si è verificato un errore imprevisto.": "An unexpected error occurred.", - "Si è verificato un errore. Riprova.": "An error occurred. Please try again.", - "Sintassi": "Syntax", - "Sito": "Website", - "Statistiche aggiornate per": "Statistics updated for", - "Stato della copia aggiornato con successo.": "Copy status updated successfully.", - "Stato non valido.": "Invalid status.", - "Summary (Immagine Piccola)": "Summary (Small Image)", - "Summary Large Image (Immagine Grande)": "Summary Large Image", - "Sì, Annulla": "Yes, Cancel", - "Test Endpoint": "Test Endpoint", - "Testi Banner Cookie": "Cookie Banner Texts", - "Timeout (secondi)": "Timeout (seconds)", - "Tipo Twitter Card": "Twitter Card Type", - "Tipo di contenuto per Open Graph. Scegli 'Website' per la homepage.": "Content type for Open Graph. Choose 'Website' for homepage.", - "Titolo modale": "Modal title", - "Titolo per Twitter/X. Se vuoto, usa il titolo Open Graph.": "Title for Twitter/X. If empty, uses Open Graph title.", - "Torna alla Home": "Return to Home", - "Trigger database: azione manuale richiesta": "Database trigger: manual action required", - "Tutte le richieste sono state gestite.": "All requests have been processed.", - "Tutto sotto controllo!": "Everything under control!", - "Twitter Cards (X)": "Twitter Cards (X)", - "URL Endpoint API": "API Endpoint URL", - "URL Endpoint SRU": "SRU Endpoint URL", - "Una chiave è attualmente salvata e funzionante. Puoi aggiornarla inserendo un nuovo valore o lasciarla vuota per rimuoverla.": "A key is currently saved and working. You can update it by entering a new value or leave it empty to remove it.", - "Upload non valido": "Invalid upload", - "Utente eliminato con successo.": "User deleted successfully.", - "Utente preselezionato": "Pre-selected user", - "Vai all'applicazione": "Go to application", - "Verifica reCAPTCHA fallita. Riprova.": "reCAPTCHA verification failed. Please try again.", - "Vista griglia": "Grid view", - "Vista tabella": "Table view", - "Website (Sito Web)": "Website", - "attivata": "activated", - "deve iniziare con": "must start with", - "libri eliminati": "books deleted", - "minuti fa": "minutes ago", - "non può contenere spazi": "cannot contain spaces", - "non può essere vuota": "cannot be empty", - "ore fa": "hours ago", - "prenotazioni": "reservations", - "secondi (min: 5, max: 60)": "seconds (min: 5, max: 60)", - "(opzionale)": "(optional)", - "API Key": "API Key", - "CAP": "ZIP Code", - "CSRF": "CSRF", - "Close menu": "Close menu", - "Coda": "Queue", - "Cover": "Cover", - "Database": "Database", - "Export": "Export", - "Import": "Import", - "Library Management System": "Library Management System", - "Search": "Search", - "Toggle menu": "Toggle menu", - "Toggle search": "Toggle search", - "Import LibraryThing": "Import LibraryThing", - "Import da LibraryThing": "Import from LibraryThing", - "Importa i tuoi libri esportati da LibraryThing.com (formato TSV)": "Import your books exported from LibraryThing.com (TSV format)", - "Import CSV Standard": "Standard CSV Import", - "Carica File LibraryThing": "Upload LibraryThing File", - "Arricchisci dati con scraping web (copertine, descrizioni, etc.)": "Enrich data with web scraping (covers, descriptions, etc.)", - "Importa Libri": "Import Books", - "Import in corso...": "Importing...", - "Come Esportare da LibraryThing": "How to Export from LibraryThing", - "Campi Supportati": "Supported Fields", - "Gestione Plugin LibraryThing": "LibraryThing Plugin Management", - "Completo": "Complete", - "Incompleto": "Incomplete", - "Campi Database": "Database Fields", - "Il plugin è attualmente installato e funzionante.": "The plugin is currently installed and working.", - "Disinstalla Plugin": "Uninstall Plugin", - "ATTENZIONE: Disinstallazione Irreversibile": "WARNING: Irreversible Uninstallation", - "Confermo di voler disinstallare il plugin e di aver effettuato un backup dei dati": "I confirm I want to uninstall the plugin and have made a backup of the data", - "Export per LibraryThing": "Export for LibraryThing", - "LibraryThing TSV": "LibraryThing TSV", - "File vuoto o formato non valido": "Empty file or invalid format", - "Il file deve avere estensione .tsv, .csv o .txt": "File must have .tsv, .csv or .txt extension", - "Il file non sembra essere in formato LibraryThing. Colonne richieste: Book Id, Title, Primary Author, ISBNs": "File does not appear to be in LibraryThing format. Required columns: Book Id, Title, Primary Author, ISBNs", - "Impossibile aprire il file": "Unable to open file", - "Numero massimo di righe superato (%d)": "Maximum number of rows exceeded (%d)", - "Copertine scaricate (LibraryThing):": "Covers downloaded (LibraryThing):", - "Già presenti:": "Already present:", - "Impossibile scaricare (libro senza ISBN):": "Cannot download (book has no ISBN):", - "Copertina non trovata online:": "Cover not found online:", - "Storico Import": "Import History", - "Visualizza la cronologia degli import CSV e LibraryThing con report errori dettagliati": "View the history of CSV and LibraryThing imports with detailed error reports", - "%d import registrato": "%d import recorded", - "%d import registrati": "%d imports recorded", - "Cronologia Import": "Import History", - "Libri Importati": "Books Imported", - "Aggiornati": "Updated", - "Errori Totali": "Total Errors", - "Data/Ora": "Date/Time", - "Totali": "Total", - "Importati": "Imported", - "Durata": "Duration", - "Scarica Errori": "Download Errors", - "Nessun errore": "No errors", - "Nessun import registrato": "No imports recorded", - "Gli import CSV e LibraryThing verranno visualizzati qui": "CSV and LibraryThing imports will be displayed here", - "Gli import vengono tracciati automaticamente durante l'elaborazione": "Imports are tracked automatically during processing", - "Informazioni sullo Storico Import": "Import History Information", - "Retention: 90 giorni": "Retention: 90 days", - "I log vengono conservati per 90 giorni per conformità GDPR": "Logs are retained for 90 days for GDPR compliance", - "Scarica il report CSV per analizzare gli errori in dettaglio": "Download the CSV report to analyze errors in detail", - "Ogni errore include: numero riga, titolo libro, tipo errore e messaggio dettagliato": "Each error includes: line number, book title, error type and detailed message", - "ID import mancante": "Missing import ID", - "%d import logs eliminati (più vecchi di %d giorni)": "%d import logs deleted (older than %d days)", - "Leggi PDF": "Read PDF", - "Chiudi Visualizzatore": "Close Viewer", - "Visualizzatore PDF": "PDF Viewer", - "Usa la funzione di ricerca del browser per trovare testo nel documento": "Use your browser's search function to find text in the document", - "Usa il controllo schermo intero del viewer o del browser": "Use the viewer or browser fullscreen control", - "Condivisione": "Sharing", - "Seleziona i pulsanti di condivisione da mostrare nella pagina del libro.": "Select which share buttons to show on the book page.", - "Nessun pulsante selezionato": "No buttons selected", - "Salva impostazioni condivisione": "Save sharing settings", - "Impostazioni di condivisione aggiornate.": "Sharing settings updated.", - "Condividi su X": "Share on X", - "Condividi su Telegram": "Share on Telegram", - "Condividi su LinkedIn": "Share on LinkedIn", - "Condividi su Reddit": "Share on Reddit", - "Condividi su Pinterest": "Share on Pinterest", - "Condividi su Threads": "Share on Threads", - "Condividi su Bluesky": "Share on Bluesky", - "Condividi su Tumblr": "Share on Tumblr", - "Salva su Pocket": "Save to Pocket", - "Condividi su VK": "Share on VK", - "Condividi su LINE": "Share on LINE", - "Invia via SMS": "Send via SMS", - "Invia per email": "Send by email", - "Copia link": "Copy link", - "Collezione: %d libri, %d autori, %d editori.": "Collection: %d books, %d authors, %d publishers.", - "Catalogo bibliotecario gestito con [Pinakes](https://github.com/fabiodalez-dev/Pinakes). Disponibile in: %s.": "Library catalog powered by [Pinakes](https://github.com/fabiodalez-dev/Pinakes). Available in: %s.", - "Pagine Principali": "Main Pages", - "Sfoglia e cerca la collezione completa": "Browse and search the full book collection", - "Informazioni sulla biblioteca": "About this library", - "Calendario eventi culturali": "Cultural events calendar", - "Informativa sulla privacy": "Privacy policy", - "Feed e Scoperta": "Feeds & Discovery", - "Feed RSS": "RSS Feed", - "Ultime aggiunte al catalogo (RSS 2.0)": "Latest book additions (RSS 2.0)", - "Indice completo degli URL": "Complete URL index", - "Interoperabilità bibliotecaria (MARCXML, Dublin Core)": "Library interoperability (MARCXML, Dublin Core)", - "Autenticazione utente": "User authentication", - "Registrazione nuovo utente": "New user registration", - "Genera automaticamente un file llms.txt per rendere la biblioteca comprensibile ai modelli linguistici (LLM)": "Automatically generate an llms.txt file to make the library understandable by large language models (LLMs)", - "Cos'è llms.txt:": "What is llms.txt:", - "È uno standard emergente (llmstxt.org) che fornisce ai motori AI un sommario strutturato del sito in formato Markdown. Quando attivo, il file viene generato dinamicamente con le statistiche della biblioteca, le pagine pubbliche e le informazioni API.": "An emerging standard (llmstxt.org) that provides AI engines with a structured Markdown summary of the site. When enabled, the file is dynamically generated with library statistics, public pages, and API information.", - "Abilita llms.txt": "Enable llms.txt", - "Rende disponibile /llms.txt e lo aggiunge a robots.txt": "Makes /llms.txt available and adds it to robots.txt", - "Disattivato": "Disabled" -} + "\"%s\" prestato a %s è in ritardo di %d giorni": "\"%s\" loaned to %s is %d days overdue", + "$1": "$1", + "$2": "$2", + "%d Problemi": "%d Issues", + "%d minuti fa": "%d minutes ago", + "%d minuto fa": "%d minute ago", + "%d notifica non letta": "%d unread notification", + "%d notifiche non lette": "%d unread notifications", + "%d ora fa": "%d hour ago", + "%d ore fa": "%d hours ago", + "%d prenotazione attiva": "%d active reservation", + "%d prenotazioni attive": "%d active reservations", + "%d prestiti attivi": "%d active loans", + "%d prestiti in ritardo": "%d overdue loans", + "%d prestiti passati": "%d past loans", + "%d prestito attivo": "%d active loan", + "%d prestito in ritardo": "%d overdue loan", + "%d prestito passato": "%d past loan", + "%d problemi rilevati": "%d issues detected", + "%d recensione": "%d review", + "%d recensioni": "%d reviews", + "%d richiesta in sospeso": "%d pending request", + "%d richieste in sospeso": "%d pending requests", + "%d titoli": "%d titles", + "%s ha prenotato \"%s\"": "%s has reserved \"%s\"", + "(filtrati da _MAX_ libri totali)": "(filtered from _MAX_ total books)", + "(opzionale - URL completo)": "(optional - full URL)", + "(opzionale - max 160 caratteri)": "(optional - max 160 characters)", + "(opzionale - max 60 caratteri)": "(optional - max 60 characters)", + "(opzionale - separate da virgola)": "(optional - comma separated)", + "+ 15 campi aggiuntivi disponibili (vedi CSV di esempio)": "+ 15 additional fields available (see example CSV)", + "+39 02 1234567": "+1 (555) 123-4567", + "+39 123 456 7890": "+1 123 456 7890", + ", %d errori": ", %d errors", + ", %d libri arricchiti con scraping": ", %d books enriched via scraping", + "-- Seleziona --": "-- Select --", + "-- Seleziona un template --": "-- Select a template --", + "... e altri %d errori": "... and %d more errors", + ".env caricato OK": ".env loaded OK", + "/* Inserisci il tuo codice CSS qui */\n/* Esempio: */\n/* body { font-size: 16px; } */": "/* Insert your CSS code here */\n/* Example: */\n/* body { font-size: 16px; } */", + "// Script analytics (es. Google Analytics)\n// Esempio Google Analytics 4:\n// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n// ga('create', 'UA-XXXXX-Y', 'auto');\n// ga('send', 'pageview');": "// Analytics scripts (e.g. Google Analytics)\n// Google Analytics 4 Example:\n// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n// ga('create', 'UA-XXXXX-Y', 'auto');\n// ga('send', 'pageview');", + "// Script essenziali (es. chat, accessibility)\n// Esempio:\n// console.log('Essential JS loaded');": "// Essential scripts (e.g. chat, accessibility)\n// Example:\n// console.log('Essential JS loaded');", + "// Script marketing (es. Facebook Pixel)\n// Esempio Facebook Pixel:\n// !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n// n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n// n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n// t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n// document,'script','https://connect.facebook.net/en_US/fbevents.js');\n// fbq('init', 'YOUR_PIXEL_ID');\n// fbq('track', 'PageView');": "// Marketing scripts (e.g. Facebook Pixel)\n// Facebook Pixel Example:\n// !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n// n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n// n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n// t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n// document,'script','https://connect.facebook.net/en_US/fbevents.js');\n// fbq('init', 'YOUR_PIXEL_ID');\n// fbq('track', 'PageView');", + "/catalogo": "/catalog", + "0-10 libri": "0-10 books", + "1. Accesso al server": "1. Server Access", + "1. Collegati al server via SSH:": "1. Connect to the server via SSH:", + "101-500 libri": "101-500 books", + "11-50 libri": "11-50 books", + "2. Aggiungi una delle configurazioni seguenti:": "2. Add one of the following configurations:", + "2. Vai nella directory dell'applicazione:": "2. Go to the application directory:", + "3. Installa le dipendenze con Composer:": "3. Install dependencies with Composer:", + "4. Verifica che le dipendenze siano state installate:": "4. Verify that dependencies have been installed:", + "51-100 libri": "51-100 books", + ": attiva per ordinare la colonna in ordine crescente": ": activate to sort column ascending", + ": attiva per ordinare la colonna in ordine decrescente": ": activate to sort column descending", + "A": "A", + "API": "API", + "API Keys": "API Keys", + "API Pubblica": "Public API", + "API abilitata con successo.": "API enabled successfully.", + "API disabilitata con successo.": "API disabled successfully.", + "API key creata con successo.": "API key created successfully.", + "API key eliminata con successo.": "API key deleted successfully.", + "AVVISO Trigger:": "Trigger WARNING:", + "Abilita": "Enable", + "Abilita Cookie Banner": "Enable Cookie Banner", + "Abilita Modalità Catalogo": "Enable Catalogue Mode", + "Abilita Modalità Solo Catalogo": "Enable Catalogue Only Mode", + "Abilita o disabilita l'accesso all'API pubblica": "Enable or disable public API access", + "Abilitata - Visibile nel frontend": "Enabled - Visible in frontend", + "Abilitata": "Enabled", + "Abilitato": "Enabled", + "Accedi": "Login", + "Directory Upload Pubblici": "Public Uploads Directory", + "Accedi a /installer/?force=1 per forzare una reinstallazione": "Go to /installer/?force=1 to force a reinstallation", + "Accedi al server tramite SSH e modifica il crontab:": "Access the server via SSH and edit the crontab:", + "Accedi al tuo account": "Sign in to your account", + "Accedi all'area admin con le credenziali sopra indicate": "Log in to the admin area with the credentials above", + "Accedi per aggiungere ai Preferiti": "Log in to add to Favorites", + "Accesso": "Login", + "Accesso Richiesto": "Login Required", + "Accesso in corso...": "Signing in...", + "Accesso non autorizzato": "Unauthorized access", + "Accetta selezionati": "Accept Selected", + "Accetta tutti": "Accept All", + "Accetto la": "I accept the", + "Account": "Account", + "Account In Attesa": "Pending Account", + "Account Sospeso": "Suspended Account", + "Account creato con successo! Verifica la tua email.": "Account created successfully! Check your email.", + "Account creato! In attesa di approvazione da parte dell'amministratore.": "Account created! Awaiting administrator approval.", + "Acquisto": "Purchase", + "Adesso": "Just now", + "Admin": "Admin", + "Admin Dewey": "Dewey Admin", + "Aggiorna": "Refresh", + "Aggiorna Dati": "Update Data", + "Aggiorna Evento": "Update Event", + "Aggiorna Statistiche": "Refresh Statistics", + "Aggiorna da ISBN": "Update from ISBN", + "Aggiorna i dettagli del libro:": "Update book details:", + "Aggiorna i dettagli dell'autore: %s": "Update author details: %s", + "Aggiorna i dettagli dell'editore:": "Update publisher details:", + "Aggiorna le informazioni del profilo selezionato.": "Update selected profile information.", + "Aggiorna password": "Update password", + "Aggiorna Ora": "Update Now", + "Aggiornamento alla versione %s completato": "Update to version %s completed", + "Aggiornamento completato!": "Update completed!", + "Aggiornamento completato con successo": "Update completed successfully", + "Aggiornamento fallito": "Update failed", + "Aggiornamento già in corso": "Update already in progress", + "Avvio aggiornamento": "Starting update", + "Avvio backup database": "Starting database backup", + "Backup completato": "Backup completed", + "Backup database completato": "Database backup completed", + "Backup tabella": "Backing up table", + "Download completato": "Download completed", + "Errore backup database": "Database backup error", + "Errore fatale durante aggiornamento": "Fatal error during update", + "Impossibile aprire file di backup per scrittura": "Unable to open backup file for writing", + "Impossibile creare lock file": "Unable to create lock file", + "Installazione completata": "Installation completed", + "Memory limit aumentato": "Memory limit increased", + "Modalità manutenzione rimossa automaticamente (scaduta)": "Maintenance mode automatically removed (expired)", + "Step 1: Creazione backup": "Step 1: Creating backup", + "Step 2: Download aggiornamento": "Step 2: Downloading update", + "Step 3: Installazione aggiornamento": "Step 3: Installing update", + "Trovate tabelle da backuppare": "Found tables to backup", + "Errore SQL durante migrazione %s: %s": "SQL error during migration %s: %s", + "Errore preparazione query migrazioni": "Error preparing migrations query", + "Errore recupero risultati migrazioni": "Error fetching migrations results", + "Errore recupero batch migrazioni": "Error fetching migrations batch", + "Errore preparazione insert migrazione": "Error preparing migration insert", + "Errore creazione tabella migrazioni": "Error creating migrations table", + "Errore creazione tabella update_logs": "Error creating update_logs table", + "Errore nel recupero delle tabelle": "Error retrieving tables", + "Errore nel recupero struttura tabella %s": "Error retrieving structure for table %s", + "Errore nel recupero dati tabella %s": "Error retrieving data for table %s", + "Pacchetto di aggiornamento non valido: manca %s": "Invalid update package: missing %s", + "Errore preparazione log aggiornamento": "Error preparing update log", + "Errore preparazione completamento log": "Error preparing log completion", + "Errore aggiornamento log": "Error updating log", + "URL di download non trovato": "Download URL not found", + "File di aggiornamento non valido": "Invalid update file", + "Impossibile creare directory di backup": "Unable to create backup directory", + "Impossibile creare directory di backup applicazione": "Unable to create application backup directory", + "Impossibile creare directory di backup: %s": "Unable to create backup directory: %s", + "Impossibile creare directory temporanea": "Unable to create temporary directory", + "Impossibile salvare il file di aggiornamento": "Unable to save update file", + "Impossibile creare il file di lock per l'aggiornamento": "Unable to create update lock file", + "Estrazione del pacchetto fallita": "Package extraction failed", + "Impossibile scrivere file di backup": "Unable to write backup file", + "Directory sorgente non trovata": "Source directory not found", + "Impossibile recuperare informazioni sulla release": "Unable to retrieve release information", + "Impossibile connettersi a GitHub": "Unable to connect to GitHub", + "Percorso non valido nel pacchetto: %s": "Invalid path in package: %s", + "Impossibile creare directory: %s": "Unable to create directory: %s", + "Errore nella copia del file: %s": "Error copying file: %s", + "Errore durante il controllo": "Error during check", + "Aggiornamento in corso...": "Updating...", + "Aggiornamento in corso. Riprova tra qualche minuto.": "Update in progress. Please try again in a few minutes.", + "Aggiornamento...": "Updating...", + "Aggiornamenti": "Updates", + "Aggiornata in base a scaffale, mensola e posizione.": "Updated based on shelf, rack and position.", + "Aggiornate %d righe": "Updated %d rows", + "Aggiungere una Nuova Lingua": "Adding a New Language", + "Aggiungi": "Add", + "Aggiungi Genere Rapido": "Quick Add Genre", + "Aggiungi Lingua": "Add Language", + "Aggiungi Nuova Lingua": "Add New Language", + "Aggiungi Nuovo Autore": "Add New Author", + "Aggiungi Nuovo Editore": "Add New Publisher", + "Aggiungi Nuovo Libro": "Add New Book", + "Aggiungi Prima Lingua": "Add First Language", + "Aggiungi Sottogenere": "Add Subgenre", + "Aggiungi ai Preferiti": "Add to Favorites", + "Aggiungi alla collezione": "Add to collection", + "Aggiungi eventuali note sul prestito": "Add any loan notes", + "Aggiungi eventuali note...": "Add any notes...", + "Aggiungi i libri che ti interessano dalla scheda di dettaglio per ricevere un promemoria quando tornano disponibili.": "Add books you're interested in from the detail page to receive a reminder when they become available.", + "Aggiungi la tua API key per interrogare Google Books quando importi un ISBN. Google viene utilizzato prima di Open Library, ma dopo Scraping Pro.": "Add your API key to query Google Books when importing an ISBN. Google is used before Open Library but after Scraping Pro.", + "Aggiungi le mensole (livelli) a ogni scaffale": "Add levels (shelves) to each bookcase", + "Aggiungi nuovo libro": "Add new book", + "Aggiungi primo libro": "Add first book", + "Aggiungi scaffali e mensole per la tua biblioteca": "Add shelves and racks for your library", + "Aggiungi un motivo (opzionale)": "Add a reason (optional)", + "Aggiungi un nuovo titolo per arricchire il catalogo di questo editore.": "Add a new title to enrich this publisher's catalog.", + "Aggiunto il": "Added on", + "Aiuto": "Help", + "Al momento non ci sono eventi attivi. Continua a seguirci per restare aggiornato sui prossimi appuntamenti.": "There are no active events at the moment. Keep following us to stay updated on upcoming appointments.", + "Al momento non ci sono eventi programmati. Torna a visitare questa pagina per scoprire i prossimi appuntamenti.": "There are currently no scheduled events. Come back to this page to discover upcoming events.", + "Al": "To", + "Al:": "To:", + "Alcune date richieste non sono disponibili": "Some requested dates are not available", + "Alcuni mancanti": "Some missing", + "Alcuni requisiti non sono soddisfatti. Risolvi i problemi prima di continuare.": "Some requirements are not met. Fix the issues before continuing.", + "Allegato": "Attachment", + "Almeno uno dei seguenti parametri è richiesto:": "At least one of the following parameters is required:", + "Altri eventi in programma": "Other upcoming events", + "Altri filtri": "More filters", + "Altro": "Other", + "Amministratore": "Administrator", + "Anno": "Year", + "Anno (YYYY)": "Year (YYYY)", + "Anno di Pubblicazione": "Publication Year", + "Anno di pubblicazione": "Publication year", + "Anno di Uscita": "Release Year", + "Anno max": "Year max", + "Anno min": "Year min", + "Anno numerico (usato per filtri e ordinamento)": "Numeric year (used for filters and sorting)", + "Anno pubblicazione": "Publication year", + "Anno pubblicazione a": "Publication year to", + "Anno pubblicazione da": "Publication year from", + "Anno:": "Year:", + "Annulla": "Cancel", + "Annulla prenotazione": "Cancel reservation", + "Annullare questa prenotazione?": "Cancel this reservation?", + "Annullata": "Cancelled", + "Annullato": "Cancelled", + "Anteprima": "Preview", + "Anteprima Banner": "Banner preview", + "Anteprima copertina": "Cover preview", + "Anteprima immagine caricata": "Uploaded image preview", + "Anteprima logo": "Logo preview", + "Anteprima non disponibile": "Preview not available", + "Anteprima:": "Preview:", + "Apparirà nei risultati di ricerca Google. Se vuoto, usa il titolo hero o il nome dell'app.": "Will appear in Google search results. If empty, uses the hero title or app name.", + "Apparirà sotto il titolo nei risultati di ricerca. Se vuoto, usa il sottotitolo hero o una descrizione generica.": "Will appear under the title in search results. If empty, uses the hero subtitle or a generic description.", + "Applica": "Apply", + "Applica Filtri": "Apply Filters", + "Applicazione Già Installata": "Application Already Installed", + "Applicazione configurata:": "Application configured:", + "Approva": "Approve", + "Approva Prestiti": "Approve Loans", + "Approva Prestito?": "Approve Loan?", + "Approva e Invia Email Attivazione": "Approve and Send Activation Email", + "Approva o rifiuta le recensioni degli utenti": "Approve or reject user reviews", + "Approva o rifiuta le richieste degli utenti": "Approve or reject user requests", + "Approva prestito?": "Approve loan?", + "Approva recensione": "Approve review", + "Approvata": "Approved", + "Approvata il": "Approved on", + "Approvato": "Approved", + "Approvato!": "Approved!", + "Approverai questa richiesta di prestito?": "Will you approve this loan request?", + "Apri": "Open", + "Apri Editor": "Open Editor", + "Apri Google Cloud Console": "Open Google Cloud Console", + "Apri file": "Open file", + "Apri menu": "Open menu", + "Archivia": "Archive", + "Archiviato": "Archived", + "Archivio": "Archive", + "Arricchimento automatico dati": "Automatic Data Enrichment", + "Artista": "Artist", + "Artista sconosciuto": "Unknown artist", + "Artisti": "Artists", + "Articolo": "Article", + "Ascolta Audiobook": "Listen to Audiobook", + "Ascolta l'audiobook": "Listen to the audiobook", + "Assicurati che corrisponda al tipo di carta per etichette che utilizzi.": "Make sure it matches the type of label paper you use.", + "Assicurati che il path assoluto dello script sia corretto": "Make sure the absolute path to the script is correct", + "Assicurati che sia configurato correttamente per evitare URL duplicati.": "Make sure it's configured correctly to avoid duplicate URLs.", + "At least one search parameter is required (ean, isbn13, isbn10, or author)": "At least one search parameter is required (ean, isbn13, isbn10, or author)", + "Attendere prego": "Please wait", + "Attendere prego...": "Please wait...", + "Attenzione": "Warning", + "Attenzione!": "Warning!", + "Attenzione:": "Warning:", + "Attenzione: %d prestiti in ritardo": "Warning: %d overdue loans", + "Attenzione: %d prestito in ritardo": "Warning: %d overdue loan", + "Attenzione: Azione Manuale Richiesta": "Warning: Manual Action Required", + "Attenzione: Non è stato possibile rimuovere tutte le copie richieste. Alcune copie sono attualmente in prestito.": "Warning: Could not remove all requested copies. Some copies are currently on loan.", + "Attivando questa modalità verranno disabilitati completamente i prestiti, le prenotazioni e la wishlist. Gli utenti potranno solo consultare il catalogo.": "Enabling this mode will completely disable loans, reservations and wishlist. Users will only be able to browse the catalogue.", + "Attiva": "Active", + "Attiva Direttamente": "Activate Directly", + "Attivato:": "Activated:", + "Attivi": "Active", + "Attività": "Activity", + "Attivo": "Active", + "Attivo:": "Active:", + "Attuale": "Current", + "Attualmente prestati": "Currently on loan", + "Audio": "Audio", + "Audio URL": "Audio URL", + "Audiobook": "Audiobook", + "Audiobook (MP3/M4A/OGG)": "Audiobook (MP3/M4A/OGG)", + "Audiobook caricato!": "Audiobook uploaded!", + "Audiobook disponibile": "Audiobook available", + "Aumenta Copie": "Increase Copies", + "Autenticazione": "Authentication", + "Auto": "Auto", + "Auto-attivazione: Se compili questo campo, il toggle \"Mostra Cookie Analitici\" in Privacy verrà attivato automaticamente.": "Auto-activation: If you fill this field, the \"Show Analytics Cookies\" toggle in Privacy will be automatically activated.", + "Auto-attivazione: Se compili questo campo, il toggle \"Mostra Cookie Marketing\" in Privacy verrà attivato automaticamente.": "Auto-activation: If you fill this field, the \"Show Marketing Cookies\" toggle in Privacy will be automatically activated.", + "Auto-detect se vuoto": "Auto-detect if empty", + "Automatismi": "Automations", + "Autore": "Author", + "Autore \"${normalizedLabel}\" pronto per essere creato": "Author \"${normalizedLabel}\" ready to be created", + "Autore \"${normalizedLabel}\" è già selezionato": "Author \"${normalizedLabel}\" is already selected", + "Autore \"%s\" pronto per essere creato": "Author \"%s\" ready to be created", + "Autore \"%s\" è già selezionato": "Author \"%s\" is already selected", + "Autore A-Z": "Author A-Z", + "Autore Z-A": "Author Z-A", + "Autore eliminato con successo.": "Author deleted successfully.", + "Autore principale": "Primary author", + "Autore sconosciuto": "Unknown author", + "Autore/i:": "Author(s):", + "Autore:": "Author:", + "Autori": "Authors", + "Autori con biografie": "Authors with biographies", + "Autori ed editori vengono creati automaticamente": "Authors and publishers are created automatically", + "Autori multipli separati da %s": "Multiple authors separated by %s", + "Autori multipli separati da %s o %s": "Multiple authors separated by %s or %s", + "Autori pubblicati": "Published Authors", + "Autori uniti": "Authors merged", + "Autori uniti con successo": "Authors merged successfully", + "Autori:": "Authors:", + "Avanti": "Next", + "Avanzate": "Advanced", + "Avvisi scadenza prestiti (configurabile in Impostazioni → Avanzate, default 3 giorni prima)": "Loan expiration warnings (configurable in Settings → Advanced, default 3 days before)", + "Avviso": "Warning", + "Azione richiesta:": "Action required:", + "Azioni": "Actions", + "Azioni Rapide": "Quick Actions", + "Azioni Veloci": "Quick Actions", + "Azioni di Approvazione": "Approval Actions", + "Azioni di Manutenzione": "Maintenance Actions", + "Azzera": "Clear", + "Backup": "Backup", + "Backup Automatico": "Automatic Backup", + "Backup creato con successo": "Backup created successfully", + "Backup disponibili": "Available backups", + "Backup e Sicurezza": "Backup and Security", + "I backup sono salvati in:": "Backups are saved in:", + "Backup fallito": "Backup failed", + "Backup Salvati": "Saved Backups", + "Backup eliminato": "Backup deleted", + "Backup non trovato": "Backup not found", + "Caricamento backup...": "Loading backups...", + "Crea un backup manuale o attendi il prossimo aggiornamento.": "Create a manual backup or wait for the next update.", + "Eliminare questo backup?": "Delete this backup?", + "Eliminazione in corso...": "Deleting...", + "Impossibile eliminare il backup": "Unable to delete backup", + "Impossibile leggere il file di backup": "Unable to read backup file", + "Nessun backup disponibile": "No backups available", + "Nome File": "File Name", + "Nome backup non specificato": "Backup name not specified", + "Nome backup non valido": "Invalid backup name", + "Barcode": "Barcode", + "Barra laterale": "Sidebar", + "Benvenuto": "Welcome", + "Benvenuto nell'Installer": "Welcome to the Installer", + "Benvenuto, %s!": "Welcome, %s!", + "Biblioteca": "Library", + "Biblioteca Digitale": "Digital Library", + "Biblioteca Digitale - La tua biblioteca online": "Digital Library - Your Online Library", + "Biblioteca Digitale - Scopri e Prenota i Tuoi Libri Preferiti": "Digital Library - Discover and Reserve Your Favorite Books", + "Biblioteca digitale con catalogo completo di libri disponibili per il prestito": "Digital library with complete catalog of books available for loan", + "Biografia": "Biography", + "Biografia dell'autore": "Author Biography", + "Bluesky": "Bluesky", + "Books": "Books", + "Breadcrumb": "Breadcrumb", + "Breve descrizione per i motori di ricerca": "Short description for search engines", + "Breve descrizione per i motori di ricerca (max 160 caratteri)": "Short description for search engines (max 160 characters)", + "Buono": "Good", + "CMS": "CMS", + "CSRF Fallito": "CSRF Failed", + "CSRF non valido.": "Invalid CSRF token.", + "CSS Personalizzato": "Custom CSS", + "CSV": "CSV", + "Calendario eventi": "Events calendar", + "Call to Action": "Call to Action", + "Call to Action (CTA)": "Call to Action (CTA)", + "Cambia lingua": "Change language", + "Cambia password": "Change password", + "Campo": "Field", + "Campo %s obbligatorio": "%s field required", + "Campo Obbligatorio": "Required Field", + "Campo obbligatorio": "Required field", + "Campo obbligatorio mancante: %s": "Missing required field: %s", + "Cancella filtri": "Clear filters", + "Cancella tutti i filtri": "Clear all filters", + "Caratteristica": "Feature", + "Carica": "Upload", + "Carica %{smart_count} file": "Upload %{smart_count} file", + "Carica Altri": "Load More", + "Carica File CSV": "Upload CSV File", + "Carica File JSON": "Upload JSON File", + "Carica Nuovo File JSON": "Upload New JSON File", + "Carica Plugin": "Upload Plugin", + "Carica il file JSON di traduzione (opzionale)": "Upload the translation JSON file (optional)", + "Carica il file usando l'uploader": "Upload the file using the uploader", + "Carica logo (PNG, JPG, SVG)": "Upload logo (PNG, JPG, SVG)", + "Carica o collega eBook (PDF/ePub) e audiobook (MP3/M4A) per renderli disponibili agli utenti.": "Upload or link eBooks (PDF/ePub) and audiobooks (MP3/M4A) to make them available to users.", + "Carica un file CSV per importare più libri contemporaneamente": "Upload a CSV file to import multiple books at once", + "Carica un file ZIP contenente il plugin. Il file deve includere un %s con le informazioni del plugin.": "Upload a ZIP file containing the plugin. The file must include a %s with the plugin information.", + "Carica un nuovo file per aggiornare le traduzioni (opzionale). Verrà creato un backup del file precedente.": "Upload a new file to update translations (optional). A backup of the previous file will be created.", + "Caricamento .env...": "Loading .env...", + "Caricamento categorie...": "Loading categories...", + "Caricamento completato": "Upload completed", + "Caricamento condizionale:": "Conditional loading:", + "Caricamento fallito": "Upload failed", + "Caricamento file...": "Uploading file...", + "Caricamento in corso...": "Uploading...", + "Caricamento libri...": "Loading books...", + "Caricamento non riuscito. Riprova.": "Upload failed. Please try again.", + "Caricamento...": "Loading...", + "Caroselli Generi": "Genre Carousels", + "Casa Editrice": "Publisher", + "Case editrici": "Publishing houses", + "Catalogo": "Catalog", + "Catalogo Completo Libri - Biblioteca Digitale": "Complete Book Catalog - Digital Library", + "Catalogo Libri": "Book Catalog", + "Catalogo Libri - Biblioteca": "Book Catalog - Library", + "Catalogo libri": "Book Catalog", + "Català (CA)": "Catalan (CA)", + "Categoria": "Category", + "Categorie": "Categories", + "Categorie Cookie": "Cookie Categories", + "Centro Impostazioni": "Settings Center", + "Cerca": "Search", + "Cerca IP...": "Search IP...", + "Cerca Libri": "Search Books", + "Cerca Libro": "Search Book", + "Cerca Utente": "Search User", + "Cerca autore...": "Search author...", + "Cerca codice o nome...": "Search code or name...", + "Cerca autori esistenti o aggiungine di nuovi...": "Search for existing authors or add new ones...", + "Cerca editore esistente o inserisci nuovo...": "Search for existing publisher or enter new...", + "Cerca editore...": "Search publisher...", + "Cerca email...": "Search email...", + "Cerca genere...": "Search genre...", + "Cerca icona... (es. user, home, book)": "Search icon... (e.g. user, home, book)", + "Cerca libri, autori, editori, utenti...": "Search books, authors, publishers, users...", + "Cerca libri, autori, editori...": "Search books, authors, publishers...", + "Cerca libri, autori...": "Search books, authors...", + "Cerca libri, autori, ISBN...": "Search books, authors, ISBN...", + "Cerca libri...": "Search books...", + "Cerca nella biblioteca": "Search the library", + "Cerca per ISBN-10": "Search by ISBN-10", + "Cerca per ISBN-13": "Search by ISBN-13", + "Cerca per codice EAN": "Search by EAN code", + "Cerca per nome autore (corrispondenza parziale)": "Search by author name (partial match)", + "Cerca per nome, cognome, telefono, email o tessera": "Search by name, surname, phone, email or card", + "Cerca per nome...": "Search by name...", + "Cerca per pseudonimo...": "Search by pseudonym...", + "Cerca pseudonimo...": "Search pseudonym...", + "Cerca per titolo o sottotitolo": "Search by title or subtitle", + "Cerca per titolo o stato (es. disponibile)": "Search by title or status (e.g. available)", + "Cerca posizione...": "Search location...", + "Cerca rapido...": "Quick search...", + "Cerca testo": "Search text", + "Cerca titoli": "Search Titles", + "Cerca titoli, autori, ISBN...": "Search titles, authors, ISBN...", + "Cerca:": "Search:", + "Chi Siamo": "About Us", + "Chiave": "Key", + "Chiave API Google Books": "Google Books API key", + "Chiave Google Books aggiornata.": "Google Books key updated.", + "Chiave Google Books rimossa.": "Google Books key removed.", + "Chiave Google Books salvata correttamente.": "Google Books key saved successfully.", + "Chiave Route": "Route Key", + "Chiedi al tuo amministratore di database di eseguire i comandi contenuti nel file": "Ask your database administrator to execute the commands contained in the file", + "Chiudi": "Close", + "Chiudi Player": "Close Player", + "Chiudi menu": "Close menu", + "Chiudi alternative": "Close alternatives", + "Citazione": "Quote", + "Città": "City", + "Classe (000-900)": "Class (000-900)", + "Classificazione Dewey": "Dewey Classification", + "Classi principali": "Main classes", + "classe principale": "main class", + "Clicca o trascina per caricare un logo": "Click or drag to upload a logo", + "Clicca per selezionare": "Click to select", + "Clicca su \"Esegui Manutenzione\" per correggere automaticamente i problemi riparabili.": "Click \"Run Maintenance\" to automatically fix repairable issues.", + "Clicca su 'Aggiungi Lingua'": "Click on 'Add Language'", + "Clicca su \\": "Click on \\", + "Clicca su un'icona per selezionarla": "Click on an icon to select it", + "Codice": "Code", + "Codice *": "Code *", + "Codice CSS": "CSS Code", + "Codice CSS da applicare a tutte le pagine del frontend": "CSS code to apply to all frontend pages", + "Codice Dewey selezionato:": "Selected Dewey code:", + "Codice Fiscale": "Tax ID", + "Codice ISBN o EAN": "ISBN or EAN Code", + "Codice ISO 2 lettere (es: IT, FR, GB)": "ISO 2-letter code (e.g. IT, FR, GB)", + "Codice JavaScript": "JavaScript Code", + "Codice JavaScript Analytics": "Analytics JavaScript Code", + "Codice Lingua": "Language Code", + "Codice Tessera": "Card Number", + "Codice Tessera:": "Membership Code:", + "Codice embed completo": "Full embed code", + "Codice fiscale": "Tax code", + "Codice fiscale dell'editore (opzionale)": "Publisher's tax code (optional)", + "Codice fiscale italiano (opzionale)": "Italian tax ID (optional)", + "Codice postale...": "ZIP code...", + "Codice tessera": "Card Code", + "Cognome": "Last Name", + "Collana": "Series", + "Collocazione": "Location", + "Collocazione calcolata": "Calculated location", + "Collocazione suggerita": "Suggested location", + "Segui l'installazione guidata per completare la configurazione.": "Follow the guided installation to complete the configuration.", + "Come Funziona": "How It Works", + "Come ottenere il codice": "How to get the code", + "Commento": "Comment", + "Compila con i dati dei tuoi libri": "Fill in with your book data", + "Compila i dettagli del libro per aggiungerlo alla biblioteca": "Fill in the book details to add it to the library", + "Compila i dettagli dell'autore per aggiungerlo alla biblioteca": "Fill in the author details to add them to the library", + "Compila i dettagli della casa editrice per aggiungerla alla biblioteca": "Fill in the publishing house details to add it to the library", + "Compila tutti i campi obbligatori prima di salvare.": "Fill in all required fields before saving.", + "Compila tutti i campi per creare una nuova prenotazione": "Fill in all fields to create a new reservation", + "Compila tutti i campi richiesti": "Fill in all required fields", + "Compila nome e URL per tutti i server.": "Fill in name and URL for all servers.", + "Completamento": "Completion", + "Completata": "Completed", + "Completati": "Completed", + "Completato": "Completed", + "Completato!": "Completed!", + "Complimenti!": "Congratulations!", + "Componente": "Component", + "Con valore 3, un prestito che scade il 15 Gennaio riceverà l'avviso il 12 Gennaio": "With value 3, a loan expiring on January 15 will receive the notice on January 12", + "Condividi": "Share", + "Condividi la tua opinione su questo libro...": "Share your opinion about this book...", + "Condividi su Facebook": "Share on Facebook", + "Condividi su Twitter": "Share on Twitter", + "Condividi su WhatsApp": "Share on WhatsApp", + "Condiviso": "Shared", + "Condizioni": "Conditions", + "Consegna immediata": "Immediate delivery", + "Conferma": "Confirm", + "Conferma Aggiornamento": "Confirm Update", + "Conferma aggiornamento": "Confirm update", + "Controlla Aggiornamenti": "Check for Updates", + "Controllo aggiornamenti": "Checking for updates", + "Crea Backup Manuale": "Create Manual Backup", + "Creazione backup database": "Creating database backup", + "Creazione backup...": "Creating backup...", + "Creare backup?": "Create backup?", + "Cronologia Aggiornamenti": "Update History", + "Conferma Annullamento": "Confirm Cancellation", + "Conferma Disinstallazione": "Confirm Uninstallation", + "Conferma eliminazione": "Confirm deletion", + "Conferma Password": "Confirm Password", + "Conferma Salvataggio": "Confirm Save", + "Conferma la tua email": "Confirm your email", + "Conferma modifica": "Confirm change", + "Conferma password": "Confirm password", + "Conferma restituzione": "Confirm return", + "Confermi l'eliminazione dell'editore?": "Confirm publisher deletion?", + "Confermi l'operazione?": "Confirm the operation?", + "Confermi?": "Confirm?", + "Configura Google Books": "Configure Google Books", + "Configura i testi mostrati all'interno del pannello delle preferenze dei cookie.": "Configure the texts shown inside the cookie preferences panel.", + "Configura i testi visualizzati agli utenti in ogni parte del cookie banner.": "Configure the texts displayed to users in every part of the cookie banner.", + "Configura i testi visualizzati agli utenti nel banner iniziale.": "Configure the texts displayed to users in the initial banner.", + "Configura l'identità dell'applicazione, i metodi di invio email e personalizza i template delle notifiche automatiche.": "Configure application identity, email sending methods and customize automatic notification templates.", + "Configura le date della prenotazione": "Configure reservation dates", + "Configura le impostazioni email per l'invio di notifiche agli utenti.": "Configure email settings for sending notifications to users.", + "Configura le impostazioni rimanenti (privacy, contatti, etc.)": "Configure the remaining settings (privacy, contacts, etc.)", + "Configura quando inviare l'avviso di scadenza prestiti agli utenti": "Configure when to send loan expiry warning to users", + "Configurazione": "Configuration", + "Configurazione Cron Job": "Cron Job Configuration", + "Configurazione Database": "Database Configuration", + "Configurazione Email": "Email Configuration", + "Configurazione Etichette Libri": "Book Labels Configuration", + "Configurazione SMTP": "SMTP Configuration", + "Configurazione del banner cookie": "Cookie banner configuration", + "Configurazione guidata in pochi passaggi.": "Guided configuration in a few steps.", + "Configurazione invio": "Sending Configuration", + "Configurazione sistema": "System configuration", + "Connessione al database fallita": "Database connection failed", + "Connessione fallita": "Connection failed", + "Connesso": "Connected", + "Conserva queste informazioni in un luogo sicuro!": "Keep this information in a safe place!", + "Consigliato": "Recommended", + "Consigliato JPG o PNG ad alta risoluzione (min 1920x1080px). Max 5MB.": "Recommended high-resolution JPG or PNG (min 1920x1080px). Max 5MB.", + "Consigliato JPG, PNG o WebP (min 800x600px). Max 5MB.": "Recommended JPG, PNG or WebP (min 800x600px). Max 5MB.", + "Consigliato PNG o SVG con sfondo trasparente. Dimensione massima 2MB.": "Recommended PNG or SVG with transparent background. Maximum size 2MB.", + "Consigliato: 150-160 caratteri": "Recommended: 150-160 characters", + "Consigliato: 50-60 caratteri": "Recommended: 50-60 characters", + "Consigliato: PHP mail() per semplicità, SMTP per maggiore controllo": "Recommended: PHP mail() for simplicity, SMTP for more control", + "Contatta il tuo provider di hosting e chiedi di eseguire": "Contact your hosting provider and ask them to run", + "Contattaci": "Contact Us", + "Contatti": "Contacts", + "Contatti e accesso": "Contacts and Access", + "Contenuti Digitali": "Digital Content", + "Contenuti homepage aggiornati con successo!": "Homepage content updated successfully!", + "Contenuto": "Content", + "Contenuto Cookie Policy": "Cookie Policy Content", + "Contenuto Pagina": "Page Content", + "Contenuto Privacy Policy": "Privacy Policy Content", + "Contenuto Testuale": "Text Content", + "Contenuto della pagina /cookies accessibile dal banner": "Content of /cookies page accessible from banner", + "Contenuto pagina": "Page content", + "Contenuto testuale HTML con editor avanzato": "HTML text content with advanced editor", + "Continua": "Continue", + "Cookie Analitici": "Analytics Cookies", + "Cookie Banner": "Cookie Banner", + "Cookie Essenziali": "Essential Cookies", + "Cookie di Marketing": "Marketing Cookies", + "Cookies": "Cookies", + "Copertina": "Cover", + "Copertina Attuale": "Current Cover", + "Copertina attuale": "Current cover", + "Copertina del Libro": "Book Cover", + "Copertina del libro": "Book cover", + "Copertina recuperata automaticamente": "Cover automatically retrieved", + "Copia": "Copy", + "Copia link negli appunti": "Copy link to clipboard", + "Copiato!": "Copied!", + "Copie": "Copies", + "Copie Aggiunte!": "Copies Added!", + "Copie Disponibili": "Available Copies", + "Copie Eccessive": "Excess Copies", + "Copie Fisiche": "Physical Copies", + "Copie Negative": "Negative Copies", + "Copie Totali": "Total Copies", + "Copie disponibili:": "Available copies:", + "Copie totali:": "Total copies:", + "Copyright": "Copyright", + "Corpo Email": "Email Body", + "Corpo email": "Email body", + "Correggi Permessi Automaticamente": "Fix Permissions Automatically", + "Corrente": "Current", + "Correzione Automatica Permessi": "Auto-fix Permissions", + "Correzione Manuale via SSH (se automatica fallisce)": "Manual Fix via SSH (if automatic fails)", + "Correzione parziale:": "Partial fix:", + "Correzioni applicate: %d record aggiornati": "Corrections applied: %d records updated", + "Cos'è la Collocazione?": "What is Location?", + "Cosa fare:": "What to do:", + "Cosa ne pensi di questo libro?": "What do you think about this book?", + "Cosa sono le Route?": "What are Routes?", + "Cosa viene nascosto:": "What will be hidden:", + "Crea": "Create", + "Crea API Key": "Create API Key", + "Crea Admin": "Create Admin", + "Crea Evento": "Create Event", + "Crea Nuova API Key": "Create New API Key", + "Crea Nuova Prenotazione": "Create New Reservation", + "Crea Nuovo Evento": "Create New Event", + "Crea Nuovo Genere": "Create New Genre", + "Crea Nuovo Prestito": "Create New Loan", + "Crea Prenotazione": "Create Reservation", + "Crea Prestito": "Create Loan", + "Crea Prima API Key": "Create First API Key", + "Crea Primo Genere": "Create First Genre", + "Crea Utente Admin": "Create Admin User", + "Crea Utente Amministratore": "Create Administrator User", + "Crea e gestisci gli eventi della biblioteca": "Create and manage library events", + "Crea gli scaffali (es: A, B, C)": "Create shelves (e.g.: A, B, C)", + "Crea il primo utente amministratore. Questo account avrà accesso completo a tutte le funzionalità del sistema.": "Create the first administrator user. This account will have full access to all system features.", + "Crea il tuo primo evento": "Create your first event", + "Crea la cartella logs se non esiste: mkdir -p logs": "Create the logs folder if it doesn't exist: mkdir -p logs", + "Crea nuovo": "Create new", + "Crea nuovo \"${item.label}\"": "Create new \"${item.label}\"", + "Crea un nuovo account": "Create a new account", + "Crea un nuovo profilo amministratore o lettore.": "Create a new administrator or reader profile.", + "Creata:": "Created:", + "Creato il": "Created on", + "Credenziali Admin:": "Admin Credentials:", + "Credenziali Errate": "Invalid Credentials", + "Crediti": "Credits", + "Crescente": "Ascending", + "Crittografia": "Encryption", + "Cronologia": "History", + "Da": "From", + "Da Inventariare": "To Be Inventoried", + "Da approvare": "To approve", + "Da consegnare": "To deliver", + "Da creare": "To be created", + "Da prenotazione": "From reservation", + "Da prenotazioni": "From reservations", + "Da %s (%s)": "From %s (%s)", + "Da qui puoi gestire tutte le lingue disponibili nell'applicazione. Carica file JSON di traduzione e abilita/disabilita lingue.": "From here you can manage all available languages in the application. Upload JSON translation files and enable/disable languages.", + "Dal": "From", + "Dal %s al %s": "From %s to %s", + "Dal:": "From:", + "Danneggiato": "Damaged", + "Dansk (DA)": "Danish (DA)", + "Dashboard": "Dashboard", + "Data": "Date", + "Data Acq.": "Acq. Date", + "Data Acquisizione": "Acquisition Date", + "Data Evento": "Event Date", + "Data Fine": "End Date", + "Data Inizio": "Start Date", + "Data Prenotazione": "Reservation Date", + "Data Prestito": "Loan Date", + "Data Prestito:": "Loan Date:", + "Data Pubblicazione": "Publication Date", + "Data Restituzione:": "Return Date:", + "Data Scadenza": "Due Date", + "Data Scadenza:": "Due Date:", + "Data acquisizione": "Acquisition date", + "Data acquisizione a": "Acquisition date to", + "Data acquisizione da": "Acquisition date from", + "Data di Pubblicazione": "Publication Date", + "Data di inizio della prenotazione (default: oggi)": "Reservation start date (default: today)", + "Data di morte": "Date of Death", + "Data di nascita": "Date of Birth", + "Data di pubblicazione": "Publication date", + "Data di scadenza della prenotazione (default: +30 giorni)": "Reservation expiry date (default: +30 days)", + "Data fine": "End date", + "Data inizio": "Start date", + "Data inizio richiesta mancante": "Request start date missing", + "Data morte a": "Death date to", + "Data morte da": "Death date from", + "Data nascita a": "Birth date to", + "Data nascita da": "Birth date from", + "Data originale di pubblicazione (formato italiano)": "Original publication date (Italian format)", + "Data prestito": "Loan date", + "Data prestito (A)": "Loan date (To)", + "Data prestito (Da)": "Loan date (From)", + "Data pubblicazione da": "Publication date from", + "Data scadenza prevista": "Expected due date", + "Data:": "Date:", + "Database installato (30 tabelle)": "Database installed (30 tables)", + "Database:": "Database:", + "Date": "Dates", + "Date Non Valide": "Invalid Dates", + "Dati Account": "Account Data", + "Dati bibliografici completi (titolo, sottotitolo, ISBN, EAN, ecc.)": "Complete bibliographic data (title, subtitle, ISBN, EAN, etc.)", + "Dati della Prenotazione": "Reservation Details", + "Dati essenziali caricati": "Essential data loaded", + "Database installato (41 tabelle)": "Database installed (41 tables)", + "Dati iniziali importati OK": "Initial data imported OK", + "Dati mancanti": "Missing data", + "Dati personali": "Personal data", + "Dati Utente": "User Details", + "Debug": "Debug", + "Debug Log:": "Debug Log:", + "Deceduto il %s": "Died on %s", + "Decrescente": "Descending", + "Default: un mese dopo la data inizio": "Default: one month after start date", + "Definisce i privilegi dell'utente.": "Defines user privileges.", + "Demo": "Demo", + "Deseleziona tutti": "Deselect all", + "Decimali": "Decimals", + "Descrivi l'utilizzo di questa API key...": "Describe the usage of this API key...", + "Descrizione": "Description", + "Descrizione Banner": "Banner Description", + "Descrizione Evento": "Event Description", + "Descrizione Modale": "Modal Description", + "Descrizione OG": "OG Description", + "Descrizione Open Graph": "Open Graph Description", + "Descrizione SEO": "SEO Description", + "Descrizione Twitter": "Twitter Description", + "Descrizione banner": "Banner description", + "Descrizione breve": "Short description", + "Descrizione completa dell'evento con possibilità di formattazione HTML": "Full event description with HTML formatting options", + "Descrizione cookie analitici": "Analytics cookies description", + "Descrizione cookie essenziali": "Essential cookies description", + "Descrizione cookie marketing": "Marketing cookies description", + "Descrizione del libro...": "Book description...", + "Descrizione footer": "Footer description", + "Descrizione modale": "Modal description", + "Descrizione nella modale preferenze. Puoi usare HTML.": "Description in the preferences modal. You can use HTML.", + "Descrizione per anteprima social. Se vuoto, usa la descrizione SEO.": "Description for social preview. If empty, uses the SEO description.", + "Descrizione troppo lunga (max 2000 caratteri)": "Description too long (max 2000 characters)", + "Descrizione:": "Description:", + "Dettagli": "Details", + "Dettagli Acquisizione": "Acquisition Details", + "Dettagli Fisici": "Physical Details", + "Dettagli Libro": "Book Details", + "Dettagli Messaggio": "Message Details", + "Dettagli del Prestito": "Loan Details", + "Dettagli evento": "Event details", + "Dettagli principali dell'evento": "Main event details", + "Dettagli restituzione": "Return details", + "Deutsch (DE)": "German (DE)", + "Deve contenere maiuscole, minuscole e numeri": "Must contain uppercase, lowercase and numbers", + "Deve iniziare con": "Must start with", + "Devi accettare la Privacy Policy per procedere": "You must accept the Privacy Policy to proceed", + "Devi eseguire": "You must run", + "Dewey": "Dewey", + "Dimensione": "Size", + "Dimensioni": "Dimensions", + "Dipendenze": "Dependencies", + "Directory plugin già esistente.": "Plugin directory already exists.", + "Disabilita": "Disable", + "Disabilita se il tuo sito non usa cookie analitici (es. Google Analytics)": "Disable if your site doesn't use analytics cookies (e.g. Google Analytics)", + "Disabilita se il tuo sito non usa cookie di marketing/advertising": "Disable if your site doesn't use marketing/advertising cookies", + "Disabilitata - Nascosta nel frontend": "Disabled - Hidden in frontend", + "Disabilitata": "Disabled", + "Disabilita prestiti, prenotazioni e wishlist. Gli utenti potranno solo consultare il catalogo.": "Disable loans, reservations and wishlist. Users will only be able to browse the catalogue.", + "Disabilita tutte le funzionalità di prestito e prenotazione": "Disable all loan and reservation features", + "Disabilitato": "Disabled", + "Disattiva": "Deactivate", + "Disattiva modalità manutenzione": "Disable maintenance mode", + "Disattivata": "Inactive", + "Discografia": "Discography", + "Disconnesso": "Disconnected", + "Disinstalla": "Uninstall", + "Divisioni": "Divisions", + "Disponibile": "Available", + "Disponibile dal:": "Available from:", + "Disponibile ora": "Available Now", + "Disponibile per il prestito.": "Available for loan.", + "Disponibile solo con driver SMTP": "Available only with SMTP driver", + "Disponibili": "Available", + "Disponibili e in prestito": "Available and on loan", + "Disponibilità": "Availability", + "Disponibilità copie": "Copy availability", + "Divisione (010-990)": "Division (010-990)", + "Documentazione": "Documentation", + "Documentazione API": "API Documentation", + "Documento": "Document", + "Documento generato il %s alle %s": "Document generated on %s at %s", + "Donazione": "Donation", + "Dopo la conferma, un amministratore approverà la tua iscrizione.": "After confirmation, an administrator will approve your registration.", + "Dopo la rigenerazione, invia l'URL della sitemap a Google Search Console e Bing Webmaster Tools": "After regeneration, submit sitemap URL to Google Search Console and Bing Webmaster Tools", + "Driver": "Driver", + "Driver Email": "Email Driver", + "EAN": "EAN", + "EAN:": "EAN:", + "ERRORE:": "ERROR:", + "Eccellente": "Excellent", + "Editor Classificazione Dewey": "Dewey Classification Editor", + "Editore": "Publisher", + "Editore \"${item.label}\" selezionato": "Publisher \"${item.label}\" selected", + "Editore \"${value}\" pronto per essere creato": "Publisher \"${value}\" ready to be created", + "Editore \"%s\" pronto per essere creato": "Publisher \"%s\" ready to be created", + "Editore \"%s\" selezionato": "Publisher \"%s\" selected", + "Editore eliminato con successo.": "Publisher deleted successfully.", + "Editore sconosciuto": "Unknown publisher", + "Editore selezionato:": "Selected publisher:", + "Editore trovato:": "Publisher found:", + "Editore:": "Publisher:", + "Editore: %s": "Publisher: %s", + "Editori": "Publishers", + "Editori uniti": "Publishers merged", + "Editori uniti con successo": "Publishers merged successfully", + "Editore principale": "Primary publisher", + "Edizione": "Edition", + "Elaborato da": "Processed by", + "Elementi": "Items", + "Elenco Autori": "Authors List", + "Elenco Autori - Biblioteca": "Author List - Library", + "Elenco Editori": "Publishers List", + "Elenco Editori - Biblioteca": "Publisher List - Library", + "Elenco Libri": "Books List", + "Elenco Libri - Biblioteca": "Book List - Library", + "Elenco Prestiti": "Loans List", + "Elenco Utenti": "Users List", + "Elenco Utenti - Biblioteca": "Users List - Library", + "Elimina": "Delete", + "Elimina Installer": "Delete Installer", + "Elimina Installer (Richiede Composer)": "Delete Installer (Requires Composer)", + "Elimina Lingua": "Delete Language", + "Elimina copia": "Delete copy", + "Elimina il file .installed dalla root del progetto e riprova": "Delete the .installed file from the project root and try again", + "Elimina questa lingua. Questa azione non può essere annullata.": "Delete this language. This action cannot be undone.", + "Eliminare il libro?": "Delete book?", + "Eliminare l'utente?": "Delete the user?", + "Eliminare questa mensola? (Solo se vuota)": "Delete this shelf? (Only if empty)", + "Eliminare questo scaffale? (Solo se vuoto)": "Delete this bookcase? (Only if empty)", + "Eliminato!": "Deleted!", + "Eliminati": "Deleted", + "Email": "Email", + "Email *": "Email *", + "Email Contatto": "Contact Email", + "Email Non Valida": "Invalid Email", + "Email Non Verificata": "Unverified Email", + "Email Referente": "Contact Person Email", + "Email associata al tuo account": "Email associated with your account", + "Email configurata": "Email configured", + "Email di contatto": "Contact email", + "Email di recupero inviata con successo!": "Recovery email sent successfully!", + "Email dove ricevere i messaggi dal form contatti": "Email where to receive messages from contact form", + "Email e telefono visibili sulla pagina contatti": "Email and phone visible on contact page", + "Email già registrata": "Email already registered", + "Email non trovata nel nostro sistema": "Email not found in our system", + "Email non valida. Verifica il formato": "Invalid email. Check the format", + "Email non verificata. Controlla la tua casella di posta e clicca sul link di verifica": "Email not verified. Check your inbox and click the verification link", + "Email o password non corretti. Verifica le credenziali e riprova": "Email or password incorrect. Check your credentials and try again", + "Email per notifiche": "Email for notifications", + "Email troppo lunga (massimo 255 caratteri)": "Email too long (maximum 255 characters)", + "Email utente": "User email", + "Email:": "Email:", + "Embed della mappa (Google Maps o OpenStreetMap). Puoi inserire l'URL o il codice iframe completo.": "Map embed (Google Maps or OpenStreetMap). You can insert the URL or full iframe code.", + "Emoji Bandiera": "Flag Emoji", + "Emoji della bandiera del paese (opzionale)": "Country flag emoji (optional)", + "Emoji della bandiera del paese (opzionale, default: 🌐)": "Country flag emoji (optional, default: 🌐)", + "Encryption": "Encryption", + "Endpoint": "Endpoint", + "Es. Italiana...": "E.g. Italian...", + "Es. Milano...": "E.g. Milan...", + "English (EN)": "English (EN)", + "Errore": "Error", + "Errore Installazione": "Installation Error", + "Errore Upload": "Upload Error", + "Errore caricamento Audiobook": "Audiobook upload error", + "Errore caricamento classificazione Dewey": "Error loading Dewey classification", + "Errore caricamento eBook": "eBook upload error", + "Errore database:": "Database error:", + "Errore del Server": "Server Error", + "Errore del database": "Database error", + "Errore del database durante la registrazione. Riprova più tardi": "Database error during registration. Please try again later", + "Errore del server": "Server error", + "Errore del server. Riprova più tardi.": "Server error. Please try again later.", + "Errore di comunicazione con il server": "Server communication error", + "Errore di configurazione del server.": "Server configuration error.", + "Errore di configurazione.": "Configuration error.", + "Errore di connessione": "Connection error", + "Errore di connessione durante l'importazione": "Connection error during import", + "Errore di connessione:": "Connection error:", + "Errore di salvataggio": "Save error", + "Errore di sicurezza": "Security error", + "Errore di sicurezza, riprova": "Security error, try again", + "Errore di sicurezza. Aggiorna la pagina e riprova": "Security error. Refresh the page and try again", + "Errore di sicurezza. Ricarica la pagina e riprova.": "Security error. Reload the page and try again.", + "Errore di sistema.": "System error.", + "Errore durante il caricamento dei dettagli del plugin.": "Error loading plugin details.", + "Errore durante il caricamento del file (code: %s).": "Error uploading file (code: %s).", + "Errore durante il caricamento del file.": "Error during file upload.", + "Errore durante il ricalcolo:": "Error during recalculation:", + "Errore durante il rifiuto": "Error during rejection", + "Errore durante il salvataggio": "Error while saving", + "Errore durante il salvataggio delle impostazioni:": "Error saving settings:", + "Errore durante il salvataggio nel database.": "Error saving to database.", + "Errore durante il salvataggio.": "Error during save.", + "Errore durante il salvataggio:": "Error during save:", + "Errore durante il seed": "Error during seed", + "Errore durante l'aggiornamento": "Error during update", + "Errore durante l'aggiornamento dell'evento.": "Error updating event.", + "Errore durante l'aggiornamento della chiave Google Books.": "Error updating Google Books key.", + "Errore durante l'approvazione": "Error during approval", + "Errore durante l'attivazione del plugin.": "Error activating plugin.", + "Errore durante l'attivazione: %s": "Error during activation: %s", + "Errore durante l'eliminazione dell'evento.": "Error deleting event.", + "Errore durante l'estrazione del plugin.": "Error extracting plugin.", + "Errore durante l'import: %s": "Import error: %s", + "Errore durante l'importazione (HTTP %d)": "Import error (HTTP %d)", + "Errore durante l'importazione dati": "Error during data import", + "Errore durante l'installazione del plugin.": "Error installing plugin.", + "Errore durante l'installazione:": "Error during installation:", + "Errore durante l'installazione: %s": "Error during installation: %s", + "Errore durante l'invio dell'email. Riprova più tardi": "Error sending the email. Please try again later", + "Errore durante l'unione degli autori": "Error merging authors", + "Errore durante l'unione degli editori": "Error merging publishers", + "Errore imprevisto durante l'unione degli autori": "Unexpected error merging authors", + "Errore imprevisto durante l'unione degli editori": "Unexpected error merging publishers", + "Errore durante l'upload.": "Upload error.", + "Errore durante la correzione:": "Error during correction:", + "Errore durante la creazione del prestito.": "Error creating the loan.", + "Errore durante la creazione dell'evento.": "Error creating event.", + "Errore durante la creazione dell'utente:": "Error during user creation:", + "Errore durante la disattivazione del plugin.": "Error during plugin deactivation.", + "Errore durante la disattivazione: %s": "Error during deactivation: %s", + "Errore durante la disinstallazione del plugin.": "Error during plugin uninstallation.", + "Errore durante la finalizzazione:": "Error during finalization:", + "Errore durante la manutenzione:": "Error during maintenance:", + "Errore durante la registrazione": "Registration error", + "Errore durante la ricerca su": "Error during search on", + "Errore durante la rimozione dal database.": "Error removing from database.", + "Errore interno del database. Riprova più tardi.": "Internal database error. Please try again later.", + "Errore interno durante l'approvazione": "Internal error during approval", + "Errore interno: %s": "Internal error: %s", + "Errore nel caricamento dei libri": "Error loading books", + "Errore nel caricamento del file": "Error while uploading the file", + "Aggiunge badge cliccabili alla scheda libro per cercare su Anna's Archive, Z-Library e Project Gutenberg con un click. Ispirato all'estensione browser GoodLib.": "Adds clickable badges to the book detail page to search on Anna's Archive, Z-Library, and Project Gutenberg in one click. Inspired by the GoodLib browser extension.", + "Anna's Archive": "Anna's Archive", + "Catalogo pubblico": "Public catalog", + "Configura Fonti": "Configure Sources", + "Domini mirror": "Mirror domains", + "Dominio non valido. Inserisci solo host o host:porta, senza percorsi.": "Invalid domain. Enter only host or host:port, without paths.", + "Dominio personalizzato...": "Custom domain...", + "Errore durante l'aggiornamento del profilo.": "Error updating profile.", + "Cerca su:": "Search on:", + "Predefinita del sito": "Site default", + "Cerca \"%s\" su %s": "Search \"%s\" on %s", + "Fonti attive": "Active sources", + "GoodLib — External Sources": "GoodLib — External Sources", + "GoodLib — Fonti Esterne": "GoodLib — External Sources", + "Impostazioni GoodLib salvate correttamente.": "GoodLib settings saved successfully.", + "Mostra badge nella pagina dettaglio libro": "Show badges on the book detail page", + "Mostra badge nell'area amministrazione": "Show badges in the admin area", + "Mostra i badge nella pagina dettaglio libro del catalogo": "Show badges on the catalog book detail page", + "Mostra i badge nella scheda libro dell'area amministrazione": "Show badges on the admin book page", + "Project Gutenberg": "Project Gutenberg", + "Puoi scegliere un mirror suggerito oppure selezionare dominio personalizzato.": "You can choose a suggested mirror or select a custom domain.", + "Puoi usare i mirror suggeriti oppure inserire un dominio custom.": "You can use the suggested mirrors or enter a custom domain.", + "Questi siti cambiano dominio spesso. Seleziona un mirror funzionante.": "These sites often change domain. Select a working mirror.", + "Scheda libro admin": "Admin book page", + "Sono accettati anche domini personalizzati; se incolli un URL completo verrà salvato solo l'host.": "Custom domains are also accepted; if you paste a full URL, only the host will be saved.", + "Visibilita": "Visibility", + "Visibilità": "Visibility", + "Z-Library": "Z-Library", + "Errore nel caricamento del file JSON": "Error loading JSON file", + "Errore nel caricamento. Riprova.": "Error loading. Please try again.", + "Errore nel download della copertina.": "Error downloading the cover.", + "Errore nel recupero delle categorie.": "Error fetching the categories.", + "Errore nel recupero delle divisioni.": "Error fetching the divisions.", + "Errore nel recupero delle specifiche.": "Error fetching the specific sections.", + "Errore nel rifiuto": "Error in rejection", + "Errore nel rifiuto della richiesta": "Error while rejecting the request", + "Errore nel salvataggio dell'immagine.": "Error saving the image.", + "Errore nel salvataggio dell'ordine. Ricarica la pagina e riprova.": "Error saving order. Please reload the page and try again.", + "Errore nell'aggiornamento del template": "Error updating template", + "Errore nell'aggiornamento dello stato dell'API key: %s": "Error updating API key status: %s", + "Errore nell'aggiornamento:": "Error updating:", + "Errore nell'aggiornare i preferiti.": "Error updating favorites.", + "Errore nell'approvazione": "Error in approval", + "Errore nell'eliminazione dell'API key: %s": "Error deleting API key: %s", + "Errore nell'eliminazione:": "Error deleting:", + "Errore nell'operazione:": "Error in operation:", + "Errore nella Verifica dell'Installazione": "Installation Verification Error", + "Errore nella comunicazione con il server": "Server communication error", + "Errore nella copia:": "Copy error:", + "Errore nella copia: ": "Copy error: ", + "Errore nella creazione del genere.": "Error while creating the genre.", + "Errore nella creazione dell'API key: %s": "Error creating API key: %s", + "Errore nella creazione della recensione": "Error creating review", + "Errore nella creazione della richiesta di prestito": "Error creating loan request", + "Errore nella creazione:": "Error creating:", + "Errore nella prenotazione": "Reservation error", + "Errore nella query.": "Query error.", + "Errore nella ricerca": "Search error", + "Errore suggerimento": "Suggestion error", + "Errore!": "Error!", + "Errore:": "Error:", + "Errore: ": "Error: ", + "Errore: Utente non trovato": "Error: User not found", + "Errore: la data di scadenza deve essere successiva alla data di prestito.": "Error: the due date must be after the loan date.", + "Errore: tutti i campi obbligatori devono essere compilati.": "Error: all required fields must be filled.", + "Errori durante l'import": "Import Errors", + "Errori di validazione dopo il merge.": "Validation errors after merge.", + "Es. Biblioteca Digitale - Migliaia di libri da esplorare": "E.g. Digital Library - Thousands of books to explore", + "Es. Esplora migliaia di libri, prenota online e gestisci i tuoi prestiti.": "E.g. Explore thousands of books, book online and manage your loans.", + "Es. Italiana, Americana, Francese...": "E.g. Italian, American, French...", + "Es. Italiana, Americana...": "E.g. Italian, American...", + "Es. La Tua Biblioteca Digitale": "E.g. Your Digital Library", + "Es. Presentazione libro \"Il Nome della Rosa\"": "E.g. Book presentation \"The Name of the Rose\"", + "Es. Scopri il nostro catalogo digitale con migliaia di libri disponibili per il prestito. Registrati gratuitamente e inizia a leggere oggi stesso.": "E.g. Discover our digital catalog with thousands of books available for loan. Register for free and start reading today.", + "Es. Un libro fantastico!": "E.g. An amazing book!", + "Es. Un libro straordinario!": "E.g. An extraordinary book!", + "Es. biblioteca digitale, prestito libri, catalogo online, libri gratis": "E.g. digital library, book loan, online catalog, free books", + "Es. https://tuosito.com": "E.g. https://yoursite.com", + "Es. https://tuosito.com/uploads/og-image.jpg": "E.g. https://yoursite.com/uploads/og-image.jpg", + "Esci": "Logout", + "Esecuzione ogni 30 minuti (consigliato)": "Execute every 30 minutes (recommended)", + "Esecuzione ogni ora (8:00-20:00)": "Execute every hour (8:00-20:00)", + "Esegue la rigenerazione ogni giorno alle 02:00 e registra il log in": "Runs regeneration daily at 02:00 and logs to", + "Esegue la rigenerazione ogni giorno alle 02:00 e registra il log in storage/logs/sitemap.log.": "Executes regeneration daily at 02:00 and logs to storage/logs/sitemap.log.", + "Esegui": "Run", + "Esegui Manutenzione": "Run Maintenance", + "Eseguito da": "Executed by", + "Esempio": "Example", + "Esempio di Chiamata": "Request Example", + "Esempio route inglese:": "English route example:", + "Esempio route italiana:": "Italian route example:", + "Esempio:": "Example:", + "Esistente": "Existing", + "Esito restituzione": "Return outcome", + "Español (ES)": "Spanish (ES)", + "Esplora Catalogo": "Explore Catalog", + "Esplora catalogo": "Browse Catalog", + "Esplora e gestisci gli autori della biblioteca": "Explore and manage library authors", + "Esplora e gestisci gli editori della biblioteca": "Explore and manage library publishers", + "Esplora e gestisci gli utenti registrati alla biblioteca": "Explore and manage registered library users", + "Esplora e gestisci la collezione della biblioteca": "Explore and manage the library collection", + "Esplora i generi principali": "Explore the main genres", + "Esplora il catalogo": "Explore the catalog", + "Esplora il nostro vasto catalogo di libri, prenota i tuoi titoli preferiti e scopri nuove letture": "Explore our vast catalog of books, reserve your favorite titles and discover new reads", + "Esplora il nostro vasto catalogo di libri, prenota i tuoi titoli preferiti e scopri nuove letture. Sistema di prestito moderno e intuitivo con ricerca avanzata e categorie organizzate.": "Explore our vast book catalog, reserve your favorite titles and discover new reads. Modern and intuitive lending system with advanced search and organized categories.", + "Esplora per Categoria": "Explore by Category", + "Esporta": "Export", + "Esporta CSV": "Export CSV", + "Esporta Prestiti": "Export Loans", + "Seleziona gli stati dei prestiti da esportare:": "Select the loan statuses to export:", + "Seleziona almeno 2 autori da unire": "Select at least 2 authors to merge", + "Seleziona almeno 2 autori": "Select at least 2 authors", + "Seleziona almeno 2 editori": "Select at least 2 publishers", + "Seleziona almeno 2 editori da unire": "Select at least 2 publishers to merge", + "Seleziona almeno uno stato": "Select at least one status", + "Esporta CSV (formato compatibile per import)": "Export CSV (compatible format for import)", + "Esporta Excel": "Export Excel", + "Esporta PDF": "Export PDF", + "Esporta selezionati": "Export selected", + "Esportazione di %d utenti filtrati su %d totali": "Exporting %d filtered users out of %d total", + "Esportazione di tutti i %d utenti": "Exporting all %d users", + "Esportazione di %d libri filtrati su %d totali": "Exporting %d filtered books out of %d total", + "Esportazione di tutti i %d libri del catalogo": "Exporting all %d books from the catalog", + "Estensione": "Extension", + "Estensione del file non valida.": "Invalid file extension.", + "Estensioni": "Extensions", + "Etichetta": "Label", + "Etichette": "Labels", + "Etichette interne grandi (Herma 4630, Avery 3490)": "Large internal labels (Herma 4630, Avery 3490)", + "European Article Number (opzionale)": "European Article Number (optional)", + "Eventi": "Events", + "Eventi Recenti": "Recent Events", + "Evento": "Event", + "Evento aggiornato con successo!": "Event updated successfully!", + "Evento creato con successo!": "Event created successfully!", + "Evento della biblioteca": "Library event", + "Evento eliminato con successo!": "Event deleted successfully!", + "Evento non trovato.": "Event not found.", + "Evento visibile sul sito": "Event visible on website", + "Eventuali annotazioni sullo stato del libro...": "Any notes on book condition...", + "Excel": "Excel", + "Exporting %d filtered users out of %d total": "Exporting %d filtered users out of %d total", + "Exporting all %d users": "Exporting all %d users", + "FAQ": "FAQ", + "FATAL ERROR:": "FATAL ERROR:", + "Facebook": "Facebook", + "Fallimento": "Failure", + "Fatal Error:": "Fatal Error:", + "Fatto!": "Done!", + "Feature %d": "Feature %d", + "Feature 1": "Feature 1", + "Feature 2": "Feature 2", + "Feature 3": "Feature 3", + "Feature 4": "Feature 4", + "Features - Caratteristiche": "Features - Features", + "Femmina": "Female", + "File": "File", + "File \"%s\" pronto per l'upload": "File \"%s\" ready for upload", + "File %s nella directory root": "File %s in the root directory", + "File .env:": ".env file:", + "File .htaccess creato": ".htaccess file created", + "File .installed:": ".installed file:", + "File CSV (max 10MB)": "CSV file (max 10MB)", + "File CSV non valido: usa \";\" o \",\" come separatore.": "Invalid CSV file: use ';' or ',' as delimiter.", + "File CSV vuoto o formato non valido": "Empty CSV file or invalid format", + "File JSON con le traduzioni (opzionale). Puoi caricarlo anche in seguito.": "JSON file with translations (optional). You can upload it later.", + "File JSON non valido": "Invalid JSON file", + "File Principale:": "Main File:", + "File URL": "File URL", + "File ZIP con struttura plugin valida": "ZIP file with valid plugin structure", + "File ZIP non trovato.": "ZIP file not found.", + "File ZIP troppo grande. Dimensione massima: 100 MB.": "ZIP file too large. Maximum size: 100 MB.", + "File attuale": "Current file", + "File di Esempio": "Example File", + "File di Traduzione": "Translation File", + "File di Traduzione Attuale": "Current Translation File", + "File di Traduzione JSON": "JSON Translation File", + "File di traduzione non trovato": "Translation file not found", + "File esistente (data modifica)": "Existing file (modification date)", + "File non trovato nell'upload.": "File not found in upload.", + "File non valido o corrotto.": "Invalid or corrupted file.", + "File plugin.json non trovato nel pacchetto.": "plugin.json file not found in package.", + "File plugin.json non valido.": "Invalid plugin.json file.", + "File principale PHP specificato in %s": "Main PHP file specified in %s", + "File principale del plugin non trovato.": "Plugin main file not found.", + "File sitemap non trovato": "Sitemap file not found", + "File sitemap presente": "Sitemap file present", + "File troppo grande. Dimensione massima 10MB.": "File too large. Maximum size 10MB.", + "File:": "File:", + "Filtra": "Filter", + "Filtra per Mensola": "Filter by Shelf", + "Filtra per Scaffale": "Filter by Bookcase", + "Filtra per tipo": "Filter by type", + "Filtra mensole per scaffale": "Filter shelves by bookcase", + "Filtri": "Filters", + "Filtri attivi:": "Active filters:", + "Filtri cancellati": "Filters cleared", + "Filtri di Ricerca": "Search Filters", + "Filtri salvati": "Filters saved", + "Filtro Libro": "Book Filter", + "Filtro Utente": "User Filter", + "Filtro genere attivo": "Genre filter active", + "Filtro attivo": "Active filter", + "Filtro sottogenere attivo": "Subgenre filter active", + "Fallito": "Failed", + "Fine": "Finish", + "Fine:": "End:", + "Fino a quando? (opzionale):": "Until when? (optional):", + "Footer": "Footer", + "Formati supportati: JPG, PNG, GIF, WebP. Dimensione massima: 5MB": "Supported formats: JPG, PNG, GIF, WebP. Maximum size: 5MB", + "Formati supportati: MP3, M4A, OGG • Dimensione massima: 500 MB": "Supported formats: MP3, M4A, OGG • Max size: 500 MB", + "Formati supportati: PDF, ePub • Dimensione massima: 100 MB": "Supported formats: PDF, ePub • Max size: 100 MB", + "Formato": "Format", + "Formato CSV Dettagliato": "Detailed CSV Format", + "Formato Etichetta": "Label Format", + "Formato File JSON": "JSON File Format", + "Formato ISBN non valido.": "Invalid ISBN format.", + "Formato biblioteche scolastiche (compatibile A4)": "School library format (A4 compatible)", + "Formato biblioteche scolastiche (compatibili A4)": "School library format (A4 compatible)", + "Formato immagine non supportato. Usa JPG, PNG o WebP.": "Image format not supported. Use JPG, PNG or WebP.", + "Formato impostazioni non valido.": "Invalid settings format.", + "Formato orizzontale per dorso": "Horizontal format for spine", + "Formato quadrato Tirrenia": "Tirrenia square format", + "Formato: CSV con separatore %s • Max 10MB": "Format: CSV with %s separator • Max 10MB", + "Formato: xx_XX (es. it_IT, en_US, es_ES)": "Format: xx_XX (e.g. it_IT, en_US, es_ES)", + "Français (FR)": "French (FR)", + "Frecce ↑ ↓ per il volume": "↑ ↓ arrows for volume", + "From Email": "From Email", + "From Name": "From Name", + "Fuori Catalogo": "Out of Catalog", + "Genera automaticamente": "Generate automatically", + "Generato il": "Generated on", + "Generato il:": "Generated on:", + "Generazione CSV in corso...": "Generating CSV...", + "Generazione...": "Generating...", + "Genere": "Genre", + "Genere letterario": "Literary genre", + "Genere letterario del libro": "Literary genre of the book", + "Genere padre (opz.)": "Parent genre (opt.)", + "Genere principale": "Main genre", + "Genere:": "Genre:", + "Generi": "Genres", + "Generi Principali": "Main Genres", + "Generi e sottogeneri": "Genres and subgenres", + "Gestione Autori": "Authors Management", + "Gestione Biblioteca": "Library Management", + "Gestione Collocazione": "Location Management", + "Gestione Contenuti (CMS)": "Content Management (CMS)", + "Gestione Editori": "Publishers Management", + "Gestione Eventi": "Event Management", + "Gestione Generi": "Genres Management", + "Gestione Generi e Sottogeneri": "Genres and Subgenres Management", + "Gestione JavaScript Personalizzati basata su Cookie": "Cookie-based Custom JavaScript Management", + "Gestione Libri": "Books Management", + "Gestione Lingue": "Language Management", + "Gestione Multilingua": "Multilingual Management", + "Gestione Plugin": "Plugin Management", + "Gestione Prenotazioni": "Reservation Management", + "Gestione Prestiti": "Loans Management", + "Gestione Recensioni": "Reviews Management", + "Gestione Utenti": "Users Management", + "Gestione autori": "Authors management", + "Gestione classificazione Dewey: seed e statistiche": "Dewey classification management: seed and statistics", + "Gestione collezione": "Collection management", + "Gestione prestiti": "Loans management", + "Gestione recensioni": "Reviews management", + "Gestione utenti": "Users management", + "Gestisci": "Manage", + "Gestisci Eventi": "Manage Events", + "Gestisci Restituzione": "Manage Return", + "Gestisci gli aggiornamenti dell'applicazione": "Manage application updates", + "Gestisci gli autori della collezione": "Manage collection authors", + "Gestisci gli eventi della biblioteca: crea, modifica ed elimina eventi con immagini e descrizioni": "Manage library events: create, edit and delete events with images and descriptions", + "Gestisci i generi letterari": "Manage literary genres", + "Gestisci i prestiti attivi e storici": "Manage active and historical loans", + "Gestisci i tuoi titoli preferiti, scopri quando tornano disponibili e accedi rapidamente ai dettagli del libro.": "Manage your favorite titles, find out when they become available, and quickly access book details.", + "Gestisci il contenuto della pagina Chi Siamo con testo e immagine": "Manage the About Us page content with text and image", + "Gestisci il contenuto della pagina Chi Siamo con testo e immagine personalizzati": "Manage About Us page content with custom text and image", + "Gestisci l'accesso all'API per cercare libri via EAN, ISBN e autore": "Manage API access to search books via EAN, ISBN and author", + "Gestisci la collocazione fisica dei libri": "Manage physical location of books", + "Gestisci la visibilità delle categorie di cookie nel banner. I cookie essenziali sono sempre visibili e obbligatori.": "Manage cookie category visibility in banner. Essential cookies are always visible and mandatory.", + "Gestisci le case editrici": "Manage publishers", + "Gestisci le classificazioni Dewey per italiano e inglese": "Manage Dewey classifications for Italian and English", + "Gestisci le estensioni dell'applicazione": "Manage application extensions", + "Gestisci preferenze cookie": "Manage cookie preferences", + "Gestisci restituzione": "Manage return", + "Gestisci tutte": "Manage all", + "Gestito da": "Managed by", + "Giorni di preavviso per scadenza prestito": "Days of advance warning for loan expiry", + "Già Installato": "Already Installed", + "Già recensito": "Already reviewed", + "Gli amministratori non richiedono tessera e riceveranno un invito per impostare la password.": "Administrators do not require a library card and will receive an invitation to set their password.", + "Gli appuntamenti della biblioteca": "Library events", + "Gli script JavaScript sono divisi in 3 categorie in base alla tipologia di cookie:": "JavaScript scripts are divided into 3 categories based on cookie type:", + "Gli utenti possono selezionare questa lingua": "Users can select this language", + "Globale": "Global", + "Google Books API": "Google Books API", + "Google Books Configurato": "Google Books configured", + "Google reCAPTCHA v3": "Google reCAPTCHA v3", + "Grazie per aver scelto Pinakes!": "Thank you for choosing Pinakes!", + "Gruppo": "Group", + "Guida": "Guide", + "Guida alla Gestione Lingue": "Language Management Guide", + "Guida alle Route": "Route Guide", + "Hai aggiunto %s copie a \"%s\"": "You added %s copies to \"%s\"", + "Hai già un account?": "Already have an account?", + "Hai libri che dovevano essere restituiti. Restituiscili al più presto per evitare sanzioni.": "You have books that should have been returned. Return them as soon as possible to avoid penalties.", + "Hai modifiche non salvate che andranno perse. Continuare?": "You have unsaved changes that will be lost. Continue?", + "Hai modifiche non salvate. I dati attuali verranno sostituiti.": "You have unsaved changes. Current data will be replaced.", + "Hai modifiche non salvate. Vuoi continuare e perderle?": "You have unsaved changes. Do you want to continue and lose them?", + "Header HTTP (consigliato):": "HTTP Header (recommended):", + "Heading 1": "Heading 1", + "Heading 2": "Heading 2", + "Heading 3": "Heading 3", + "Heading 4": "Heading 4", + "Heading 5": "Heading 5", + "Heading 6": "Heading 6", + "Hero - Testata principale": "Hero - Main Header", + "Home": "Home", + "Homepage": "Homepage", + "Host": "Host", + "Host Database": "Database Host", + "I Cookie Essenziali sono sempre visibili e non possono essere disabilitati poiché necessari per il funzionamento del sito.": "Essential Cookies are always visible and cannot be disabled as they are necessary for site functionality.", + "I Miei Preferiti": "My Favorites", + "I campi con * sono obbligatori": "Fields with * are required", + "I campi null indicano dati non disponibili": "Null fields indicate unavailable data", + "I contenitori fisici principali dove sono organizzati i libri": "The main physical containers where books are organized", + "I dati provengono dal file JSON, nessun seeding necessario.": "Data comes from the JSON file, no seeding required.", + "I doppioni (per ID, ISBN13 o EAN) vengono aggiornati senza modificare le copie fisiche": "Duplicates (by ID, ISBN13 or EAN) are updated without modifying physical copies", + "I filtri correnti sono stati salvati nell'URL": "Current filters have been saved in the URL", + "I filtri vengono applicati automaticamente mentre digiti": "Filters are applied automatically as you type", + "I livelli (ripiani) all'interno di ogni scaffale": "The levels (shelves) within each bookcase", + "I miei preferiti": "My Favorites", + "I tuoi preferiti": "Your Favorites", + "ID": "ID", + "ID:": "ID:", + "ID Editore": "Publisher ID", + "ID Prestito": "Loan ID", + "ID Prestito:": "Loan ID:", + "ID libro non valido": "Invalid book ID", + "ID libro:": "Book ID:", + "ID prestito non valido": "Invalid loan ID", + "ID utente:": "User ID:", + "IP": "IP", + "IP Address": "IP Address", + "ISBN": "ISBN", + "ISBN 10": "ISBN 10", + "ISBN 13": "ISBN 13", + "ISBN Mancante": "Missing ISBN", + "ISBN a 13 cifre (univoco)": "13-digit ISBN (unique)", + "ISBN non trovato nelle fonti disponibili.": "ISBN not found in available sources.", + "ISBN non valido. Specifica 10 o 13 cifre (eventualmente con X finale).": "Invalid ISBN. Please provide 10 or 13 digits (X allowed at the end).", + "ISBN-13:": "ISBN-13:", + "ISBN10": "ISBN10", + "ISBN10 Non Valido": "Invalid ISBN10", + "ISBN10 deve contenere esattamente 10 caratteri (9 cifre + 1 cifra o X).": "ISBN10 must contain exactly 10 characters (9 digits + 1 digit or X).", + "ISBN10 o ISBN13": "ISBN10 or ISBN13", + "ISBN13": "ISBN13", + "ISBN13 Non Valido": "Invalid ISBN13", + "ISBN13 deve contenere esattamente 13 cifre.": "ISBN13 must contain exactly 13 digits.", + "ISBN13: %s": "ISBN13: %s", + "ISBN:": "ISBN:", + "IT": "IT", + "Icona FontAwesome": "FontAwesome Icon", + "Identità": "Identity", + "Identità Applicazione": "Application Identity", + "Ieri": "Yesterday", + "Ieri alle %s": "Yesterday at %s", + "Il Mio Profilo": "My Profile", + "Prima di ogni aggiornamento viene creato automaticamente un backup del database.": "Before each update, a database backup is automatically created.", + "Pinakes è aggiornato": "Pinakes is up to date", + "Pinakes è stato aggiornato con successo.": "Pinakes has been successfully updated.", + "Pinakes è stato installato con successo ed è pronto per essere utilizzato.": "Pinakes has been successfully installed and is ready to use.", + "Il campo è obbligatorio": "This field is required", + "Il codice lingua non può essere modificato dopo la creazione.": "The language code cannot be modified after creation.", + "Il codice lingua è obbligatorio (es. it_IT, en_US)": "Language code is required (e.g. it_IT, en_US)", + "Il codice scaffale \"%s\" esiste già. Usa un codice diverso.": "Shelf code \"%s\" already exists. Use a different code.", + "Il codice tessera sarà generato automaticamente (formato: ADMIN-YYYYMMDD-XXX).": "The membership code will be generated automatically (format: ADMIN-YYYYMMDD-XXX).", + "Il codice deve iniziare con le stesse tre cifre della classe principale": "The code must start with the same three digits of the main class", + "Il codice verrà inserito in un tag ": "The code will be inserted in a tags", + "Il cron utilizza gli stessi permessi dell'utente di sistema che lo esegue": "Cron uses same permissions as system user executing it", + "Il database '%s' non è vuoto. Deve essere un database vuoto.": "The database '%s' is not empty. It must be an empty database.", + "Il database deve essere vuoto.": "The database must be empty.", + "Il database è coerente e non sono stati rilevati problemi.": "The database is consistent and no issues were found.", + "Il database è stato installato, ma mancano le librerie PHP necessarie per eseguire l'applicazione.": "The database has been installed, but the PHP libraries needed to run the application are missing.", + "Il file JSON deve contenere coppie chiave-valore:": "The JSON file must contain key-value pairs:", + "Il file JSON non è valido:": "JSON file is not valid:", + "Il file deve avere estensione .csv": "The file must have a .csv extension", + "Il file deve contenere coppie chiave (italiano) - valore (traduzione).": "The file must contain key (Italian) - value (translation) pairs.", + "Il file deve essere un JSON valido": "File must be a valid JSON", + "Il file generato si trova in": "Generated file is located in", + "Il file generato si trova in public/sitemap.xml": "Generated file is located at public/sitemap.xml", + "Il formato scelto verrà utilizzato per generare i PDF delle etichette con codice a barre.": "The chosen format will be used to generate label PDFs with barcodes.", + "Il formato selezionato verrà applicato a tutte le etichette generate dal sistema.": "The selected format will be applied to all labels generated by the system.", + "Il libro selezionato è già in prestito. Seleziona un altro libro.": "The selected book is already on loan. Select another book.", + "Il libro viene consegnato subito all'utente. Se deselezionato, il prestito rimarrà in stato 'Da ritirare' fino alla conferma del ritiro.": "The book is delivered immediately to the user. If unchecked, the loan will remain in 'Ready for pickup' status until pickup is confirmed.", + "Il logo verrà ridimensionato automaticamente": "The logo will be automatically resized", + "Il mio profilo": "My Profile", + "Il nome del genere è obbligatorio.": "Genre name is required.", + "Il nome dell'": "The name of", + "Il nome dell'API key è obbligatorio.": "API key name is required.", + "Il nome dell'autore è obbligatorio.": "Author name is required.", + "Il nome dell'editore è obbligatorio.": "Publisher name is required.", + "Il nome della rosa": "The Name of the Rose", + "Il nome inglese è obbligatorio": "English name is required", + "Il nome inglese è obbligatorio (es. Italian, English)": "English name is required (e.g. Italian, English)", + "Il nome nativo è obbligatorio": "Native name is required", + "Il nome nativo è obbligatorio (es. Italiano, English)": "Native name is required (e.g. Italiano, English)", + "Il nostro team è stato notificato e sta lavorando per risolvere il problema.": "Our team has been notified and is working to resolve the issue.", + "Il pacchetto contiene percorsi non validi.": "Package contains invalid paths.", + "Il pacchetto non contiene file validi.": "Package does not contain valid files.", + "Il prestito è stato approvato con successo.": "The loan has been successfully approved.", + "Il prestito è stato rifiutato.": "The loan has been rejected.", + "Il sistema creerà automaticamente libri, autori ed editori": "The system will automatically create books, authors, and publishers", + "Il sistema include un cron job che gestisce automaticamente:": "The system includes a cron job that automatically handles:", + "Il sistema invierà automaticamente una email di promemoria agli utenti prima della scadenza del prestito. Il valore predefinito è 3 giorni.": "The system will automatically send a reminder email to users before the loan expires. Default value is 3 days.", + "Il server ha restituito una risposta non valida. Controlla i log per dettagli.": "The server returned an invalid response. Check the logs for details.", + "Il sito web deve essere un URL valido (es. https://www.esempio.com).": "Website must be a valid URL (e.g. https://www.example.com).", + "Il sito web deve essere un URL valido.": "Website must be a valid URL.", + "Il titolo del libro è obbligatorio.": "The book title is required.", + "Il titolo principale della pagina": "The main page title", + "Il titolo verrà utilizzato anche per generare l'URL della pagina": "The title will also be used to generate the page URL", + "Il titolo è obbligatorio.": "Title is required.", + "Il tuo account è in attesa di approvazione. Riceverai un'email quando sarà attivato": "Your account is pending approval. You will receive an email when it is activated", + "Il tuo account è stato sospeso. Contatta l'amministratore per maggiori informazioni": "Your account has been suspended. Contact the administrator for more information", + "Il tuo browser non supporta la riproduzione audio.": "Your browser does not support audio playback.", + "Immagine": "Image", + "Immagine Caricata!": "Image Uploaded!", + "Immagine Open Graph": "Open Graph Image", + "Immagine attuale": "Current Image", + "Immagine di copertina della pagina (opzionale)": "Page cover image (optional)", + "Immagine di sfondo Hero": "Hero Background Image", + "Immagine in Evidenza": "Featured Image", + "Immagine mostrata quando condividi la pagina su social media (Facebook, Twitter, LinkedIn). Se vuoto, usa l'immagine hero di sfondo. Dimensioni consigliate: 1200x630px (rapporto 1.91:1).": "Image shown when sharing the page on social media (Facebook, Twitter, LinkedIn). If empty, uses the hero background image. Recommended size: 1200x630px (1.91:1 ratio).", + "Immagine mostrata quando condividi su social. Dimensioni consigliate: 1200x630px (rapporto 1.91:1). Se vuoto, usa l'immagine hero di sfondo.": "Image shown when sharing on social media. Recommended dimensions: 1200x630px (1.91:1 ratio). If empty, uses the hero background image.", + "Immagini JPG, PNG o WebP (max 5MB)": "JPG, PNG or WebP images (max 5MB)", + "Import CSV": "CSV Import", + "Import Libri da CSV": "Import Books from CSV", + "Import Massivo Libri": "Bulk Book Import", + "Import completato: %d libri nuovi, %d libri aggiornati, %d autori creati, %d editori creati": "Import completed: %d new books, %d updated books, %d authors created, %d publishers created", + "Import dati iniziali...": "Importing initial data...", + "Import massivo da CSV": "Bulk import from CSV", + "Import schema in corso...": "Importing schema...", + "Import trigger...": "Importing triggers...", + "Importa": "Import", + "Importa Dati": "Import Data", + "Importa da ISBN": "Import from ISBN", + "Importazione completata con successo!": "Import completed successfully!", + "Importazione in corso...": "Import in progress...", + "Importazione libro": "Importing book", + "Importazione...": "Importing...", + "Impossibile aggiornare l'utente. Riprova più tardi.": "Unable to update user. Please try again later.", + "Impossibile aggiornare la chiave Google Books.": "Unable to update the Google Books key.", + "Impossibile aggiornare la posizione automatica": "Unable to update automatic position", + "Impossibile aggiornare le copie.": "Unable to update copies.", + "Impossibile approvare la recensione": "Unable to approve the review", + "Impossibile aprire il file CSV": "Unable to open the CSV file", + "Impossibile aprire il file ZIP.": "Unable to open ZIP file.", + "Impossibile archiviare il messaggio.": "Unable to archive the message.", + "Impossibile caricare gli editori. Controlla la console per i dettagli.": "Unable to load publishers. Check console for details.", + "Impossibile caricare i libri. Controlla la console per i dettagli.": "Unable to load books. Check console for details.", + "Impossibile completare l'operazione. Riprova più tardi.": "Unable to complete the operation. Try again later.", + "Impossibile comunicare con il server. Riprova più tardi.": "Unable to communicate with the server. Please try again later.", + "Impossibile configurare autocomplete: elementi mancanti": "Unable to configure autocomplete: missing elements", + "Impossibile contattare il servizio di scraping. Riprova più tardi.": "Unable to contact the scraping service. Please try again later.", + "Impossibile creare il file .env. Verifica i permessi.": "Unable to create the .env file. Check permissions.", + "Impossibile creare la cartella di upload.": "Unable to create the upload directory.", + "Impossibile creare la directory del plugin.": "Unable to create plugin directory.", + "Impossibile creare la prenotazione": "Unable to create reservation", + "Impossibile creare la struttura del plugin.": "Unable to create plugin structure.", + "Impossibile eliminare il file di manutenzione": "Unable to delete maintenance file", + "Impossibile eliminare il messaggio.": "Unable to delete the message.", + "Impossibile eliminare l'autore: sono presenti libri associati.": "Cannot delete the author: there are books associated with them.", + "Impossibile eliminare l'editore: sono presenti libri associati.": "Cannot delete the publisher: there are books associated with it.", + "Impossibile eliminare l'installer:": "Cannot delete the installer:", + "Impossibile eliminare l'installer: devi prima installare le dipendenze PHP con": "Cannot delete the installer: you must first install the PHP dependencies with", + "Impossibile eliminare la notifica.": "Unable to delete the notification.", + "Impossibile generare la risposta JSON.": "Unable to generate the JSON response.", + "Impossibile importare i dati per questo ISBN.": "Unable to import data for this ISBN.", + "Impossibile inizializzare Uppy per i contenuti digitali.": "Unable to initialize Uppy for digital content.", + "Impossibile inviare la recensione": "Unable to submit review", + "Impossibile inviare la recensione.": "Unable to submit review.", + "Impossibile leggere il file caricato": "Unable to read the uploaded file", + "Impossibile processare l'immagine.": "Unable to process the image.", + "Impossibile ridurre le copie a %d. Ci sono %d copie non disponibili (in prestito, perse o danneggiate). Il numero minimo di copie totali è %d.": "Cannot reduce the copies to %d. There are %d unavailable copies (on loan, lost, or damaged). The minimum total number of copies is %d.", + "Impossibile rifiutare la recensione": "Unable to reject the review", + "Impossibile rigenerare la sitemap: %s": "Unable to regenerate sitemap: %s", + "Impossibile salvare l'utente. Riprova più tardi.": "Unable to save user. Please try again later.", + "Impossibile segnare come letta la notifica.": "Unable to mark the notification as read.", + "Impossibile segnare tutte le notifiche come lette.": "Unable to mark all notifications as read.", + "Impossibile segnare tutti i messaggi come letti.": "Unable to mark all messages as read.", + "Impossibile recuperare i dati degli autori": "Unable to retrieve author data", + "Impossibile recuperare i dati degli editori": "Unable to retrieve publisher data", + "Imposta come Predefinita": "Set as Default", + "Imposta come attiva o predefinita": "Set as active or default", + "Imposta come lingua predefinita per nuovi utenti": "Set as default language for new users", + "Imposta il nome mostrato nel backend e il logo utilizzato nel layout.": "Set the name shown in the backend and the logo used in the layout.", + "Impostare questa lingua come predefinita?\n\nQuesta diventerà la lingua dell'intera applicazione per tutti gli utenti.": "Set this language as default?\n\nThis will become the language of the entire application for all users.", + "Impostare questa lingua come predefinita?\\n\\nQuesta diventerà la lingua dell'intera applicazione per tutti gli utenti.": "Set this language as default?\\n\\nThis will become the language of the entire application for all users.", + "Impostazioni": "Settings", + "Impostazioni Applicazione": "Application Settings", + "Impostazioni Date": "Date Settings", + "Impostazioni Discogs salvate correttamente.": "Discogs settings saved successfully.", + "Impostazioni SEO": "SEO Settings", + "Impostazioni avanzate aggiornate correttamente.": "Advanced settings updated successfully.", + "Impostazioni contatti aggiornate correttamente.": "Contact settings updated successfully.", + "Impostazioni email aggiornate correttamente.": "Email settings updated successfully.", + "Impostazioni generali aggiornate correttamente.": "General settings updated successfully.", + "Impostazioni privacy aggiornate correttamente.": "Privacy settings updated successfully.", + "Impostazioni salvate.": "Settings saved.", + "In Attesa di Approvazione": "Pending Approval", + "In Corso": "In Progress", + "In Riparazione": "Under Repair", + "In Ritardo": "Overdue", + "In attesa": "Pending", + "In attesa di approvazione": "Pending approval", + "In corso": "In progress", + "In corso di restituzione": "Pending return", + "In corso...": "In progress...", + "In manutenzione": "Under maintenance", + "In prestito": "On loan", + "In questa pagina trovi tutti gli eventi, gli incontri e i laboratori organizzati dalla biblioteca.": "On this page you will find every event, talk, and workshop organized by the library.", + "In ritardo": "Overdue", + "Inattivo": "Inactive", + "Indietro": "Back", + "Indirizzo": "Address", + "Indirizzo:": "Address:", + "Indirizzo completo": "Full Address", + "Indirizzo completo *": "Full address *", + "Info": "Info", + "Informazione": "Information", + "Informazioni": "Information", + "Informazioni Base": "Basic Information", + "Informazioni Evento": "Event Information", + "Informazioni Importanti": "Important Information", + "Informazioni Libro": "Book Information", + "Informazioni Personali": "Personal Information", + "Informazioni Prestito": "Loan Information", + "Informazioni Report": "Report Info", + "Informazioni di Contatto": "Contact Information", + "Informazioni di contatto": "Contact information", + "Informazioni editore": "Publisher information", + "Informazioni generali": "General Information", + "Informazioni personali": "Personal Information", + "Informazioni tessera": "Card information", + "Informazioni utili per il personale": "Useful information for staff", + "Inizia Installazione": "Start Installation", + "Inizia ad aggiungere libri al catalogo": "Start adding books to the catalog", + "Inizia aggiungendo il primo libro alla collezione": "Start by adding the first book to the collection", + "Inizia aggiungendo la prima lingua.": "Start by adding the first language.", + "Inizia caricando il tuo primo plugin": "Get started by uploading your first plugin", + "Inizia creando il primo genere letterario": "Start by creating your first literary genre", + "Inizia la Tua Avventura Letteraria": "Start Your Literary Adventure", + "Inizializzazione...": "Initializing...", + "Inizio installazione...": "Starting installation...", + "Inizio:": "Start:", + "Inserisci $1": "Enter $1", + "Inserisci codice locale (es. es_ES per Spagnolo)": "Enter locale code (e.g. es_ES for Spanish)", + "Inserisci il motivo del rifiuto...": "Enter the reason for rejection...", + "Inserisci il titolo": "Enter title", + "Inserisci la data di inizio (YYYY-MM-DD)": "Enter the start date (YYYY-MM-DD)", + "Inserisci la tua email per ricevere il link di reset.": "Enter your email to receive the reset link.", + "Inserisci la tua email per ricevere un link di reset": "Enter your email to receive a reset link", + "Inserisci la tua nuova password": "Enter your new password", + "Inserisci le credenziali del tuo database MySQL. Assicurati che il database sia già stato creato e sia vuoto.": "Enter your MySQL database credentials. Make sure the database has been created and is empty.", + "Inserisci le informazioni del nuovo evento": "Enter the information for the new event", + "Inserisci parole chiave separate da virgole per facilitare la ricerca": "Enter keywords separated by commas to facilitate searching", + "Inserisci solo script che NON tracciano utenti. Per analytics/marketing usa le sezioni dedicate.": "Only insert scripts that DO NOT track users. For analytics/marketing use the dedicated sections.", + "Inserisci un codice ISBN per continuare.": "Enter an ISBN code to continue.", + "Inserisci un numero valido di copie": "Enter a valid number of copies", + "Instagram": "Instagram", + "Installa": "Install", + "Installa Plugin": "Install Plugin", + "Installato": "Installed", + "Installato:": "Installed:", + "Installazione": "Installation", + "Installazione Completata": "Installation Completed", + "Installazione Completata!": "Installation Completed!", + "Installazione Cron Job": "Cron Job Installation", + "Installazione Database": "Database Installation", + "Installazione Guidata": "Guided Installation", + "Installazione delle tabelle del database e configurazione iniziale...": "Installing database tables and initial configuration...", + "Installazione fallita": "Installation failed", + "Installazione file": "Installing files", + "Installazione in corso...": "Installation in progress...", + "Installazione italiana usa": "Italian installation uses", + "Installazione plugin Open Library...": "Installing Open Library plugin...", + "Installer Pinakes": "Pinakes Installer", + "Installer eliminato con successo!": "Installer deleted successfully!", + "Integrità dati": "Data integrity", + "Internal server error": "Internal server error", + "Intestazione": "Header", + "Intestazione sezione": "Section Header", + "Inventario": "Inventory", + "Invia Richiesta": "Submit Request", + "Invia link": "Send link", + "Invia link di reset": "Send reset link", + "Invia messaggio": "Send message", + "Invia recensione": "Submit review", + "Inviaci un messaggio": "Send us a message", + "Inviato": "Sent", + "Invio in corso...": "Sending...", + "Invita gli utenti a registrarsi": "Invite users to register", + "Italiano (IT)": "Italian (IT)", + "JPG, PNG, GIF, WEBP - Max 5MB": "JPG, PNG, GIF, WEBP - Max 5MB", + "JavaScript Analitici": "Analytics JavaScript", + "JavaScript Essenziali": "Essential JavaScript", + "JavaScript Marketing": "Marketing JavaScript", + "L'API key può essere fornita in due modi:": "API key can be provided in two ways:", + "L'API è limitata a 50 risultati per richiesta": "API is limited to 50 results per request", + "L'applicazione NON può funzionare senza questo passaggio!": "The application CANNOT work without this step!", + "L'applicazione è stata installata correttamente e tutte le verifiche sono andate a buon fine.": "The application has been successfully installed and all checks have passed.", + "L'email di attivazione è stata inviata. L'utente potrà verificare il proprio account cliccando il link ricevuto (valido 7 giorni).": "Activation email has been sent. User can verify their account by clicking the link received (valid for 7 days).", + "L'immagine verrà scaricata al salvataggio": "The image will be downloaded on save", + "L'immagine è troppo grande. Max 5MB.": "Image is too large. Max 5MB.", + "L'indirizzo email deve essere valido.": "Email address must be valid.", + "L'installazione non è completa o valida.": "The installation is not complete or valid.", + "L'installazione è stata completata senza errori.": "The installation has been completed without errors.", + "L'ID primario deve essere presente nella lista degli autori da unire": "The primary ID must be present in the list of authors to merge", + "L'ID primario deve essere presente nella lista degli editori da unire": "The primary ID must be present in the list of publishers to merge", + "L'ora dell'evento deve essere nel formato corretto (HH:MM).": "Event time must be in the correct format (HH:MM).", + "L'ora deve essere nel formato corretto (HH:MM).": "Time must be in the correct format (HH:MM).", + "L'URL canonico non è valido. Deve iniziare con http:// o https://": "Canonical URL is not valid. It must start with http:// or https://", + "L'ultima sezione che invita all'azione": "The final call-to-action section", + "L'utente del database non ha i permessi per creare i TRIGGER. L'installazione è stata completata, ma per garantire la piena integrità dei dati è necessario installarli manualmente.": "The database user does not have permissions to create TRIGGERS. The installation has been completed, but to ensure full data integrity it is necessary to install them manually.", + "L'utente non è in stato sospeso. Solo gli utenti sospesi richiedono approvazione.": "User is not in suspended state. Only suspended users require approval.", + "L'utente riceverà un'email con link di verifica (valido 7 giorni) e potrà attivare autonomamente l'account.": "User will receive an email with verification link (valid for 7 days) and can activate the account autonomously.", + "L'utente riceverà una notifica via email della prenotazione creata": "User will receive email notification of the created reservation", + "L'utente richiesto non esiste nel database.": "Requested user does not exist in database.", + "L'utente sarà attivato immediatamente e riceverà un'email di benvenuto. Potrà accedere subito.": "User will be activated immediately and will receive a welcome email. Can log in right away.", + "L'utente è stato attivato e può già effettuare il login. È stata inviata un'email di benvenuto.": "User has been activated and can already log in. A welcome email has been sent.", + "L'utente è stato eliminato.": "The user has been deleted.", + "La Tua Biblioteca Digitale": "Your Digital Library", + "La cartella vendor/ esiste e contiene le librerie necessarie.": "The vendor/ folder exists and contains the necessary libraries.", + "La classificazione Dewey è utilizzata per organizzare i libri per argomento secondo standard internazionali": "The Dewey classification is used to organize books by subject according to international standards", + "La collocazione può essere assegnata automaticamente o inserita manualmente durante la creazione/modifica del libro": "Location can be assigned automatically or entered manually during book creation/editing", + "La collocazione è l'indirizzo fisico che identifica dove si trova un libro nella biblioteca.": "Location is the physical address that identifies where a book is located in the library.", + "La copertina verrà rimossa al salvataggio del libro": "The cover will be removed when saving the book", + "La data dell'evento è obbligatoria e deve essere nel formato corretto.": "Event date is required and must be in the correct format.", + "La data dell'evento è obbligatoria.": "Event date is required.", + "La data di nascita deve essere precedente alla data di morte.": "Birth date must be before death date.", + "La lingua contrassegnata come 'Predefinita' verrà usata in tutta l'applicazione per tutti gli utenti. Per cambiare la lingua dell'intera app, clicca sull'icona stella": "The language marked as 'Default' will be used throughout the application for all users. To change the language of the entire app, click the star icon", + "La pagina che stai cercando non esiste o è stata spostata.": "The page you are looking for does not exist or has been moved.", + "La password deve contenere almeno 8 caratteri, lettere maiuscole, minuscole e numeri": "Password must contain at least 8 characters with uppercase letters, lowercase letters, and numbers", + "La password deve contenere almeno una lettera maiuscola, una minuscola e un numero": "Password must contain at least one uppercase letter, one lowercase letter and one number", + "La password deve essere lunga almeno 8 caratteri": "Password must be at least 8 characters long", + "La password deve essere lunga almeno 8 caratteri!": "Password must be at least 8 characters long!", + "La posizione fisica è indipendente dalla classificazione Dewey e indica dove si trova il libro sugli scaffali.": "The physical position is independent of the Dewey classification and indicates where the book is located on the shelves.", + "La posizione in coda sarà calcolata automaticamente in base alle prenotazioni esistenti": "Queue position will be calculated automatically based on existing reservations", + "La posizione viene assegnata automaticamente": "Position is assigned automatically", + "La recensione è stata approvata e pubblicata con successo.": "The review has been approved and published successfully.", + "La recensione è stata rifiutata e non sarà pubblicata.": "The review has been rejected and will not be published.", + "La risposta include tutti i dati del libro:": "Response includes all book data:", + "La scadenza verrà estesa di 14 giorni": "The due date will be extended by 14 days", + "La sessione è scaduta. Aggiorna la pagina e riprova.": "The session has expired. Refresh the page and try again.", + "La sezione principale che appare per prima sulla home": "The main section that appears first on the homepage", + "La sitemap viene aggiornata automaticamente quando premi il pulsante oppure tramite lo script CLI": "Sitemap is updated automatically when you press the button or via CLI script", + "La sitemap viene aggiornata automaticamente quando premi il pulsante oppure tramite lo script CLI php scripts/generate-sitemap.php. Usa questa azione dopo aver importato un grande numero di libri o modifiche ai contenuti CMS.": "Sitemap is automatically updated when you press button or via CLI script php scripts/generate-sitemap.php. Use this action after importing many books or CMS content changes.", + "La cronologia degli aggiornamenti apparirà qui": "The update history will appear here", + "La tua biblioteca digitale...": "Your digital library...", + "La versione %s è disponibile. Prima di aggiornare, verrà creato un backup automatico del database.": "Version %s is available. Before updating, an automatic database backup will be created.", + "La tua sessione è scaduta. Per motivi di sicurezza, effettua nuovamente l'accesso": "Your session has expired. For security reasons, please sign in again", + "La tua sessione è scaduta. Per motivi di sicurezza, ricarica la pagina e riprova": "Your session has expired. For security reasons, refresh the page and try again", + "La tua sessione è scaduta. Per motivi di sicurezza, ricarica la pagina ed effettua nuovamente l'accesso.": "Your session has expired. For security reasons, reload the page and log in again.", + "La tua wishlist è vuota": "Your wishlist is empty", + "Lascia una recensione": "Leave a review", + "Lascia vuoto o usa \"Genera\" per assegnare automaticamente la prossima posizione disponibile.": "Leave empty or use \"Generate\" to automatically assign the next available position.", + "Lascia vuoto o usa \\": "Leave empty or use \\", + "Lascia vuoto per 1 mese": "Leave empty for 1 month", + "Lascia vuoto per auto-rilevamento. Necessario solo su macOS/Linux con socket personalizzati.": "Leave empty for auto-detection. Only needed on macOS/Linux with custom sockets.", + "Lascia vuoto per generare automaticamente": "Leave blank to generate automatically", + "Lascia vuoto per inviare un link di impostazione": "Leave blank to send a setup link", + "Lascia vuoto per nascondere il social dal footer": "Leave empty to hide the social from footer", + "Lascia vuoto per nascondere il titolo": "Leave empty to hide the title", + "Lascia vuoto per mantenere la chiave esistente. Inserisci un nuovo valore per aggiornarla.": "Leave empty to keep the existing key. Enter a new value to update it.", + "Lascia vuoto per mantenere il nome attuale": "Leave empty to keep the current name", + "Lascia vuoto per non modificare": "Leave empty to not modify", + "Lascia vuoto se l'autore è vivente": "Leave blank if the author is alive", + "Le API key disattivate restituiranno errore 401": "Disabled API keys will return 401 error", + "Le Mie Prenotazioni": "My Reservations", + "Le Mie Recensioni": "My Reviews", + "Le copie disponibili vengono calcolate automaticamente": "Available copies are calculated automatically", + "Le date rosse non sono disponibili. La richiesta verrà valutata da un amministratore.": "Red dates are unavailable. Your request will be reviewed by an administrator.", + "Le mie prenotazioni": "My Reservations", + "Le password non coincidono": "Passwords do not match", + "Le password non coincidono!": "Passwords do not match!", + "Le posizioni si generano automaticamente": "Positions are generated automatically", + "Le route non possono contenere spazi": "Routes cannot contain spaces", + "Le route sono gli URL usati nell'applicazione. Traducendole, puoi avere URL in italiano o inglese in base alla lingua dell'installazione.": "Routes are the URLs used in the application. By translating them, you can have URLs in Italian or English based on the installation language.", + "Le tue recensioni": "Your reviews", + "Letto": "Read", + "Lettore": "Reader", + "Libero": "Free", + "Librerie di upload non caricate. Ricarica la pagina.": "Upload libraries not loaded. Please reload the page.", + "Libri": "Books", + "Libri Disponibili": "Available Books", + "Libri Prestati": "Loaned Books", + "Libri Totali": "Total Books", + "Libri per Collocazione": "Books by Location", + "Libro": "Book", + "Libro Esistente:": "Existing Book:", + "Libro Già Esistente": "Book Already Exists", + "Libro aggiornato con successo!": "Book updated successfully!", + "Libro aggiunto con successo!": "Book added successfully!", + "Libro da prenotare": "Book to reserve", + "Libro e utente sono campi obbligatori.": "Book and user are required fields.", + "Libro non disponibile": "Book not available", + "Libro non trovato su Open Library.": "Book not found on Open Library.", + "Libro non trovato.": "Book not found.", + "Libro non trovato": "Book not found", + "Libro senza titolo": "Untitled book", + "Libro:": "Book:", + "Licenza": "License", + "Limite massimo rinnovi raggiunto": "Maximum renewal limit reached", + "Limiti: massimo 50 libri con scraping attivo, timeout 5 minuti": "Limits: maximum 50 books with scraping enabled, 5 minute timeout", + "Lingua": "Language", + "Lingua App": "App Language", + "Lingua Attiva": "Active Language", + "Lingua Predefinita": "Default Language", + "Lingua Predefinita:": "Default Language:", + "Lingua aggiornata con successo": "Language updated successfully", + "Lingua creata con successo": "Language created successfully", + "Lingua eliminata con successo": "Language deleted successfully", + "Lingua non trovata": "Language not found", + "Lingua originale del libro": "Original language of the book", + "Lingua predefinita impostata con successo": "Default language set successfully", + "Lingue": "Languages", + "Lingue Configurate": "Configured Languages", + "Link": "Link", + "Link Cookie Statement": "Cookie Statement Link", + "Link Cookie Technologies": "Cookie Technologies Link", + "Link Social Media": "Social Media Links", + "Link al file digitale (se disponibile)": "Link to digital file (if available)", + "Link all'audiolibro (se disponibile)": "Link to audiobook (if available)", + "Link copiato!": "Link copied!", + "Link di reset non valido o scaduto": "Reset link invalid or expired", + "Link pulsante": "Button Link", + "LinkedIn": "LinkedIn", + "Livello": "Level", + "Livello ${m.numero_livello}": "Level ${m.numero_livello}", + "Livello *": "Level *", + "Livello 1 (Classi)": "Level 1 (Classes)", + "Livello 2 (Divisioni)": "Level 2 (Divisions)", + "Livello 3 (Specifiche)": "Level 3 (Specifics)", + "Livello principale (es. Prosa, Poesia, Teatro)": "Main level (e.g. Prose, Poetry, Theater)", + "Lo script CLI utilizza il valore di APP_CANONICAL_URL. Assicurati che sia configurato correttamente per evitare URL duplicati.": "CLI script uses APP_CANONICAL_URL value. Make sure it is configured correctly to avoid duplicate URLs.", + "Lo stato della prenotazione sarà impostato automaticamente come \"attiva\"": "The reservation status will be automatically set as \"active\"", + "Lo stato della prenotazione sarà impostato automaticamente come \\": "Reservation status will be automatically set as \\", + "Loans": "Loans", + "Locale": "Local", + "Lock file creato (installazione protetta)": "Lock file created (installation protected)", + "Log": "Log", + "Log Sicurezza": "Security Logs", + "Log di Sicurezza": "Security Log", + "Login": "Login", + "Login Riuscito": "Login Successful", + "Logo": "Logo", + "Logo Applicazione (opzionale)": "Application Logo (optional)", + "Logout effettuato con successo": "Logout successful", + "MP3, M4A o OGG, max 500 MB": "MP3, M4A or OGG, max 500 MB", + "Mai generata": "Never generated", + "Mai utilizzata": "Never used", + "Mancante": "Missing", + "Mantieni in ritardo": "Keep overdue", + "Manuale": "Manual", + "Manutenzione": "Maintenance", + "Manutenzione completata: %d record corretti": "Maintenance completed: %d records fixed", + "Manutenzione giornaliera del database": "Daily database maintenance", + "MaintenanceService connessione database fallita": "MaintenanceService database connection failed", + "MaintenanceService errore attivazione prestiti": "MaintenanceService loan activation error", + "MaintenanceService errore attivazione prestito": "MaintenanceService loan activation error", + "MaintenanceService errore conversione prenotazioni": "MaintenanceService reservation conversion error", + "MaintenanceService errore durante hook login admin": "MaintenanceService admin login hook error", + "MaintenanceService errore elaborazione prenotazione": "MaintenanceService reservation processing error", + "MaintenanceService errore generazione ICS": "MaintenanceService ICS generation error", + "MaintenanceService errore notifiche": "MaintenanceService notification error", + "MaintenanceService errore prenotazioni scadute": "MaintenanceService expired reservations error", + "MaintenanceService errore prestiti in ritardo": "MaintenanceService overdue loans error", + "MaintenanceService errore scadenza prenotazione": "MaintenanceService reservation expiration error", + "MaintenanceService eseguito al login admin": "MaintenanceService executed on admin login", + "MaintenanceService ICS non generato": "MaintenanceService ICS not generated", + "MaintenanceService prenotazione convertita in prestito": "MaintenanceService reservation converted to loan", + "MaintenanceService prenotazione scaduta": "MaintenanceService reservation expired", + "Manutenzione disattivata": "Maintenance disabled", + "Mappa Interattiva": "Interactive Map", + "Mappa del sito per i motori di ricerca": "Site map for search engines", + "Mappa non disponibile": "Map not available", + "Mario": "John", + "Maschio": "Male", + "Max 10.000 righe • Max 100 copie per libro": "Max 10,000 rows • Max 100 copies per book", + "Mediocre": "Fair", + "Membro": "Member", + "Mensola": "Shelf", + "Mensola creata e %d posizioni generate.": "Shelf created and %d positions generated.", + "Mensola creata.": "Shelf created.", + "Mensole": "Shelves", + "Menu": "Menu", + "Menu Principale": "Main Menu", + "Menu \"Prestiti\" nell'admin sidebar": "\"Loans\" menu in admin sidebar", + "Migrazione database": "Database migration", + "Messaggi": "Messages", + "Messaggi di Contatto": "Contact Messages", + "Messaggio": "Message", + "Messaggio inviato con successo! Ti risponderemo al più presto.": "Message sent successfully! We will reply as soon as possible.", + "Messaggio non trovato.": "Message not found.", + "Metadati:": "Metadata:", + "Metodo di invio": "Sending method", + "Minimo 8 caratteri": "Minimum 8 characters", + "Minimo 8 caratteri, con lettere maiuscole, minuscole e numeri": "Minimum 8 characters, with uppercase, lowercase and numbers", + "Mittente": "From", + "Mittente (email)": "Sender (email)", + "Mittente (nome)": "Sender (name)", + "Moderatore": "Moderator", + "Modalità Catalogo": "Catalogue Mode", + "Modalità Solo Catalogo": "Catalogue Only Mode", + "Modalità di importazione": "Import mode", + "Merge - Aggiungi e aggiorna (mantiene dati esistenti)": "Merge - Add and update (keeps existing data)", + "Merge completato": "Merge completed", + "Merge completato: %d aggiunti, %d aggiornati, %d invariati. Totale: %d voci.": "Merge completed: %d added, %d updated, %d unchanged. Total: %d entries.", + "Modifica": "Edit", + "Modifica %s": "Edit %s", + "Modifica Autore": "Edit Author", + "Modifica Autore:": "Edit Author:", + "Modifica Chi Siamo": "Edit About Us", + "Modifica Editore": "Edit Publisher", + "Modifica Evento": "Edit Event", + "Modifica Evento: %s": "Edit Event: %s", + "Modifica Homepage": "Edit Homepage", + "Modifica Libro": "Edit Book", + "Modifica Lingua:": "Edit Language:", + "Modifica Prenotazione": "Edit Reservation", + "Modifica Prenotazione #%s": "Edit Reservation #%s", + "Modifica Route Tradotte": "Edit Translated Routes", + "Modifica Stato Copia": "Edit Copy Status", + "Modifica Utente": "Edit User", + "Modifica i contenuti della homepage: hero, features, CTA e immagine di sfondo": "Edit homepage content: hero, features, CTA and background image", + "Modifica il contenuto e le impostazioni della pagina": "Edit page content and settings", + "Modifica le informazioni dell'evento": "Edit the event information", + "Modifica le pagine statiche del sito": "Edit static site pages", + "Modifica prestito": "Edit loan", + "Modifica prestito #%s": "Edit Loan #%s", + "Modifica profilo": "Edit profile", + "Modifica stato": "Edit status", + "Modifica utente": "Edit user", + "Modulo": "Module", + "Molto buono": "Very good", + "Mondadori": "Mondadori", + "Monitora tentativi di login e eventi di sicurezza": "Monitor login attempts and security events", + "Mostra": "Show", + "Mostra API Key": "Show API Key", + "Mostra Cookie Analitici": "Show Analytics Cookies", + "Mostra Cookie di Marketing": "Show Marketing Cookies", + "Mostra _MENU_ libri": "Show _MENU_ books", + "Mostra categoria \\": "Show category \\", + "Mostra filtri": "Show filters", + "Mostra gli ultimi libri aggiunti al catalogo": "Show the latest books added to the catalog", + "Motivo del rifiuto (opzionale)": "Reason for rejection (optional)", + "Motivo del rifiuto (opzionale):": "Reason for rejection (optional):", + "N. Libri": "No. of Books", + "N/D": "N/A", + "Narrativa": "Fiction", + "Nascondi": "Hide", + "Nascondi API Key": "Hide API Key", + "Nascondi filtri": "Hide filters", + "Nascondi se il sito non utilizza cookie di marketing o advertising": "Hide if site does not use marketing or advertising cookies", + "Nascondi se il sito non utilizza strumenti di analytics (es. Google Analytics)": "Hide if site does not use analytics tools (e.g. Google Analytics)", + "Nascita a": "Birth date to", + "Nascita da": "Birth date from", + "Nascosto": "Hidden", + "Nato il %s": "Born on %s", + "Nazionalità": "Nationality", + "Nederlands (NL)": "Dutch (NL)", + "Nei Preferiti": "In Favorites", + "Nella collezione": "In collection", + "Nessun aggiornamento": "No updates", + "Nessun Problema": "No Issues", + "Nessun autore trovato": "No authors found", + "Nessun autore trovato, premi Invio per aggiungerne uno nuovo": "No author found, press Enter to add a new one", + "Nessun dato": "No data", + "Nessun dato trovato su LibreriaUniversitaria/Feltrinelli.": "No data found on LibreriaUniversitaria/Feltrinelli.", + "Nessun editore trovato": "No publishers found", + "Nessun editore trovato per \"${query}\" — premi Invio per crearne uno nuovo.": "No publisher found for \"${query}\" — press Enter to create a new one.", + "Nessun elemento trovato": "No items found", + "Nessun evento": "No events", + "Nessun evento in programma": "No events scheduled", + "Nessun file caricato": "No file uploaded", + "Nessun file caricato.": "No file uploaded.", + "Nessun file di traduzione caricato. Carica un file JSON per abilitare questa lingua.": "No translation file uploaded. Upload a JSON file to enable this language.", + "Nessun genere trovato": "No genres found", + "Nessun libro": "No books", + "Nessun libro ancora inserito": "No books added yet", + "Nessun libro con collocazione trovato": "No books with location found", + "Nessun libro nel database": "No books in database", + "Nessun libro recente disponibile": "No recent books available", + "Nessun libro registrato": "No books registered", + "Nessun libro trovato": "No books found", + "Nessun log disponibile": "No logs available", + "Nessun logo caricato": "No logo uploaded", + "Nessun messaggio ricevuto": "No messages received", + "Nessun motivo specificato": "No reason specified", + "Nessun plugin installato": "No plugins installed", + "Nessun prestito attivo": "No active loans", + "Nessun prestito disponibile per generare il grafico": "No loans available to generate chart", + "Nessun prestito in corso": "No active loans", + "Nessun prestito passato": "No past loans", + "Nessun prestito registrato": "No loans registered", + "Nessun prestito scaduto": "No overdue loans", + "Nessun prestito trovato": "No loans found", + "Nessun prestito trovato.": "No loans found.", + "Nessun ritiro": "No pickups", + "Nessun risultato": "No results", + "Nessun risultato trovato": "No results found", + "Nessun risultato trovato con i filtri applicati": "No results found with applied filters", + "Nessun risultato trovato per la ricerca.": "No results found for search.", + "Nessun sottogenere": "No subgenre", + "Nessun sottogenere definito": "No subgenres defined", + "Nessun suggerimento": "No suggestion", + "Nessun suggerimento disponibile": "No suggestion available", + "Nessun titolo corrisponde al filtro corrente.": "No titles match the current filter.", + "Nessuna": "None", + "Nessun aggiornamento registrato": "No updates recorded", + "Nessuna API key configurata": "No API keys configured", + "Nessuna collocazione trovata": "No locations found", + "Nessuna copia attualmente disponibile": "No copy currently available", + "Nessuna copertina caricata": "No cover uploaded", + "Nessuna copia disponibile per questo libro": "No copy available for this book", + "Nessuna copia disponibile per il periodo richiesto.": "No copy available for the requested period.", + "Nessuna descrizione disponibile": "No description available", + "Nessuna descrizione disponibile per questo libro.": "No description available for this book.", + "Nessuna lingua configurata": "No languages configured", + "Nessuna mensola. Creane una per iniziare!": "No shelves. Create one to get started!", + "Nessuna mensola per questo scaffale. Creane una!": "No shelves for this bookcase. Create one!", + "Nessuna notifica": "No notifications", + "Nessuna prenotazione": "No reservations", + "Nessuna prenotazione attiva": "No active reservations", + "Nessuna recensione": "No reviews", + "Nessuna recensione approvata": "No approved reviews", + "Nessuna recensione in attesa": "No pending reviews", + "Nessuna recensione rifiutata": "No rejected reviews", + "Nessuna richiesta": "No requests", + "Nessuna richiesta in attesa": "No pending requests", + "Nessuna richiesta in attesa di approvazione.": "No requests pending approval.", + "Nessuna selezione": "No selection", + "Nessuno": "None", + "Nessuno scaffale. Creane uno per iniziare!": "No bookcases. Create one to get started!", + "Nessuno storico": "No history", + "No": "No", + "Nome": "First Name", + "Nome *": "Name *", + "Nome Applicazione": "Application Name", + "Nome Categoria": "Category Name", + "Nome Cognome": "First Last Name", + "Nome Database": "Database Name", + "Nome Editore": "Publisher Name", + "Nome Inglese": "English Name", + "Nome Nativo": "Native Name", + "Nome Referente": "Contact Person Name", + "Nome applicazione": "Application name", + "Nome autore": "Author name", + "Nome editore...": "Publisher name...", + "Nome, pseudonimo, biografia...": "Name, pseudonym, biography...", + "Nome categoria esistente": "Existing category name", + "Nome completo": "Full Name", + "Nome cookie analitici": "Analytics cookies name", + "Nome cookie essenziali": "Essential cookies name", + "Nome cookie marketing": "Marketing cookies name", + "Nome d'arte o pseudonimo": "Stage name or pseudonym", + "Nome dell'editore": "Publisher name", + "Nome della casa editrice": "Publisher name", + "Nome della lingua in inglese (es. Italian, English, Spanish)": "Name of the language in English (e.g. Italian, English, Spanish)", + "Nome della lingua nella lingua stessa (es. Italiano, English, Español)": "Name of the language in the language itself (e.g. Italiano, English, Español)", + "Nome e cognome del referente": "Contact person name", + "Nome e cognome dell'autore": "Author's full name", + "Nome editore": "Publisher name", + "Nome o cognome troppo lungo (massimo 100 caratteri)": "Name or surname too long (maximum 100 characters)", + "Nome plugin non valido. Usa solo lettere, numeri, trattini o underscore.": "Invalid plugin name. Use only letters, numbers, hyphens or underscores.", + "Nome, cognome, email...": "Name, surname, email...", + "Nome:": "Name:", + "Non Disponibile": "Not Available", + "Non Disponibili": "Unavailable", + "Non ancora restituito": "Not yet returned", + "Non assegnata": "Not assigned", + "Non autenticato": "Not authenticated", + "Non autorizzato.": "Unauthorized.", + "Non ci sono dati da esportare": "There is no data to export", + "Non ci sono recensioni in attesa di approvazione.": "There are no reviews waiting for approval.", + "Non ci sono richieste di prestito in attesa di approvazione.": "There are no loan requests pending approval.", + "Non disponibile": "Not available", + "Non disponibile ora": "Not available now", + "Non eliminabile": "Cannot Delete", + "Non hai ancora creato nessun evento. Inizia creando il tuo primo evento.": "You haven't created any events yet. Start by creating your first event.", + "Non hai ancora lasciato recensioni": "You have not left any reviews yet", + "Non hai libri in prestito al momento": "You have no books on loan at the moment", + "Non hai prenotazioni attive al momento": "You have no active reservations at the moment", + "Non hai prestiti passati": "You have no past loans", + "Non hai un account?": "Don't have an account?", + "Non includere tag ": "Do not include tags", + "Non letto": "Unread", + "Non puoi eliminare l'installer finché non completi l'installazione delle dipendenze PHP.": "You cannot delete the installer until you complete the PHP dependencies installation.", + "Non puoi recensire questo libro (devi averlo preso in prestito e non averlo già recensito)": "You cannot review this book (you must have borrowed it and not already reviewed it)", + "Non rinnovabile: prestito in ritardo": "Not renewable: loan overdue", + "Non installato": "Not installed", + "Non scrivibile": "Not writable", + "Non selezionato": "Not selected", + "Non specificata": "Not specified", + "Non specificato": "Not specified", + "Non usare spazi nelle route": "Do not use spaces in routes", + "Non è stato possibile eliminare l'utente. Controlla la console.": "Unable to delete the user. Check the console.", + "Non è stato trovato alcun aggiornamento": "No updates found", + "Nota:": "Note:", + "Nota: Impostare come predefinita disattiverà lo status di predefinita per tutte le altre lingue.": "Note: Setting as default will disable the default status for all other languages.", + "Nota: in produzione limita questa funzione agli amministratori.": "Note: in production limit this function to administrators.", + "Note": "Notes", + "Note (opzionali)": "Notes (optional)", + "Note Importanti": "Important Notes", + "Note Varie": "Miscellaneous Notes", + "Note aggiuntive o osservazioni particolari...": "Additional notes or special observations...", + "Note importanti:": "Important notes:", + "Note interne": "Internal Notes", + "Note sul prestito": "Loan notes", + "Note sulla restituzione": "Return notes", + "Note tecniche": "Technical notes", + "Notifiche": "Notifications", + "Notifiche Automatiche": "Automatic Notifications", + "Notifiche Prestiti": "Loan Notifications", + "Notifiche disponibilità libri in wishlist": "Wishlist book availability notifications", + "Notifiche prestiti scaduti": "Overdue loan notifications", + "N. Inventario": "Inventory No.", + "Numero Inventario": "Inventory Number", + "Numero Libri": "Number of Books", + "Numero Pagine": "Number of Pages", + "Numero Serie": "Series Number", + "Numero di Pagine": "Number of Pages", + "Numero di copie non valido.": "Invalid number of copies.", + "Numero di libri": "Number of books", + "Numero inventario": "Inventory number", + "Numero massimo di righe superato (%d). Dividi il file in parti più piccole.": "Maximum number of rows exceeded (%d). Split the file into smaller parts.", + "Numero o descrizione dell'edizione": "Edition number or description", + "Numero prenotazioni attive": "Number of active reservations", + "Numero serie": "Series number", + "Numero tessera": "Card number", + "Nuova Collocazione": "New Location", + "Nuova Password": "New Password", + "Nuova password": "New password", + "Nuova prenotazione": "New Reservation", + "Nuova recensione da approvare": "New review to approve", + "Nuova registrazione utente": "New User Registration", + "Nuova richiesta di prestito": "New loan request", + "Nuovo": "New", + "Novità nelle versioni successive": "What's new in upcoming versions", + "Non chiudere questa finestra": "Do not close this window", + "Nuovo aggiornamento disponibile!": "New update available!", + "Nuovo Autore": "New Author", + "Nuovo Editore": "New Publisher", + "Nuovo Evento": "New Event", + "Nuovo Genere": "New Genre", + "Nuovo Libro": "New Book", + "Nuovo messaggio di contatto": "New Contact Message", + "Nuovo Prestito": "New Loan", + "Nuovo Utente": "New User", + "Nuovo editore:": "New publisher:", + "Nuovo utente": "New User", + "Nuovo nome (opzionale)": "New name (optional)", + "OFF": "Off", + "OK": "OK", + "ON": "On", + "Obbligatorio": "Required", + "Obbligatorio per utenti non amministratori.": "Required for non-administrator users.", + "Obsoleto": "Obsolete", + "Occupato": "Busy", + "Occupato (prestito attivo)": "Occupied (active loan)", + "Occupato (in ritardo)": "Occupied (overdue)", + "Prenota questo libro": "Reserve this book", + "Seleziona le date per la tua prenotazione. La richiesta verrà inviata alla biblioteca per approvazione.": "Select dates for your reservation. The request will be sent to the library for approval.", + "Accedi per Prenotare": "Login to Reserve", + "Libro disponibile per la prenotazione": "Book available for reservation", + "Richiesta inviata!": "Request sent!", + "La tua richiesta di prestito è stata inviata. Riceverai una notifica quando verrà approvata.": "Your loan request has been sent. You will receive a notification when it is approved.", + "Richiesta inviata con successo!": "Request sent successfully!", + "Errore durante la prenotazione": "Error during reservation", + "Offline": "Offline", + "Oggetto": "Subject", + "Oggetto dell'email": "Email subject", + "Ogni 15 minuti nei giorni lavorativi (8:00-18:00)": "Every 15 minutes on weekdays (8:00-18:00)", + "Ogni route deve iniziare con": "Each route must start with", + "Online": "Online", + "Open Graph (Facebook)": "Open Graph (Facebook)", + "Open Graph (Facebook, LinkedIn)": "Open Graph (Facebook, LinkedIn)", + "Operatore": "Operator", + "Operazione annullata": "Operation cancelled", + "Operazione completata": "Operation completed", + "Operazione non consentita": "Operation not allowed", + "Operazioni": "Operations", + "Opere": "Works", + "Oppure usa il terminale SSH del tuo hosting (cPanel, Plesk, etc.)": "Or use your hosting's SSH terminal (cPanel, Plesk, etc.)", + "Ops, qualcosa è andato storto": "Oops, something went wrong", + "Opzionale": "Optional", + "Opzionale per amministratori": "Optional for administrators", + "Opzione 1:": "Option 1:", + "Opzione 2:": "Option 2:", + "Opzione 3:": "Option 3:", + "Ora Evento": "Event Time", + "Ora puoi accedere con la tua nuova password.": "You can now sign in with your new password.", + "Ora puoi ricaricare questa pagina - il warning sparirà se tutto è OK.": "Now you can reload this page - the warning will disappear if everything is OK.", + "Ordina Sezioni Homepage": "Sort Homepage Sections", + "Ordina per": "Sort by", + "Ordinamento": "Sorting", + "Ordinamento libri": "Book sorting", + "Ordine salvato con successo!": "Order saved successfully!", + "Ordine:": "Order:", + "Organizza e gestisci i generi letterari della biblioteca": "Organize and manage library literary genres", + "Organizza scaffali, mensole e posizioni per la biblioteca fisica": "Organize shelves, levels, and positions for the physical library", + "Ospite": "Guest", + "Ottieni le chiavi da Google reCAPTCHA": "Get keys from Google reCAPTCHA", + "Ottimizza l'evento per i motori di ricerca e i social media": "Optimize event for search engines and social media", + "Ottimizzazione": "Optimization", + "Ottimizzazione SEO (Meta Tags)": "SEO Optimization (Meta Tags)", + "Ottimizzazione SEO e Social Media": "SEO and Social Media Optimization", + "Output atteso: cartella vendor/ con sottocartelle (slim, monolog, etc.)": "Expected output: vendor/ folder with subfolders (slim, monolog, etc.)", + "PDF": "PDF", + "PDF o ePub, max 100 MB": "PDF or ePub, max 100 MB", + "PHP mail()": "PHP mail()", + "PHP mail() - Predefinito": "PHP mail() - Default", + "PHPMailer": "PHPMailer", + "PNG, SVG, JPG o WebP (max 2MB)": "PNG, SVG, JPG or WebP (max 2MB)", + "Paese": "Country", + "Pagina": "Page", + "Pagina Cookie Policy": "Cookie Policy Page", + "Pagina Non Trovata": "Page Not Found", + "Pagina \\": "Page \\", + "Pagina aggiornata con successo.": "Page updated successfully.", + "Pagina attiva (visibile sul sito)": "Active page (visible on site)", + "Pagina non trovata.": "Page not found.", + "Pagina precedente": "Previous page", + "Pagina successiva": "Next page", + "Paginazione eventi": "Events pagination", + "Pagine": "Pages", + "Pannello": "Panel", + "Panoramica generale": "General overview", + "Panoramica generale di Pinakes": "General overview of Pinakes", + "Panoramica completa di prestiti, ritiri e prenotazioni": "Complete overview of loans, pickups and reservations", + "Paragrafo": "Paragraph", + "Paragraph": "Paragraph", + "Parametri di Ricerca": "Search Parameters", + "Parametri non validi": "Invalid parameters.", + "Parametro ISBN mancante.": "Missing ISBN parameter.", + "Parametro category_id obbligatorio.": "Parameter category_id is required.", + "Parametro cover_url mancante.": "Missing cover_url parameter.", + "Parametro division_id obbligatorio.": "Parameter division_id is required.", + "Parole Chiave": "Keywords", + "Parole Chiave SEO": "SEO Keywords", + "Parole chiave": "Keywords", + "Parole chiave SEO": "SEO Keywords", + "Parole chiave per i motori di ricerca (impatto SEO limitato). Separate da virgola.": "Keywords for search engines (limited SEO impact). Comma separated.", + "Password": "Password", + "Password aggiornata con successo.": "Password updated successfully.", + "Password dimenticata": "Forgot password", + "Password dimenticata?": "Forgot password?", + "Password iniziale": "Initial Password", + "Password resettata con successo!": "Password reset successfully!", + "Password troppo lunga (massimo 128 caratteri)": "Password too long (maximum 128 characters)", + "Pattern URL": "URL Pattern", + "Pendente": "Pending", + "Pending": "Pending", + "Per aggiornare automaticamente la sitemap ogni giorno:": "To automatically update sitemap daily:", + "Per assistenza, contatta l'amministrazione della biblioteca.": "For assistance, contact the library administration.", + "Per inserire il codice JavaScript Analytics (Google Analytics, Matomo, ecc.), vai su {{variabile}} per inserire dati dinamici.": "Customize the content of automatic emails with the TinyMCE editor. Use placeholders {{variable}} to insert dynamic data.", + "Personalizza il contenuto delle mail automatiche con l'editor TinyMCE. Usa i segnaposto sospeso e richiede approvazione. Scegli un'opzione:": "This user is in suspended state and requires approval. Choose an option:", + "Radice": "Root", + "Rallenta l'importazione": "Slows down import", + "Recensione (opzionale)": "Review (optional)", + "Recensione approvata": "Review approved", + "Recensione del": "Review on", + "Recensione inviata con successo!": "Review submitted successfully!", + "Recensione inviata con successo! Sarà pubblicata dopo l'approvazione di un amministratore.": "Review successfully submitted! It will be published after administrator approval.", + "Recensione inviata!": "Review submitted!", + "Recensione per \"%s\" da %s - %s": "Review for \"%s\" by %s - %s", + "Recensione rifiutata": "Review rejected", + "Recensione eliminata": "Review deleted", + "La recensione è stata eliminata definitivamente.": "The review has been permanently deleted.", + "Elimina recensione": "Delete review", + "Vuoi eliminare definitivamente questa recensione? Questa azione non può essere annullata.": "Do you want to permanently delete this review? This action cannot be undone.", + "Impossibile eliminare la recensione": "Unable to delete the review", + "Operazione non riuscita": "Operation failed", + "Recensioni": "Reviews", + "Recensioni Approvate": "Approved Reviews", + "Recensioni Rifiutate": "Rejected Reviews", + "Recensioni utenti": "User reviews", + "Recente": "Recent", + "Recupera Password": "Recover Password", + "Referente": "Contact Person", + "Registra Restituzione": "Register Return", + "Registra prestito": "Register loan", + "Registra restituzione": "Register return", + "Registra restituzione prestito": "Register loan return", + "Registra una prenotazione per permettere ad un utente di riservare un libro specifico": "Register a reservation to allow a user to reserve a specific book", + "Registrati": "Register", + "Registrati Ora": "Register Now", + "Registrato da": "Registered from", + "Registrato il": "Registered on", + "Registrazione": "Registration", + "Registrazione Completata": "Registration Completed", + "Registrazione completata": "Registration completed", + "Registrazione completata! Effettua l'accesso": "Registration completed! Please sign in", + "Reimposta password": "Reset password", + "Reindirizzamento verso dominio non autorizzato bloccato.": "Redirect to an unauthorized domain blocked.", + "Reinstalla da Capo": "Reinstall from Scratch", + "Remoto": "Remote", + "Report": "Report", + "Report Integrità Dati": "Data Integrity Report", + "Report e analisi": "Reports and analytics", + "Requisiti": "Requirements", + "Requisiti del plugin:": "Plugin requirements:", + "Requisiti di Sistema": "System Requirements", + "Requisiti di sistema non soddisfatti": "System requirements not met", + "Richiesto": "Required", + "Reset": "Reset", + "Reset Filtri": "Reset Filters", + "Reset anni": "Reset years", + "Resetta Password": "Reset Password", + "Recupera la tua password": "Recover your password", + "Abbiamo ricevuto una richiesta di reset della password per il tuo account.": "We received a request to reset the password for your account.", + "Clicca sul pulsante qui sotto per resettare la tua password:": "Click the button below to reset your password:", + "Oppure copia e incolla questo link nel tuo browser:": "Or copy and paste this link in your browser:", + "Questo link scadrà tra 2 ore.": "This link will expire in 2 hours.", + "Se non hai richiesto il reset della password, puoi ignorare questa email. Il tuo account rimane sicuro.": "If you did not request a password reset, you can ignore this email. Your account remains secure.", + "Ciao": "Hello", + "Restituito": "Returned", + "Restituito in ritardo": "Returned late", + "Restituito regolarmente": "Returned on time", + "Restituzione": "Return", + "Restituzione prestito": "Loan return", + "Restituzione prestito #%s": "Loan Return #%s", + "Ricarica Dewey (seed)": "Reload Dewey (seed)", + "Ricarica Pagina": "Reload Page", + "Ricerca": "Search", + "Ricerca Libro": "Search Book", + "Ricerca Utente": "Search User", + "Ricerca in corso...": "Searching...", + "Ricerca rapida": "Quick Search", + "Riceverai un link di reset via email. Il link sarà valido per 24 ore.": "You will receive a reset link via email. The link will be valid for 24 hours.", + "Riceverai una conferma via email appena la richiesta sarà approvata.": "You'll receive an email confirmation once the request is approved.", + "Ricevuto": "Received", + "Richiede App:": "Requires App:", + "Richiede PHP:": "Requires PHP:", + "Richiedi Prestito": "Request Loan", + "Richiedi approvazione admin dopo la conferma email": "Require admin approval after email confirmation", + "Richiesta Inviata!": "Request Sent!", + "Richiesta Prestito": "Loan Request", + "Richiesta del %s": "Request of %s", + "Ricevuta di Prestito": "Loan Receipt", + "Ricevuta di prestito bibliotecario": "Library loan receipt", + "Richiesta di prestito dal %1$s al %2$s": "Loan request from %1$s to %2$s", + "Richiesta di prestito dal %s per 1 mese": "Loan request starting on %s for 1 month", + "Richiesta di prestito inviata con successo": "Loan request successfully submitted", + "Richiesta di prestito per \"%s\" da %s dal %s al %s": "Loan request for \"%s\" by %s from %s to %s", + "Richiesta di prestito per \\": "Loan request for \\", + "Richiesta fallita:": "Request failed:", + "Richiesta manuale": "Manual request", + "Richieste Manuali": "Manual Requests", + "Richiesta rifiutata": "Request rejected", + "Richieste Pendenti": "Pending Requests", + "Richieste di Prestito": "Loan Requests", + "Richieste di Prestito in Attesa": "Pending Loan Requests", + "Richieste in Sospeso": "Pending Requests", + "Richieste in sospeso": "Pending requests", + "Richieste pendenti": "Pending Requests", + "Richiesto il": "Requested on", + "Richiesto il %s": "Requested on %s", + "Ricordami": "Remember me", + "Ricordi la password?": "Remember your password?", + "Riepilogo Installazione": "Installation Summary", + "Riepilogo wishlist": "Wishlist Summary", + "Rifiuta": "Reject", + "Rifiuta Prestito?": "Reject Loan?", + "Rifiuta non essenziali": "Reject Non-Essential", + "Rifiuta prestito": "Reject loan", + "Rifiuta recensione": "Reject review", + "Rifiutata": "Rejected", + "Rifiutata il": "Rejected on", + "Rifiutato": "Rejected", + "Rifiuterai questa richiesta di prestito?": "Will you reject this loan request?", + "Ritiri da Confermare": "Pickups to Confirm", + "Riga %d (%s): %s": "Row %d (%s): %s", + "Riga %d: numero di colonne non corrispondente": "Row %d: column count does not match", + "Rigenera Sitemap": "Regenerate Sitemap", + "Rigenera adesso": "Regenerate now", + "Rimuovere dalla wishlist?": "Remove from Wishlist?", + "Rimuovere i libri associati prima di eliminare l'autore": "Remove associated books before deleting the author", + "Rimuovere i libri dell'editore prima di eliminarlo": "Remove publisher's books before deleting", + "Rimuovi": "Remove", + "Rimuovi dai Preferiti": "Remove from Favorites", + "Rimuovi dalla wishlist": "Remove from Wishlist", + "Rimuovi editore": "Remove publisher", + "Rimuovi filtro": "Remove filter", + "Rimuovi immagine": "Remove image", + "Rimuovi immagine attuale": "Remove current image", + "Rimuovi immagine di sfondo attuale": "Remove current background image", + "Rimuovi logo attuale": "Remove current logo", + "Rimuovi tutti i filtri": "Remove all filters", + "Rinnova": "Renew", + "Rinnova prestito (+14 giorni)": "Renew loan (+14 days)", + "Rinnova prestito?": "Renew loan?", + "Rinnovare il prestito? La scadenza verrà estesa di 14 giorni.": "Renew loan? The due date will be extended by 14 days.", + "Rinnovi": "Renewals", + "Rinnovi Effettuati:": "Renewals Made:", + "Rinnovi effettuati": "Renewals made", + "Riordina trascinando gli elementi": "Reorder by dragging elements", + "Ripeti la password": "Repeat password", + "Ripristina Default": "Reset to Default", + "Ripristino": "Restore", + "Riprova": "Retry", + "Riservato": "Reserved", + "Risolvi i problemi indicati sopra e ricarica la pagina.": "Fix the issues indicated above and reload the page.", + "Risorsa": "Resource", + "Risorse esterne": "External Resources", + "Rispettiamo il tuo diritto alla privacy. Puoi scegliere di non consentire alcuni tipi di cookie. Le tue preferenze si applicheranno all'intero sito web.": "We respect your right to privacy. You can choose not to allow some types of cookies. Your preferences will apply to the entire website.", + "Rispondi": "Reply", + "Risposta": "Reply", + "Risposta JSON": "JSON Response", + "Risposta non valida dal servizio ISBN.": "Invalid response from the ISBN service.", + "Risposta non valida. Controlla la console per dettagli.": "Invalid response. Check the console for details.", + "Risultati": "Results", + "Risultati per '%s' - Catalogo Biblioteca": "Results for '%s' - Library Catalog", + "Rossi": "Doe", + "Route Comuni": "Common Routes", + "Route Tradotte": "Translated Routes", + "Ruolo": "Role", + "Ruolo:": "Role:", + "SDK": "SDK", + "SEO - Meta Description": "SEO - Meta Description", + "SEO Base": "Basic SEO", + "SEO Base (Meta Tags)": "Base SEO (Meta Tags)", + "SMTP (custom)": "SMTP (custom)", + "SMTP Host": "SMTP Host", + "SMTP Password": "SMTP Password", + "SMTP Personalizzato": "Custom SMTP", + "SMTP Port": "SMTP Port", + "SMTP Username": "SMTP Username", + "SMTP personalizzato": "Custom SMTP", + "SSL": "SSL", + "Salva": "Save", + "Salva API Key": "Save API key", + "Salva Autore": "Save Author", + "Salva Contatti": "Save Contacts", + "Salva Editore": "Save Publisher", + "Salva Identità": "Save Identity", + "Salva Impostazioni": "Save Settings", + "Salva Impostazioni Avanzate": "Save Advanced Settings", + "Salva Libro": "Save Book", + "Salva Lingua": "Save Language", + "Salva Modifiche": "Save Changes", + "Salva Privacy Policy": "Save Privacy Policy", + "Salva Route": "Save Routes", + "Salva Template": "Save Template", + "Salva Testi Cookie Banner": "Save Cookie Banner Texts", + "Salva filtri correnti": "Save current filters", + "Salva identità": "Save identity", + "Salva impostazioni email": "Save email settings", + "Salva impostazioni etichette": "Save label settings", + "Salva in UTF-8": "Save as UTF-8", + "Salva la API key in un luogo sicuro. Non sarà possibile visualizzarla nuovamente dopo la creazione.": "Save the API key in a safe place. It will not be possible to view it again after creation.", + "Salva modifiche": "Save changes", + "Salva modifiche Homepage": "Save Homepage Changes", + "Salva template": "Save template", + "Salva testi banner": "Save banner texts", + "Salva utente": "Save User", + "Salvataggio in corso...": "Saving...", + "Salvataggio...": "Saving...", + "Sarà pubblicata dopo l'approvazione di un amministratore.": "It will be published after administrator approval.", + "Sarà utilizzata per accedere al sistema": "Will be used to log in to the system", + "Sarà visualizzato nell'header e in tutto il sito": "Will be displayed in the header and throughout the site", + "Scadenza": "Due date", + "Scadenza Mancante": "Missing Due Date", + "Scadenza tessera": "Card Expiration", + "Scadenza:": "Due date:", + "Scadenza: %s": "Expiry: %s", + "Scaduto": "Expired", + "Scaduta": "Expired", + "Scaduta il": "Expired on", + "Scaffale": "Bookcase", + "Scaffale *": "Bookcase *", + "Scaffale Narrativa": "Fiction Bookcase", + "Scaffali": "Bookcases", + "Scaffali e mensole": "Shelves and racks", + "Scarica": "Download", + "Scarica copertine": "Fetch covers", + "Scarica PDF": "Download PDF", + "Scarica Ricevuta PDF": "Download PDF Receipt", + "Scarica ricevuta PDF": "Download PDF receipt", + "Scarica automaticamente la ricevuta PDF dopo la creazione del prestito.": "Automatically download the PDF receipt after creating the loan.", + "Scaricamento copertine...": "Fetching covers...", + "Copertine scaricate:": "Covers fetched:", + "Già presenti o senza ISBN:": "Already present or no ISBN:", + "Nessuna copertina da scaricare": "No covers to fetch", + "Scraping fallito": "Scraping failed", + "Download aggiornamento": "Downloading update", + "Download copertina fallito": "Cover download failed", + "Download fallito": "Download failed", + "Immagine non valida": "Invalid image", + "Formato immagine non supportato": "Unsupported image format", + "Errore processamento immagine": "Image processing error", + "Errore salvataggio immagine": "Image save error", + "Scarica Audiobook": "Download Audiobook", + "Scarica JSON": "Download JSON", + "Scarica eBook": "Download eBook", + "Scarica esempio_import_libri.csv": "Download example_import_books.csv", + "Scarica il CSV di esempio con 3 libri già compilati per capire il formato corretto e iniziare subito.": "Download the example CSV with 3 pre-filled books to understand the correct format and get started immediately.", + "Scarica il file CSV di esempio": "Download the example CSV file", + "Scarica l'eBook in formato digitale": "Download the eBook in digital format", + "Scarso": "Poor", + "Scorri a destra per vedere tutte le colonne": "Scroll right to see all columns", + "Sincronizza Copertine": "Sync Covers", + "Sincronizzare le copertine?": "Sync covers?", + "Questa operazione scaricherà le copertine mancanti per tutti i libri con ISBN. Può richiedere diversi minuti.": "This operation will download missing covers for all books with ISBN. It may take several minutes.", + "Sì, sincronizza": "Yes, sync", + "Sincronizzazione...": "Syncing...", + "Sincronizzazione completata!": "Sync completed!", + "Copertine sincronizzate: %s": "Covers synced: %s", + "Copertine già presenti: %s": "Covers already present: %s", + "Si è verificato un errore durante la sincronizzazione": "An error occurred during synchronization", + "Sincronizza copertine mancanti via scraping": "Sync missing covers via scraping", + "Scegli": "Choose", + "Scegli come ordinare i libri nella sezione": "Choose how to sort books in this section", + "Scegli Icona Font Awesome": "Choose Font Awesome Icon", + "Scegli come inviare le email dal sistema. Puoi usare la funzione PHP mail(), PHPMailer o un server SMTP esterno.": "Choose how to send emails from the system. You can use the PHP mail() function, PHPMailer or an external SMTP server.", + "Scegli come inviare le email dal sistema. Puoi usare la funzione PHP con il percorso corretto di PHP sul tuo server": "Replace /usr/bin/php with the correct PHP path on your server", + "Sottocategoria": "Subcategory", + "Sottogenere": "Subgenre", + "Sottogenere specifico (opzionale)": "Specific subgenre (optional)", + "Spazio libero": "Free space", + "Sottogeneri": "Subgenres", + "Sottotitolo": "Subtitle", + "Sottotitolo CTA": "CTA Subtitle", + "Sottotitolo del libro (opzionale)": "Book subtitle (optional)", + "Sottotitolo sezione": "Section Subtitle", + "Staff": "Staff", + "Staff:": "Staff:", + "Stai per aggiornare Pinakes alla versione": "You are about to update Pinakes to version", + "Stai per eliminare": "You are about to delete", + "Stai per unire": "You are about to merge", + "Stai utilizzando l'ultima versione.": "You are using the latest version.", + "Stai utilizzando l'ultima versione disponibile.": "You are using the latest available version.", + "Stampa": "Print", + "Stampa etichetta": "Print label", + "Standard": "Standard", + "Standard Tirrenia catalogazione": "Standard Tirrenia cataloging", + "Standard dorso libri (più comune)": "Standard book spine (most common)", + "Statistiche": "Statistics", + "Statistiche Prestiti": "Loan Statistics", + "Statistiche Rapide": "Quick Statistics", + "Statistiche:": "Statistics:", + "Stato": "Status", + "Stato API": "API Status", + "Stato API key aggiornato con successo.": "API key status updated successfully.", + "Stato Incongruente": "Status Mismatch", + "Stato dell'installazione:": "Installation status:", + "Stato della copia": "Copy status", + "Stato e Gestione": "Status and Management", + "Stato attuale:": "Current status:", + "Stato prestito": "Loan status", + "Stato prestito corrente": "Current loan status", + "Stato prestito non valido.": "Invalid loan status.", + "Stato:": "Status:", + "Status attuale di questa copia del libro": "Current status of this book copy", + "Storico Prestiti": "Loan History", + "Nella stessa collana": "In the same series", + "Volumi di quest'opera": "Volumes of this work", + "volumi": "volumes", + "Questo libro è il volume %s dell'opera": "This book is volume %s of the work", + "Gestione Collane": "Series Management", + "Gestisci le collane e le serie di libri": "Manage book series and collections", + "Collane totali": "Total series", + "Libri nelle collane": "Books in series", + "Nessuna collana trovata. Aggiungi una collana a un libro per iniziare.": "No series found. Add a series to a book to get started.", + "Collane": "Series", + "Serie e collane di libri": "Book series and collections", + "Rinomina collana": "Rename series", + "Rinomina": "Rename", + "Unisci con altra collana": "Merge with another series", + "Nome collana di destinazione": "Target series name", + "Unisci": "Merge", + "Sei sicuro? Tutti i libri verranno spostati nella collana di destinazione.": "Are you sure? All books will be moved to the target series.", + "Crea opera multi-volume": "Create multi-volume work", + "Crea un libro padre che raccoglie tutti i volumi di questa collana.": "Create a parent book that collects all volumes of this series.", + "Titolo dell'opera completa": "Title of the complete work", + "Crea opera": "Create work", + "Collana rinominata: %d libri aggiornati": "Series renamed: %d books updated", + "Nome collana non valido": "Invalid series name", + "Collane unite: %d libri spostati in \"%s\"": "Series merged: %d books moved to \"%s\"", + "Parametri non validi per l'unione": "Invalid parameters for merge", + "Opera \"%s\" creata con %d volumi": "Work \"%s\" created with %d volumes", + "Errore nella creazione dell'opera": "Error creating the work", + "Aggiungi volume": "Add volume", + "Cartaceo": "Paperback", + "eBook": "eBook", + "Audiolibro": "Audiobook", + "CD Audio": "Audio CD", + "Vinile": "Vinyl", + "LP": "LP", + "Cassetta": "Cassette", + "DVD": "DVD", + "Blu-ray": "Blu-ray", + "Digitale": "Digital", + "Cerca libro": "Search for a book", + "Titolo o ISBN...": "Title or ISBN...", + "Numero volume": "Volume number", + "Seleziona un libro": "Select a book", + "Volume aggiunto": "Volume added", + "Rimuovi volume?": "Remove volume?", + "Il libro non sarà eliminato, solo la relazione.": "The book will not be deleted, only the relationship.", + "Volume rimosso": "Volume removed", + "Configura come opera multi-volume": "Configure as multi-volume work", + "Errore database": "Database error", + "Nuova Collana": "New Series", + "Collana \"%s\" creata": "Series \"%s\" created", + "Descrizione della collana...": "Series description...", + "Salva descrizione": "Save description", + "Descrizione salvata": "Description saved", + "Assegna collana": "Assign series", + "Collana assegnata": "Series assigned", + "%d libri assegnati alla collana \"%s\"": "%d books assigned to series \"%s\"", + "Elimina collana": "Delete series", + "Rimuove la collana da tutti i libri. I libri non verranno eliminati.": "Removes the series from all books. Books will not be deleted.", + "Sei sicuro? La collana verrà rimossa da tutti i libri.": "Are you sure? The series will be removed from all books.", + "Collana \"%s\" eliminata (%d libri aggiornati)": "Series \"%s\" deleted (%d books updated)", + "International Standard Serial Number (per periodici)": "International Standard Serial Number (for periodicals)", + "ISSN Non Valido": "Invalid ISSN", + "ISSN deve essere nel formato XXXX-XXXX (8 cifre, l'ultima può essere X).": "ISSN must be in the format XXXX-XXXX (7 digits plus a check character (digit or X)).", + "ISSN non valido. Il formato corretto è XXXX-XXXX (8 cifre, l'ultima può essere X).": "Invalid ISSN. The correct format is XXXX-XXXX (7 digits plus a check character (digit or X)).", + "Relazione ciclica: questo libro è già opera padre del libro selezionato": "Cyclic relationship: this book is already a parent work of the selected book", + "Assegna": "Assign", + "es. 1234-5678": "e.g. 1234-5678", + "es. Harry Potter": "e.g. Harry Potter", + "Identificatori": "Identifiers", + "Inserisci un nome": "Enter a name", + "Nome della collana": "Series name", + "ISSN": "ISSN", + "Volumi": "Volumes", + "Successiva": "Next", + "Successivo": "Next", + "Successo": "Success", + "Successo!": "Success!", + "Suggerimenti": "Tips", + "Suggerimento": "Tip", + "Suggerimento:": "Tip:", + "Suggerisci collocazione": "Suggest location", + "Suggerito scaffale #${data.scaffale_id}": "Suggested bookcase #${data.scaffale_id}", + "Suggerito:": "Suggested:", + "Supporto": "Support", + "Sì": "Yes", + "Sì, Aggiorna": "Yes, Update", + "Sì, Salva": "Yes, Save", + "Sì, aggiorna": "Yes, update", + "Sì, approva": "Yes, approve", + "Sì, attiva": "Yes, activate", + "Sì, disattiva": "Yes, deactivate", + "Sì, disinstalla": "Yes, uninstall", + "Sì, elimina": "Yes, delete", + "Sì, elimina!": "Yes, delete it!", + "Sì, rimuovi": "Yes, Remove", + "TLS": "TLS", + "Tag": "Tag", + "Telefono": "Phone", + "Telefono:": "Phone:", + "Telefono *": "Phone *", + "Telefono Referente": "Contact Person Phone", + "Tema": "Theme", + "Template": "Templates", + "Template Email": "Email Templates", + "Template aggiornato con successo!": "Template updated successfully!", + "Template email": "Email templates", + "Termini": "Terms", + "Termini di Servizio": "Terms of Service", + "Tessera biblioteca": "Library Card", + "Test": "Test", + "Test Connessione": "Test Connection", + "Test del cron job:": "Cron job test:", + "Testi Banner": "Banner Texts", + "Testi Banner Iniziale": "Initial Banner Texts", + "Testi Cookie Banner": "Cookie Banner Texts", + "Testi Modale Preferenze": "Preferences Modal Texts", + "Testi categorie cookie": "Cookie categories texts", + "Testo Privacy": "Privacy Text", + "Testo che apparirà nel footer del sito": "Text that will appear in the site footer", + "Testo checkbox": "Checkbox text", + "Testo della checkbox privacy nel form": "Privacy checkbox text in the form", + "Testo introduttivo": "Introductory text", + "Testo principale mostrato nel banner. Puoi usare HTML.": "Main text shown in the banner. You can use HTML.", + "Testo pulsante": "Button Text", + "Testo pulsante \"Accetta tutti\"": "\"Accept all\" button text", + "Testo pulsante \"Preferenze\"": "\"Preferences\" button text", + "Testo pulsante \"Rifiuta non essenziali\"": "\"Reject non-essential\" button text", + "Testo pulsante \"Salva selezionati\"": "\"Save selected\" button text", + "Ti abbiamo inviato un'email con il link per confermare l'indirizzo.": "We have sent you an email with the link to confirm your address.", + "Timestamp": "Timestamp", + "Tipo": "Type", + "Tipo Acquisizione": "Acquisition Type", + "Tipo Card": "Card Type", + "Tipo Contenuto": "Content Type", + "Tipo MIME non valido. Solo file CSV sono accettati.": "Invalid MIME type. Only CSV files are accepted.", + "Tipo OG": "OG Type", + "Tipo Utente": "User Type", + "Tipo acquisizione": "Acquisition type", + "Tipo di file non supportato. Solo JPEG e PNG sono consentiti.": "Unsupported file type. Only JPEG and PNG are allowed.", + "Tipo di file non valido.": "Invalid file type.", + "Tipo di file non valido. Carica un'immagine reale.": "Invalid file type. Please upload a real image.", + "Tipo non valido": "Invalid type.", + "Tipo utente": "User Type", + "Tipologia account": "Account Type", + "Tipologia:": "Type:", + "Titolo": "Title", + "Titolo:": "Title:", + "Fonte dati:": "Data source:", + "Fonti consultate:": "Sources consulted:", + "Vedi alternative": "View alternatives", + "Dati alternativi disponibili": "Alternative data available", + "Copertina:": "Cover:", + "Usa": "Use", + "Nessuna alternativa disponibile": "No alternatives available", + "Valore applicato": "Value applied", + "Editore applicato": "Publisher applied", + "Copertina applicata": "Cover applied", + "Titolo (opzionale)": "Title (optional)", + "Titolo 1": "Heading 1", + "Titolo 2": "Heading 2", + "Titolo 3": "Heading 3", + "Titolo A-Z": "Title A-Z", + "Titolo CTA": "CTA Title", + "Titolo Evento": "Event Title", + "Titolo Modale": "Modal Title", + "Titolo OG": "OG Title", + "Titolo Open Graph": "Open Graph Title", + "Titolo Pagina": "Page Title", + "Titolo SEO": "SEO Title", + "Titolo Twitter": "Twitter Title", + "Titolo Z-A": "Title Z-A", + "Titolo del libro": "Book title", + "Titolo della sezione e le 4 card con le caratteristiche": "Section title and the 4 feature cards", + "Titolo e descrizione mostrati sopra i caroselli dei generi": "Title and description shown above genre carousels", + "Titolo libro": "Book title", + "Titolo mostrato quando condividi su Facebook/LinkedIn. Se vuoto, usa il titolo SEO o hero.": "Title shown when sharing on Facebook/LinkedIn. If empty, uses the SEO or hero title.", + "Titolo non disponibile": "Title not available", + "Titolo obbligatorio mancante": "Missing required title", + "Titolo pagina": "Page title", + "Titolo principale (H1)": "Main Title (H1)", + "Titolo sezione": "Section Title", + "Titolo troppo lungo (max 255 caratteri)": "Title too long (max 255 characters)", + "Titolo, sottotitolo, descrizione...": "Title, subtitle, description...", + "Titolo...": "Title...", + "Token CSRF non valido": "Invalid CSRF token.", + "Token CSRF non valido. Riprova.": "Invalid CSRF token. Please try again.", + "Token di sicurezza non valido. Riprova.": "Invalid security token. Please try again.", + "Top 10 Lettori Più Attivi": "Top 10 Most Active Readers", + "Top 10 Libri Più Prestati": "Top 10 Most Loaned Books", + "Torna Indietro": "Go Back", + "Torna agli Eventi": "Back to Events", + "Torna agli eventi": "Back to events", + "Torna ai Libri": "Back to Books", + "Torna ai Prestiti": "Back to Loans", + "Torna al login": "Back to login", + "Torna all'Applicazione": "Back to Application", + "Torna all'elenco": "Back to list", + "Torna alla Configurazione Database": "Back to Database Configuration", + "Torna alla categoria superiore": "Back to parent category", + "Torna alla dashboard": "Back to Dashboard", + "Torna alla lista": "Back to list", + "Torna alla panoramica eventi": "Back to all events", + "Torna alle Impostazioni": "Back to Settings", + "Torna alle Impostazioni CMS": "Back to CMS Settings", + "Torna alle Lingue": "Back to Languages", + "Torna alle Prenotazioni": "Back to Reservations", + "Total users:": "Total users:", + "Totale": "Total", + "Totale Autori": "Total Authors", + "Totale Generi": "Total Genres", + "Totale Libri": "Total Books", + "Totale Prestiti": "Total Loans", + "Trasforma Pinakes in un catalogo di sola consultazione": "Transform Pinakes into a browse-only catalogue", + "Totale autori": "Total authors", + "Totale editori:": "Total publishers:", + "Totale libri": "Total books", + "Totale libri presenti": "Total books in collection", + "Totale utenti:": "Total users:", + "Totale: %s righe": "Total: %s rows", + "Tracce": "Tracks", + "Tracklist": "Tracklist", + "Traduzioni e localizzazione": "Translations and localization", + "Trascina le sezioni per riordinarle. L'ordine sarà salvato automaticamente e rispecchiato nella homepage.": "Drag sections to reorder them. The order will be saved automatically and reflected on the homepage.", + "Trascina per riordinare • Il codice deve essere univoco": "Drag to reorder • Code must be unique", + "Trascina per riordinare • Ogni scaffale + livello deve essere univoco": "Drag to reorder • Each bookcase + level must be unique", + "Trascina qui il file CSV o %{browse}": "Drag CSV file here or %{browse}", + "Trascina qui il file ZIP del plugin o %{browse}": "Drag the plugin ZIP file here or %{browse}", + "Trascina qui il logo o %{browse}": "Drag logo here or %{browse}", + "Trascina qui l'immagine di sfondo o %{browse}": "Drag the background image here or %{browse}", + "Trascina qui l'immagine o %{browse}": "Drag image here or %{browse}", + "Trascina qui l'immagine, %{browse} o importa da": "Drag image here, %{browse} or import from", + "Trascina qui la copertina del libro o %{browse}": "Drag the book cover here or %{browse}", + "Trascina qui la copertina del libro o clicca per selezionare": "Drag the book cover here or click to select", + "Trigger database configurati": "Database triggers configured", + "Trigger importati OK": "Triggers imported OK", + "Troppi tentativi. Attendi qualche minuto prima di riprovare": "Too many attempts. Please wait a few minutes before trying again", + "Trovato": "Found", + "Tutorial": "Tutorial", + "Tutte le date sono in formato ISO 8601 (YYYY-MM-DD HH:MM:SS)": "All dates are in ISO 8601 format (YYYY-MM-DD HH:MM:SS)", + "Tutte le mensole": "All shelves", + "Tutte le notifiche del sistema": "All system notifications", + "Tutte le route devono iniziare con": "All routes must start with", + "Tutti": "All", + "Tutti gli anni": "All years", + "Tutti gli autori": "All authors", + "Tutti gli editori": "All publishers", + "Tutti gli eventi": "All events", + "Tutti gli scaffali": "All bookcases", + "Tutti gli stati": "All statuses", + "Tutti i controlli di integrità sono passati con successo!": "All integrity checks passed successfully!", + "Tutti i diritti riservati.": "All rights reserved.", + "Tutti i filtri sono stati rimossi": "All filters have been removed", + "Tutti i generi": "All genres", + "Tutti i libri": "All books", + "Tutti i messaggi ricevuti tramite il form contatti": "All messages received through contact form", + "Tutti i requisiti sono soddisfatti! Puoi procedere con l'installazione.": "All requirements are met! You can proceed with the installation.", + "Tutti i ruoli": "All roles", + "Tutti soddisfatti": "All met", + "Tutto aggiornato!": "All up to date!", + "Tutto": "All", + "Twitter": "Twitter", + "Twitter Card": "Twitter Card", + "URL Canonico": "Canonical URL", + "URL Canonico (opzionale)": "Canonical URL (optional)", + "URL Non Valido": "Invalid URL", + "URL OG": "OG URL", + "URL completo della pagina (auto-generato se vuoto)": "Full page URL (auto-generated if empty)", + "URL completo del sito (es: https://biblioteca.example.com). Usato per link nelle email (verifica account, reset password). Se lasciato vuoto, verrà auto-rilevato.": "Full site URL (e.g., https://biblioteca.example.com). Used for email links (account verification, password reset). If left blank, it will be auto-detected.", + "URL della pagina con la cookie policy": "URL of the page with cookie policy", + "URL della pagina con le tecnologie dei cookie": "URL of the page with cookie technologies", + "URL non valido o non permesso.": "Invalid or unauthorized URL.", + "URL non valido.": "Invalid URL.", + "URL principale del sito. Se vuoto, usa l'URL corrente.": "Main site URL. If empty, uses the current URL.", + "URL pubblico:": "Public URL:", + "URL sito web...": "Website URL...", + "URL...": "URL...", + "Ultima generazione:": "Last generated:", + "Ultima Versione": "Latest Version", + "Ultimi Arrivi": "Latest Arrivals", + "Ultimi Libri Aggiunti": "Latest Books Added", + "Ultimi Libri Inseriti": "Recently Added Books", + "Ultimi aggiunti (data creazione)": "Recently added (creation date)", + "Ultimi modificati (data aggiornamento)": "Recently edited (update date)", + "Ultima": "Last", + "Ultimo": "Last", + "Ultimo Aggiornamento": "Last Updated", + "Ultimo accesso": "Last access", + "Ultimo aggiornamento": "Last Update", + "Ultimo uso:": "Last used:", + "Umberto Eco": "Umberto Eco", + "Un altro aggiornamento è già in corso. Riprova più tardi.": "Another update is already in progress. Please try again later.", + "Un backup viene creato automaticamente prima di salvare": "A backup is created automatically before saving", + "Un'esperienza di lettura moderna, intuitiva e sempre a portata di mano": "A modern, intuitive reading experience always at your fingertips", + "Una chiave è già salvata. Inserisci un nuovo valore per aggiornarla oppure lascia vuoto per rimuoverla.": "A key is already stored. Enter a new value to update it or leave empty to remove it.", + "Una descrizione completa aiuta gli utenti a conoscere meglio l'autore": "A complete description helps users get to know the author better", + "Una mensola con livello %d esiste già in questo scaffale. Usa un livello diverso.": "A shelf with level %d already exists on this bookcase. Use a different level.", + "Una panoramica dei libri che hai salvato per non perderli di vista.": "An overview of the books you've saved to keep track of.", + "Unisciti alla nostra community di lettori e scopri il piacere della lettura con la nostra piattaforma moderna.": "Join our community of readers and discover the joy of reading with our modern platform.", + "Unisci autori": "Merge authors", + "Unisci editori": "Merge publishers", + "Uploader non disponibile": "Uploader not available", + "Usa 'localhost' (raccomandato, rileva automaticamente TCP/socket). Puoi forzare '127.0.0.1' per TCP.": "Use 'localhost' (recommended, auto-detects TCP/socket). You can force '127.0.0.1' for TCP.", + "Usa codici semplici (A, B, C...)": "Use simple codes (A, B, C...)", + "Usa i servizi online per precompilare automaticamente i dati del libro": "Use online services to automatically prefill book data", + "Usa il pulsante \"Rigenera adesso\" per crearla": "Use \"Regenerate now\" button to create it", + "Usa il separatore %s": "Use %s separator", + "Usa l'editor per formattare il testo, aggiungere link, immagini e altro": "Use the editor to format text, add links, images, and more", + "Usa l'editor per formattare il testo, aggiungere link, immagini e altro.": "Use the editor to format text, add links, images, and more.", + "Usa le frecce ← → per saltare": "Use ← → arrows to skip", + "Usa questa azione dopo aver importato un grande numero di libri o modifiche ai contenuti CMS.": "Use this action after importing a large number of books or CMS content changes.", + "Usa questo campo per personalizzare lo stile del sito senza modificare i file di tema.": "Use this field to customize site style without modifying theme files.", + "Usata per login e comunicazioni.": "Used for login and communications.", + "Username": "Username", + "Users": "Users", + "Utente": "User", + "Utente admin creato:": "Admin user created:", + "Utente aggiornato con successo!": "User updated successfully!", + "Utente approvato con successo!": "User approved successfully!", + "Utente attivato direttamente!": "User activated directly!", + "Utente creato con successo!": "User created successfully!", + "Utente prenotante": "User making reservation", + "Utente sconosciuto": "Unknown user", + "Utente senza nome": "Unnamed user", + "Utente %s (%s) si è registrato": "User %s (%s) has registered", + "Utente:": "User:", + "Utenti": "Users", + "Utenti Attivi": "Active Users", + "Utenti registrati": "Registered users", + "Utilizza l'editor TinyMCE per formattare il testo e Uppy per caricare immagini di alta qualità. Le modifiche saranno immediatamente visibili nella pagina pubblica.": "Use the TinyMCE editor to format text and Uppy to upload high quality images. Changes will be immediately visible on the public page.", + "Utilizziamo i cookie per migliorare la tua esperienza. Continuando a visitare questo sito, accetti il nostro uso dei cookie.": "We use cookies to improve your experience. By continuing to visit this site, you accept our use of cookies.", + "Vai": "Go", + "Vai al Login": "Go to Login", + "Vai al login": "Go to login", + "Vai all'Applicazione": "Go to Application", + "Vai alla Home": "Go to Home", + "Valore compreso tra 1 e 30 giorni. Consigliato: 3 giorni": "Value between 1 and 30 days. Recommended: 3 days", + "Valore non valido": "Invalid value", + "Valutazione *": "Rating *", + "Valutazione non valida (1-5 stelle)": "Invalid rating (1-5 stars)", + "Variabili disponibili:": "Available variables:", + "Vecchio": "Old", + "Vedi": "View", + "Vedi Dettagli": "View Details", + "Vedi dettagli": "View details", + "Vedi istruzioni sotto per correggere manualmente.": "See instructions below to fix manually.", + "Vedi tutte le notifiche": "View all notifications", + "Vedi tutti": "View all", + "Vedi tutti gli eventi": "View all events", + "Verifica che il database sia accessibile e configurato correttamente nel file .env": "Verify that the database is accessible and correctly configured in the .env file", + "Verifica che le credenziali del database nel file .env siano corrette": "Verify that the database credentials in the .env file are correct", + "Verifica coerenza e integrità del database": "Check database consistency and integrity", + "Verifica completata OK": "Verification completed OK", + "Verifica i permessi di esecuzione: chmod +x cron/automatic-notifications.php": "Verify execution permissions: chmod +x cron/automatic-notifications.php", + "Verifica in corso...": "Checking...", + "Verifica versioni": "Check versions", + "Verrà creato automaticamente un backup prima dell'aggiornamento.": "A backup will be automatically created before updating.", + "Verrà creato un backup completo del database.": "A complete database backup will be created.", + "Verifica installazione...": "Verifying installation...", + "Verificato": "Verified", + "Versione": "Version", + "Versione Installata": "Installed Version", + "Versione Installer:": "Installer Version:", + "Versione non specificata": "Version not specified", + "Versione non trovata": "Version not found", + "Versione:": "Version:", + "Via Roma 123, 00100 Roma RM, Italia": "123 Main St, New York, NY 10001, USA", + "Via, numero civico, città, CAP": "Street, number, city, ZIP code", + "Via, numero...": "Street, number...", + "Video": "Video", + "Video tutorial": "Video tutorial", + "Visibile": "Visible", + "Visibile pubblicamente sulla pagina contatti": "Publicly visible on contact page", + "Visibilità Sezione Eventi": "Events Section Visibility", + "Visibilità aggiornata!": "Visibility updated!", + "Visita il sito ufficiale": "Visit official website", + "Visualizza": "View", + "Visualizza Libro": "View Book", + "Visualizza Tutte le Categorie": "View All Categories", + "Visualizza Tutto il Catalogo": "View Entire Catalog", + "Visualizza dettagli": "View details", + "Visualizza dettagli libro": "View book details", + "Visualizza e esporta l'elenco dei libri per posizione fisica": "View and export the list of books by physical position", + "Visualizza e gestisci tutti i prestiti della biblioteca": "View and manage all library loans", + "Visualizza pagina live": "View live page", + "Visualizzazione da _START_ a _END_ di _TOTAL_ libri": "Showing _START_ to _END_ of _TOTAL_ books", + "Visualizzazione gerarchica di generi e sottogeneri": "Hierarchical view of genres and subgenres", + "Voci totali": "Total entries", + "Vuoi aggiornare il libro \"${title}\"?": "Do you want to update the book \"${title}\"?", + "Vuoi aggiornare il libro \"%s\"?": "Do you want to update the book \"%s\"?", + "Vuoi aggiornare lo stato di questa copia?": "Do you want to update the status of this copy?", + "Vuoi approvare questa recensione e renderla visibile sul sito?": "Do you want to approve this review and make it visible on the site?", + "Vuoi attivare questo plugin?": "Do you want to activate this plugin?", + "Vuoi aumentare il numero di copie di questo libro?": "Do you want to increase the number of copies of this book?", + "Vuoi disattivare questo plugin?": "Do you want to deactivate this plugin?", + "Vuoi eliminare questo elemento?": "Do you want to delete this item?", + "Vuoi procedere?": "Do you want to proceed?", + "Vuoi rifiutare questa recensione? L'utente verrà avvisato dell'esito.": "Do you want to reject this review? The user will be notified of the outcome.", + "Wishlist": "Wishlist", + "Working...": "Working...", + "Zona Pericolosa": "Danger Zone", + "agosto": "August", + "acquisto": "purchase", + "al": "to", + "altamente consigliato": "highly recommended", + "aprile": "April", + "autori": "authors", + "biblioteca, prestito libri, catalogo online, scopri libri, prenotazioni": "library, book lending, online catalog, discover books, reservations", + "chiavi": "keys", + "chiavi tradotte": "translated keys", + "come nuovo autore": "as new author", + "completamento": "completion", + "con successo": "successfully", + "copi": "copi", + "copia": "copy", + "copie": "copies", + "crontab -e": "crontab -e", + "danneggiato": "damaged", + "della lingua desiderata.": "of the desired language.", + "di": "of", + "di %s": "of %s", + "dicembre": "December", + "directory": "directories", + "disattivata": "disabled", + "disponibile": "available", + "disponibili ora": "available now", + "donazione": "donation", + "dopo aver completato l'installazione.": "after completing the installation.", + "eBook (PDF/ePub)": "eBook (PDF/ePub)", + "eBook caricato!": "eBook uploaded!", + "eBook disponibile": "eBook available", + "editori": "publishers", + "elementi": "items", + "elemento": "item", + "elimina la cartella": "delete the folder", + "errore di comunicazione con il server": "server communication error", + "es. 0.450": "e.g. 0.450", + "es. 15": "e.g. 15", + "es. 19.90": "e.g. 19.90", + "es. 2020": "e.g. 2020", + "es. 2024": "e.g. 2024", + "es. 2025": "e.g. 2025", + "es. 21x14 cm": "e.g. 21x14 cm", + "es. 26 agosto 2025": "e.g. August 26, 2025", + "es. 320": "e.g. 320", + "es. 8842935786": "e.g. 8842935786", + "es. 978-88-429-3578-0": "e.g. 978-88-429-3578-0", + "es. 9788842935780": "e.g. 9788842935780", + "es. Acquisto, Donazione, Prestito": "e.g. Purchase, Donation, Loan", + "es. Biblioteca Civica": "e.g. Public Library", + "es. Copertina rigida, Brossura": "e.g. Hardcover, Paperback", + "es. Fantasy contemporaneo": "e.g. Contemporary Fantasy", + "es. I Classici": "e.g. The Classics", + "es. INV-2024-001": "e.g. INV-2024-001", + "es. Integrazione Sito Web": "e.g. Website Integration", + "es. Italiano, Inglese": "e.g. Italian, English", + "es. La morale anarchica": "e.g. The Anarchist Morality", + "es. Noir mediterraneo": "e.g. Mediterranean Noir", + "es. Prima edizione": "e.g. First edition", + "es. RSSMRA80A01H501U": "e.g. RSSMRA80A01H501U", + "es. Urban fantasy": "e.g. Urban fantasy", + "es. noreply@biblioteca.local": "e.g. noreply@library.local", + "es. romanzo, fantasy, avventura (separare con virgole)": "e.g. novel, fantasy, adventure (separate with commas)", + "eventi": "events", + "eventi, biblioteca, cultura": "events, library, culture", + "fallite.": "failed.", + "fas fa-users": "fas fa-users", + "febbraio": "February", + "gennaio": "January", + "giorni prima della scadenza": "days before expiry", + "giugno": "June", + "https://www.editore.com": "https://www.publisher.com", + "icone disponibili": "icons available", + "in attesa": "pending", + "in_corso": "in progress", + "in_ritardo": "overdue", + "info@editore.com": "info@publisher.com", + "installazione inglese usa": "English installation uses", + "kg": "kg", + "libri": "books", + "libri trovati": "books found", + "libro": "book", + "libro trovato": "book found", + "linea": "line", + "lingue": "languages", + "lingue. Errori:": "languages. Errors:", + "luglio": "July", + "maggio": "May", + "manutenzione": "maintenance", + "mario.rossi@email.it": "john.doe@email.com", + "marzo": "March", + "nella directory dell'applicazione.": "in the application directory.", + "nella nostra biblioteca.": "in our library.", + "novembre": "November", + "o multipli separati da |": "or multiple separated by |", + "o multipli: Engels;Marx": "or multiple: Engels;Marx", + "opzionale": "optional", + "opzionali": "optional", + "ottobre": "October", + "pagina": "page", + "pagine": "pages", + "per conformità GDPR.": "for GDPR compliance.", + "per evitare blocchi (delay di 3 secondi tra ogni richiesta).": "to avoid blocks (3 second delay between each request).", + "per il giorno": "for the day", + "per pagina": "per page", + "perso": "lost", + "preferiti": "favorites", + "premi Invio per crearne uno nuovo.": "press Enter to create a new one.", + "prenotazione attiva": "active reservation", + "prenotazioni attive": "active reservations", + "prenotato": "reserved", + "prestato": "on loan", + "prestiti attivi": "active loans", + "prestiti passati": "past loans", + "prestiti totali": "total loans", + "prestito attivo": "active loan", + "prestito passato": "past loan", + "prima di procedere.": "before proceeding.", + "recensione": "review", + "recensioni": "reviews", + "referente@editore.com": "contact@publisher.com", + "restituito": "returned", + "richiesta in sospeso": "pending request", + "richieste in sospeso": "pending requests", + "risultati": "results", + "risultato": "result", + "seleziona": "browse", + "seleziona file": "select file", + "selezionati": "selected", + "settembre": "September", + "sfoglia": "browse", + "sottogeneri": "subgenres", + "sul server tramite SSH.": "on the server via SSH.", + "titoli": "titles", + "utente@example.com": "user@example.com", + "utenti": "users", + "verranno automaticamente selezionati.": "will be automatically selected.", + "Български (BG)": "Bulgarian (BG)", + "עברית (HE)": "Hebrew (HE)", + "– Nessuno –": "– None –", + "••••••••": "••••••••", + "⚙️ Comportamento Automatico: Se inserisci codice in \"JavaScript Analitici\" o \"JavaScript Marketing\", i rispettivi toggle in Impostazioni Privacy verranno automaticamente selezionati.": "⚙️ Automatic Behavior: If you insert code in \"Analytics JavaScript\" or \"Marketing JavaScript\", the respective toggles in Privacy Settings will be automatically selected.", + "⚠️ AZIONE RICHIESTA: Installazione Dipendenze PHP": "⚠️ ACTION REQUIRED: PHP Dependencies Installation", + "⚠️ Privacy: Le mappe esterne vengono caricate solo se l'utente accetta i cookie Analytics.": "⚠️ Privacy: External maps are loaded only if the user accepts Analytics cookies.", + "✅ Dipendenze PHP installate correttamente": "✅ PHP dependencies installed correctly", + "✓ Connessione riuscita! Database è vuoto e pronto per l'installazione.": "✓ Connection successful! Database is empty and ready for installation.", + "✓ Crea autori mancanti": "✓ Create missing authors", + "✓ Crea editori mancanti": "✓ Create missing publishers", + "✓ Report errori": "✓ Error reporting", + "✓ Validazione dati": "✓ Data validation", + "❌ Errore di comunicazione con il server": "Communication error with the server", + "💡 Non hai accesso SSH?": "💡 Don't have SSH access?", + "📋 Importante: Devi elencare manualmente i cookie tracciati da questi script nella Pagina Cookie per conformità GDPR.": "📋 Important: You must manually list cookies tracked by these scripts in the Cookie Page for GDPR compliance.", + "📋 Istruzioni SSH (Click per espandere/chiudere)": "📋 SSH Instructions (Click to expand/collapse)", + "🔒 Sicurezza Importante": "🔒 Important Security", + "Gestione Temi": "Theme Management", + "Temi": "Themes", + "Personalizza l'aspetto dell'applicazione": "Customize the application appearance", + "Tema Attivo": "Active Theme", + "Temi Disponibili": "Available Themes", + "Personalizza": "Customize", + "Attivare questo tema?": "Activate this theme?", + "Errore durante l'attivazione": "Error during activation", + "Errore di rete": "Network error", + "Primario": "Primary", + "Secondario": "Secondary", + "Bottone": "Button", + "Testo Bottone": "Button Text", + "Accento": "Accent", + "Personalizza Tema": "Customize Theme", + "Torna ai temi": "Back to themes", + "Colori Tema": "Theme Colors", + "Personalizza la palette colori dell'applicazione": "Customize the application color palette", + "Colore Primario": "Primary Color", + "link, accenti": "links, accents", + "Colore Secondario": "Secondary Color", + "bottoni principali": "main buttons", + "Colore Bottoni CTA": "CTA Button Color", + "bottoni nelle card": "buttons in cards", + "Colore Testo Bottoni": "Button Text Color", + "Verifica Leggibilità": "Readability Check", + "Link di esempio": "Example link", + "Bottone CTA": "CTA Button", + "Bottone Primario": "Primary Button", + "Ripristina": "Reset", + "Contrasto": "Contrast", + "WCAG AA Conforme": "WCAG AA Compliant", + "AA Testo Grande": "AA Large Text", + "Insufficiente": "Insufficient", + "Ripristinare i colori?": "Reset colors to defaults?", + "Tema attivato con successo": "Theme activated successfully", + "Errore durante l'attivazione del tema": "Error activating theme", + "Colori ripristinati ai valori predefiniti": "Colors reset to defaults", + "Errore nel ripristino dei colori": "Error resetting colors", + "Tema non trovato": "Theme not found", + "Colore non valido": "Invalid color", + "Contrasto insufficiente tra bottone e testo (minimo 3:1). Attuale": "Insufficient contrast between button and text (minimum 3:1). Current", + "Tema salvato con successo": "Theme saved successfully", + "Errore nel salvataggio del tema": "Error saving theme", + "Utenti in Attesa di Approvazione": "Users Awaiting Approval", + "Invia Email": "Send Email", + "Confermi di voler attivare direttamente questo utente?": "Are you sure you want to activate this user directly?", + "Non includere tag": "Do not include tags", + "Il codice verrà inserito in un tag": "The code will be inserted in a tag", + "nell'header. Non includere i tag": "in the header. Do not include tags", + "Sicurezza Connessione": "Connection Security", + "Configura le impostazioni di sicurezza per le connessioni HTTPS": "Configure security settings for HTTPS connections", + "Attiva HTTPS solo se hai un certificato SSL valido installato. Attivare HSTS rende permanente il reindirizzamento HTTPS nel browser.": "Enable HTTPS only if you have a valid SSL certificate installed. Enabling HSTS makes HTTPS redirection permanent in the browser.", + "Info HSTS:": "HSTS Info:", + "HTTP Strict Transport Security forza i browser a usare solo connessioni HTTPS per 1 anno (raccomandato per produzione con SSL valido).": "HTTP Strict Transport Security forces browsers to use only HTTPS connections for 1 year (recommended for production with valid SSL).", + "Forza HTTPS": "Force HTTPS", + "Reindirizza automaticamente tutte le richieste HTTP a HTTPS": "Automatically redirect all HTTP requests to HTTPS", + "Abilita HSTS": "Enable HSTS", + "Attiva HTTP Strict Transport Security (max-age: 1 anno, include sottodomini)": "Enable HTTP Strict Transport Security (max-age: 1 year, includes subdomains)", + "Requisiti:": "Requirements:", + "Certificato SSL/TLS valido": "Valid SSL/TLS certificate", + "Tutte le risorse del sito devono essere HTTPS": "All site resources must be HTTPS", + "Sottodomini devono supportare HTTPS (se usati)": "Subdomains must support HTTPS (if used)", + "Funzionamento automatico:": "Automatic operation:", + "Auto-attivazione:": "Auto-activation:", + "Caricamento automatico:": "Automatic loading:", + "Devi elencare manualmente i cookie tracciati da questi script nella": "You must manually list the cookies tracked by these scripts in the", + "Pagina Cookie": "Cookie Page", + "Database '%s' non esiste. Crealo prima di procedere.": "Database '%s' does not exist. Please create it before proceeding.", + "File dati iniziali per la lingua selezionata non trovato: %s": "Initial data file for the selected language not found: %s", + "%s è richiesto": "%s is required", + "%s è richiesta": "%s is required", + "%s deve essere di almeno 8 caratteri": "%s must be at least 8 characters", + "%s non può superare i 72 caratteri": "%s cannot exceed 72 characters", + "%s non è valido": "%s is not valid", + "Schema non importato correttamente. Tabelle mancanti: %s": "Schema not imported correctly. Missing tables: %s", + "Schema incompleto: trovate %d tabelle su %d attese.": "Incomplete schema: found %d tables out of %d expected.", + "Errore verifica tabelle: %s": "Error verifying tables: %s", + "Installazione database non completa. Tabelle mancanti: %s": "Database installation incomplete. Missing tables: %s", + "Installazione database non completa. Trovate %d tabelle, attese %d": "Database installation incomplete. Found %d tables, expected %d", + "Dati di classificazione mancanti": "Classification data missing", + "Dati generi mancanti": "Genre data missing", + "Le password non corrispondono": "Passwords do not match", + "Requisito '%s' non soddisfatto": "Requirement '%s' not met", + "Non è possibile creare la directory: %s": "Cannot create directory: %s", + "Directory non scrivibile: %s": "Directory not writable: %s", + "Il file supera la dimensione massima consentita": "File exceeds maximum allowed size", + "Errore sconosciuto durante il caricamento": "Unknown error during upload", + "Il file supera la dimensione massima di %s MB": "File exceeds maximum size of %s MB", + "Tipo di file non consentito. Sono ammessi solo: %s": "File type not allowed. Only allowed: %s", + "Troppi errori durante l'import dello schema (%d errori). Primi errori:\n%s": "Too many errors during schema import (%d errors). First errors:\n%s", + "Troppi errori durante l'import dei dati (%d errori). Primi errori:\n%s": "Too many errors during data import (%d errors). First errors:\n%s", + "Impossibile determinare l'ID del plugin Open Library.": "Unable to determine Open Library plugin ID.", + "Tutte le copie in prestito": "All copies on loan", + "Tutte le copie prenotate": "All copies reserved", + "Tutte le copie di questo libro hanno già un prestito attivo o prenotato. Attendi che una copia venga restituita.": "All copies of this book already have an active or scheduled loan. Please wait for a copy to be returned.", + "Copie disponibili": "Copies available", + "Nessuna copia disponibile nelle date richieste": "No copies available for the requested dates", + "Le date rosse o arancioni non sono disponibili. La richiesta verrà valutata da un amministratore.": "Red or orange dates are not available. The request will be evaluated by an administrator.", + "Sono stati rilevati problemi di integrità": "Integrity issues were detected", + "Clicca su \\\"Esegui Manutenzione\\\" per correggere automaticamente i problemi riparabili.": "Click \\\"Run Maintenance\\\" to automatically fix resolvable issues.", + "Ricalcola Disponibilità": "Recalculate Availability", + "Aggiorna il conteggio delle copie disponibili": "Update available copy counts", + "Correggi Problemi": "Fix Issues", + "Ripara automaticamente gli errori rilevati": "Automatically repair detected errors", + "Manutenzione Completa": "Full Maintenance", + "Esegui tutte le operazioni di manutenzione": "Run all maintenance operations", + "Vuoi correggere automaticamente i problemi di integrità rilevati?": "Do you want to automatically fix the detected integrity issues?", + "Vuoi eseguire la manutenzione completa del sistema? Questa operazione potrebbe richiedere alcuni minuti.": "Do you want to run full system maintenance? This may take a few minutes.", + "Prenotazione sovrapposta a prestito": "Reservation overlaps with a loan", + "Prenotazioni sovrapposte": "Overlapping reservations", + "Sì, correggi": "Yes, fix", + "Sì, esegui": "Yes, run", + "Elaborazione...": "Processing...", + "Operazione fallita": "Operation failed", + "Processing...": "Processing...", + "Operation completed": "Operation completed", + "Operation failed": "Operation failed", + "Communication error with the server": "Communication error with the server", + "Do you want to automatically fix the detected integrity issues?": "Do you want to automatically fix the detected integrity issues?", + "Do you want to run full system maintenance? This may take a few minutes.": "Do you want to run full system maintenance? This may take a few minutes.", + "Confirm?": "Confirm?", + "Yes, fix": "Yes, fix", + "Yes, run": "Yes, run", + "Cancel": "Cancel", + "Connessione database non disponibile": "Database connection not available", + "File .env non trovato": ".env file not found", + "Impossibile caricare configurazione database": "Unable to load database configuration", + "Errore connessione database": "Database connection error", + "Il tuo sistema Pinakes per catalogare, gestire e condividere la tua collezione libraria.": "Your Pinakes system to catalog, manage, and share your book collection.", + "Eventi e Incontri": "Events and Meetings", + "ordine:": "order:", + "Traduttore": "Translator", + "Nome del traduttore (se applicabile)": "Translator name (if applicable)", + "Illustratore": "Illustrator", + "Nome dell'illustratore (se applicabile)": "Illustrator name (if applicable)", + "Curatore": "Curator", + "Nome del curatore dell'opera (se applicabile)": "Curator name (if applicable)", + "es. Gianni De Conno": "e.g. Gianni De Conno", + "es. Mario Rossi": "e.g. Mario Rossi", + "Lingua non supportata": "Unsupported language", + "Lingue valide": "Valid languages", + "(codici ISO e nomi inglesi accettati)": "(ISO codes and English names accepted)", + "Copie totali": "Total copies", + "Data creazione": "Created at", + "Ultima modifica": "Last updated", + "Copia %d di %d": "Copy %d of %d", + "File caricato con successo": "File uploaded successfully", + "Errore durante l'importazione (HTTP": "Error during import (HTTP", + "Problemi di Configurazione": "Configuration Issues", + "URL Canonico Mancante": "Missing Canonical URL", + "URL Canonico Vuoto": "Empty Canonical URL", + "URL Canonico Non Valido": "Invalid Canonical URL", + "Applica Fix": "Apply Fix", + "Problemi di Integrità Database": "Database Integrity Issues", + "Tipo di issue non valido": "Invalid issue type", + "L'URL fornito non è valido": "The provided URL is not valid", + "Impossibile leggere il file .env": "Cannot read .env file", + "Impossibile scrivere nel file .env": "Cannot write to .env file", + "Configurazione aggiornata con successo!": "Configuration updated successfully!", + "Errore durante l'applicazione del fix:": "Error while applying fix:", + "Applicazione del fix...": "Applying fix...", + "Fix applicato": "Fix applied", + "Sì, applica": "Yes, apply", + "Vuoi impostare APP_CANONICAL_URL a:": "Do you want to set APP_CANONICAL_URL to:", + "Gestisci i tuoi prestiti, esplora il catalogo e scopri nuovi titoli.": "Manage your loans, explore the catalog and discover new titles.", + "Nessun libro recente": "No recent books", + "Non ci sono nuovi arrivi al momento.": "No new arrivals at the moment.", + "Non hai prestiti in corso al momento.": "You have no active loans at the moment.", + "%d giorni": "%d days", + "Email verificata con successo! Il tuo account è ora in attesa di approvazione da parte dell'amministratore. Riceverai un'email quando sarà attivato.": "Email verified successfully! Your account is now pending administrator approval. You will receive an email when it is activated.", + "Il link di verifica email è scaduto o non valido. Registrati nuovamente per ricevere un nuovo link.": "The email verification link has expired or is invalid. Please register again to receive a new link.", + "Il link di verifica non è valido. Assicurati di aver copiato l'intero link dall'email.": "The verification link is not valid. Make sure you copied the entire link from the email.", + "La mia bacheca": "My Dashboard", + "La modalità manutenzione non era attiva": "Maintenance mode was not active", + "Modalità manutenzione disattivata": "Maintenance mode disabled", + "Se il sito resta in manutenzione, elimina il file": "If the site stays in maintenance, delete the file", + "Server in manutenzione. Attendi il completamento dell'aggiornamento.": "Server in maintenance. Wait for the update to complete.", + "Creazione indici di ottimizzazione...": "Creating optimization indexes...", + "Indici di ottimizzazione creati OK": "Optimization indexes created OK", + "Nessun libro selezionato": "No books selected", + "Stato non valido": "Invalid status", + "ID libri non validi": "Invalid book IDs", + "Stato aggiornato per %d libri": "Status updated for %d books", + "%d libri eliminati": "%d books deleted", + "%d autori eliminati": "%d authors deleted", + "%d editori eliminati": "%d publishers deleted", + "Impossibile eliminare: alcuni libri hanno prestiti attivi": "Cannot delete: some books have active loans", + "Impossibile eliminare: alcuni editori hanno libri associati": "Cannot delete: some publishers have associated books", + "ISBN o EAN...": "ISBN or EAN...", + "autori. Questa azione non può essere annullata.": "authors. This action cannot be undone.", + "autori. Tutti i libri verranno assegnati all'autore risultante.": "authors. All books will be assigned to the resulting author.", + "editori. Questa azione non può essere annullata.": "publishers. This action cannot be undone.", + "editori. Tutti i libri verranno assegnati all'editore risultante.": "publishers. All books will be assigned to the resulting publisher.", + "libri. Questa azione non può essere annullata.": "books. This action cannot be undone.", + "I libri degli altri autori verranno assegnati a questo": "Books from other authors will be assigned to this one", + "I libri degli altri editori verranno assegnati a questo": "Books from other publishers will be assigned to this one", + "Nessun autore selezionato": "No authors selected", + "Nessun editore selezionato": "No publishers selected", + "ID autori non validi": "Invalid author IDs", + "ID editori non validi": "Invalid publisher IDs", + "Ottimizzazione Indici Database": "Database Index Optimization", + "Ottimizzato": "Optimized", + "%d Indici Mancanti": "%d Missing Indexes", + "Il database è già ottimizzato!": "The database is already optimized!", + "Tutti gli indici di performance sono presenti.": "All performance indexes are present.", + "Perché servono questi indici?": "Why are these indexes needed?", + "Gli indici migliorano significativamente le performance delle query, specialmente su tabelle con molti record. Le installazioni recenti li includono già, ma le installazioni più vecchie potrebbero non averli.": "Indexes significantly improve query performance, especially on tables with many records. Recent installations already include them, but older installations may not have them.", + "Tabella": "Table", + "Nome Indice": "Index Name", + "Colonne": "Columns", + "Crea Indici Automaticamente": "Create Indexes Automatically", + "Scarica Script SQL": "Download SQL Script", + "Creazione indici...": "Creating indexes...", + "Vuoi creare gli indici mancanti? Questa operazione migliorerà le performance del database.": "Do you want to create the missing indexes? This operation will improve database performance.", + "Sì, crea indici": "Yes, create indexes", + "Indici creati:": "Indexes created:", + "Errori:": "Errors:", + "Indici creati con successo": "Indexes created successfully", + "%d indici creati con successo": "%d indexes created successfully", + "Errore durante la creazione degli indici": "Error while creating indexes", + "Errore durante la creazione degli indici:": "Error while creating indexes:", + "%d indici mancanti trovati": "%d missing indexes found", + "Cerca per titolo, ISBN o EAN": "Search by title, ISBN or EAN", + "%d copie disponibili su %d": "%d copies available out of %d", + "1 copia disponibile su %d": "1 copy available out of %d", + "Nessuna copia registrata": "No copies registered", + "Disponibile nella data selezionata": "Available on selected date", + "Non disponibile nella data selezionata": "Not available on selected date", + "Prima data disponibile: %s": "First available date: %s", + "Seleziona un libro per vedere la disponibilità": "Select a book to see availability", + "Calendario Disponibilità": "Availability Calendar", + "visualizzazione per copia": "view by copy", + "In prestito fino al": "On loan until", + "Libro '%s' (ID: %d) ha copie disponibili negative: %d": "Book '%s' (ID: %d) has negative available copies: %d", + "Libro '%s' (ID: %d) ha più copie disponibili (%d) che totali (%d)": "Book '%s' (ID: %d) has more available copies (%d) than total (%d)", + "Prestito ID %d riferisce libro/utente inesistente (libro: %d, utente: %d)": "Loan ID %d references non-existent book/user (book: %d, user: %d)", + "Prestito ID %d attivo senza data scadenza": "Active loan ID %d has no due date", + "Libro '%s' (ID: %d) ha stato '%s' ma copie disponibili: %d": "Book '%s' (ID: %d) has status '%s' but available copies: %d", + "Prenotazione ID %d si sovrappone al prestito ID %d per il libro %d": "Reservation ID %d overlaps with loan ID %d for book %d", + "Prenotazioni ID %d e %d si sovrappongono per il libro %d": "Reservations ID %d and %d overlap for book %d", + "Prenotazione ID %d scaduta il %s ma ancora attiva": "Reservation ID %d expired on %s but still active", + "Libro ID %d ha posizioni coda non sequenziali: %s": "Book ID %d has non-sequential queue positions: %s", + "Prestito ID %d da prenotazione in attesa da %d giorni (libro %d)": "Loan ID %d from reservation pending for %d days (book %d)", + "Prestito ID %d con stato '%s' ha ancora attivo = 1": "Loan ID %d with status '%s' still has active = 1", + "APP_CANONICAL_URL non configurato nel file .env. Link nelle email potrebbero non funzionare correttamente. Valore suggerito: %s": "APP_CANONICAL_URL not configured in .env file. Email links may not work correctly. Suggested value: %s", + "Aggiungi al file .env: APP_CANONICAL_URL=%s": "Add to .env file: APP_CANONICAL_URL=%s", + "APP_CANONICAL_URL configurato ma vuoto nel file .env. Link nelle email useranno fallback a HTTP_HOST. Valore suggerito: %s": "APP_CANONICAL_URL configured but empty in .env file. Email links will use HTTP_HOST fallback. Suggested value: %s", + "Imposta nel file .env: APP_CANONICAL_URL=%s": "Set in .env file: APP_CANONICAL_URL=%s", + "APP_CANONICAL_URL configurato con valore non valido: '%s'. Link nelle email potrebbero non funzionare. Valore suggerito: %s": "APP_CANONICAL_URL configured with invalid value: '%s'. Email links may not work. Suggested value: %s", + "Correggi nel file .env: APP_CANONICAL_URL=%s": "Fix in .env file: APP_CANONICAL_URL=%s", + "Prestito non trovato": "Loan not found", + "Prestito validato e aggiornato": "Loan validated and updated", + "Errore validazione prestito:": "Loan validation error:", + "Errore correzione dati:": "Data correction error:", + "Errore creazione indici:": "Index creation error:", + "Indice %s creato su %s": "Index %s created on %s", + "Errore creazione %s su %s:": "Error creating %s on %s:", + "Eccezione creazione %s su %s:": "Exception creating %s on %s:", + "Dati libro recuperati con successo da Open Library": "Book data successfully retrieved from Open Library", + "Libro non trovato nel database Open Library": "Book not found in Open Library database", + "Calendario Prestiti e Prenotazioni": "Loans and Reservations Calendar", + "Sincronizza (ICS)": "Sync (ICS)", + "Copia Link": "Copy Link", + "Prestiti programmati": "Scheduled Loans", + "Prestiti scaduti": "Overdue Loans", + "Creata il": "Created on", + "Mese": "Month", + "Settimana": "Week", + "Lista": "List", + "Programmato": "Scheduled", + "L'URL del calendario è stato copiato negli appunti.": "The calendar URL has been copied to clipboard.", + "Prestito Programmato": "Scheduled Loan", + "Prestito Scaduto": "Overdue Loan", + "Richiesta Pendente": "Pending Request", + "Calendario non disponibile": "Calendar not available", + "Errore lettura calendario": "Calendar read error", + "Inizio": "Start", + "Oggi": "Today", + "Prestiti in corso": "Active Loans", + "Sicurezza Automatica": "Automatic Security", + "L'accesso alla cartella installer è automaticamente bloccato dopo l'installazione.": "Access to the installer folder is automatically blocked after installation.", + "Il file": "The file", + "nella root del progetto impedisce qualsiasi accesso non autorizzato.": "in the project root prevents any unauthorized access.", + "SBN Italia - Integrato": "SBN Italy - Integrated", + "Il catalogo SBN (OPAC Nazionale Italiano) è già integrato e viene interrogato automaticamente durante l'importazione ISBN. Non è necessario aggiungerlo come server esterno.": "The SBN catalog (Italian National OPAC) is already integrated and automatically queried during ISBN import. No need to add it as an external server.", + "Server Esterni SRU": "External SRU Servers", + "Server SRU aggiuntivi per Copy Cataloging. SBN Italia è già integrato (vedi sopra).": "Additional SRU servers for Copy Cataloging. SBN Italy is already integrated (see above).", + "Inserimento Manuale Dewey": "Manual Dewey Entry", + "es. 599.9, 004.6782, 641.5945": "e.g. 599.9, 004.6782, 641.5945", + "es. 599.9, 004.6782, 641.5945, 599.1": "e.g. 599.9, 004.6782, 641.5945, 599.1", + "Inserisci il codice Dewey completo (supporta fino a 4 decimali)": "Enter the complete Dewey code (supports up to 4 decimal digits)", + "Inserisci qualsiasi codice Dewey (anche se non presente nell'elenco)": "Enter any Dewey code (even if not in the list)", + "Oppure naviga per categorie:": "Or browse by categories:", + "Oppure naviga per categorie": "Or browse by categories", + "Classificazione selezionata:": "Selected classification:", + "Codice Dewey trovato e impostato": "Dewey code found and set", + "Codice Dewey non trovato": "Dewey code not found", + "Errore nel recupero dei figli": "Error retrieving children", + "Usa gli endpoint specifici per il formato legacy": "Use specific endpoints for legacy format", + "Parametro code obbligatorio.": "Code parameter required.", + "Codice parent non trovato.": "Parent code not found.", + "Codice Dewey": "Dewey Code", + "Inserisci un codice Dewey": "Enter a Dewey code", + "Formato codice non valido": "Invalid code format", + "Usa formato: 599 oppure 599.9 oppure 599.93": "Use format: 599 or 599.9 or 599.93", + "Formato codice non valido. Usa formato: 599 oppure 599.9 oppure 599.93": "Invalid code format. Use format: 599 or 599.9 or 599.93", + "Questo endpoint è supportato solo per il formato Dewey legacy. Usa /api/dewey/children.": "This endpoint is only supported for the legacy Dewey format. Use /api/dewey/children.", + "Errore nella lettura del backup.": "Error reading backup file.", + "Formato dati non valido.": "Invalid data format.", + "Errore nella lettura del file.": "Error reading file.", + "Errore nella lettura del file Dewey esistente.": "Error reading existing Dewey file.", + "File Dewey esistente non è un JSON valido o è corrotto.": "Existing Dewey file is not valid JSON or is corrupted.", + "Errore nella codifica JSON.": "JSON encoding error.", + "Attiva questa opzione solo se il tuo server supporta HTTPS. Se il tuo hosting forza già HTTPS automaticamente, non è necessario abilitarla (potrebbe causare redirect loop).": "Enable this option only if your server supports HTTPS. If your hosting already forces HTTPS automatically, you don't need to enable it (may cause redirect loop).", + "Locale non supportato.": "Unsupported locale.", + "File Dewey non trovato.": "Dewey file not found.", + "Errore nel parsing del file JSON.": "Error parsing JSON file.", + "Errori di validazione.": "Validation errors.", + "Errore nel salvataggio del file.": "Error saving file.", + "Salvato con successo.": "Saved successfully.", + "Dati validi.": "Valid data.", + "Errori di validazione nel file importato.": "Validation errors in imported file.", + "Importato con successo. %d voci totali.": "Imported successfully. %d total entries.", + "Nome file non valido.": "Invalid filename.", + "Backup non trovato.": "Backup not found.", + "Errore nel ripristino.": "Error during restore.", + "Backup ripristinato con successo.": "Backup restored successfully.", + "JSON non valido.": "Invalid JSON.", + "Nessun dato.": "No data.", + "Errore nel caricamento.": "Error loading.", + "Ripristinato": "Restored", + "Aggiungi decimale": "Add decimal", + "I dati devono essere un array non vuoto.": "Data must be a non-empty array.", + "Nodo mancante di codice a profondità %d.": "Node missing code at depth %d.", + "Il codice %s ha un nome non valido (minimo 2 caratteri).": "Code %s has an invalid name (minimum 2 characters).", + "Il codice %s ha un livello non valido (deve essere 1-7).": "Code %s has an invalid level (must be 1-7).", + "Il codice %s ha un formato non valido.": "Code %s has an invalid format.", + "Il codice %s è duplicato.": "Code %s is duplicated.", + "Il codice %s non è un figlio valido di %s.": "Code %s is not a valid child of %s.", + "Classe principale mancante: %s.": "Missing main class: %s.", + "Importato": "Imported", + "Modifiche non salvate": "Unsaved changes", + "Nome della classificazione": "Classification name", + "Formato codice non valido. Usa: XXX.Y (es. 599.1)": "Invalid code format. Use: XXX.Y (e.g. 599.1)", + "Errore nel caricamento dei backup.": "Error loading backups.", + "I dati attuali verranno sostituiti.": "Current data will be replaced.", + "Ripristinare questo backup?": "Restore this backup?", + "Questo codice esiste già.": "This code already exists.", + "Formato JSON non valido": "Invalid JSON format", + "Sessioni attive": "Active sessions", + "Gestisci i dispositivi su cui hai effettuato l'accesso con 'Ricordami'. Puoi disconnetterti da singoli dispositivi o da tutti contemporaneamente.": "Manage the devices you've logged in with 'Remember Me'. You can sign out from individual devices or all at once.", + "Caricamento sessioni...": "Loading sessions...", + "Nessuna sessione attiva. Le sessioni vengono create quando accedi con 'Ricordami' selezionato.": "No active sessions. Sessions are created when you log in with 'Remember Me' selected.", + "Sessione corrente": "Current session", + "Ultimo utilizzo": "Last used", + "Creata": "Created", + "Scade": "Expires", + "Disconnetti": "Sign out", + "Disconnetti tutti": "Sign out all", + "Vuoi disconnettere questo dispositivo?": "Do you want to sign out this device?", + "Vuoi disconnettere tutti i dispositivi? Dovrai effettuare nuovamente l'accesso su ogni dispositivo.": "Do you want to sign out all devices? You will need to log in again on each device.", + "Dispositivo sconosciuto": "Unknown device", + "sessioni attive": "active sessions", + "La richiesta ha impiegato troppo tempo. Riprova.": "The request took too long. Please try again.", + "Sessione revocata": "Session revoked", + "Impossibile revocare la sessione": "Unable to revoke session", + "Revocate %d sessioni": "Revoked %d sessions", + "ID sessione non valido": "Invalid session ID", + "Non autorizzato": "Unauthorized", + "Tabelle di Sistema": "System Tables", + "Complete": "Complete", + "%d Tabelle Mancanti": "%d Missing Tables", + "Tutte le tabelle di sistema sono presenti!": "All system tables are present!", + "Il sistema di aggiornamento è pronto.": "The update system is ready.", + "Tabelle richieste per l'aggiornamento": "Tables required for updates", + "Queste tabelle sono necessarie per tracciare gli aggiornamenti e le migrazioni del database.": "These tables are required to track updates and database migrations.", + "Cronologia degli aggiornamenti eseguiti": "History of executed updates", + "Registro delle migrazioni database applicate": "Registry of applied database migrations", + "Crea Tabelle Mancanti": "Create Missing Tables", + "Creazione tabelle...": "Creating tables...", + "Vuoi creare le tabelle di sistema mancanti? Queste sono necessarie per il sistema di aggiornamento.": "Do you want to create the missing system tables? These are required for the update system.", + "Sì, crea tabelle": "Yes, create tables", + "Tabelle create:": "Tables created:", + "%d tabelle create con successo": "%d tables created successfully", + "Errore durante la creazione delle tabelle:": "Error creating tables:", + "Tabella %s creata": "Table %s created", + "Errore creazione tabella %s:": "Error creating table %s:", + "Eccezione creazione tabella %s:": "Exception creating table %s:", + "Errore riassegnazione copia": "Copy reassignment error", + "Errore riassegnazione copia persa": "Lost copy reassignment error", + "Impossibile notificare utente: dati mancanti": "Cannot notify user: missing data", + "Notifica prenotazione disponibile inviata": "Reservation available notification sent", + "Invio notifica prenotazione fallito": "Reservation notification failed", + "Impossibile notificare utente copia non disponibile": "Cannot notify user copy unavailable", + "La copia assegnata è stata segnalata come persa o danneggiata": "The assigned copy has been reported as lost or damaged", + "La prenotazione è scaduta": "The reservation has expired", + "La copia non è più disponibile": "The copy is no longer available", + "Prenotazione: copia non disponibile": "Reservation: copy unavailable", + "Prenotazione per \"%s\" (utente: %s) messa in attesa. %s.": "Reservation for \"%s\" (user: %s) put on hold. %s.", + "Notifica copia non disponibile creata": "Copy unavailable notification created", + "Errore gestione cambio stato copia": "Copy status change handling error", + "DataIntegrity warning (store loan)": "DataIntegrity warning (store loan)", + "Notifica prestito fallita": "Loan notification failed", + "Validazione prestito fallita": "Loan validation failed", + "Riassegnazione copia fallita": "Copy reassignment failed", + "Errore elaborazione restituzione": "Return processing error", + "Rinnovo prestito fallito": "Loan renewal failed", + "Errore export CSV": "CSV export error", + "Errore annullamento prestito": "Loan cancellation error", + "Errore annullamento prenotazione": "Reservation cancellation error", + "Errore modifica data prenotazione": "Reservation date change error", + "Notifica richiesta prestito fallita": "Loan request notification failed", + "Errore richiesta prestito": "Loan request error", + "Errore prenotazione": "Reservation error", + "Riassegnazione prenotazione nuova copia fallita": "New copy reservation reassignment failed", + "Elaborazione lista attesa fallita": "Waitlist processing failed", + "La tua prenotazione per \"%s\" è stata messa in attesa. %s. Verrai notificato quando sarà disponibile una nuova copia.": "Your reservation for \"%s\" has been put on hold. %s. You will be notified when a new copy becomes available.", + "Esauriti tentativi riassegnazione copia": "Exhausted copy reassignment attempts", + "Errore gestione copia non disponibile": "Copy unavailable handling error", + "Errore invio notifica differita": "Deferred notification send error", + "Da Ritirare": "Ready for Pickup", + "Conferma Ritiro": "Confirm Pickup", + "L'utente ha ritirato il libro?": "Has the user picked up the book?", + "Ritiro confermato! Il prestito è ora in corso.": "Pickup confirmed! The loan is now active.", + "Errore nella conferma del ritiro": "Error confirming pickup", + "Giorni per ritirare un prestito approvato": "Days to pick up an approved loan", + "Ritiro confermato con successo": "Pickup confirmed successfully", + "Prestito non trovato o non pronto per il ritiro": "Loan not found or not ready for pickup", + "Recati in biblioteca durante gli orari di apertura per ritirare il libro.": "Visit the library during opening hours to pick up the book.", + "Pronto per il ritiro": "Ready for Pickup", + "Ritiro scaduto": "Pickup Expired", + "Inviata quando un prestito è stato approvato e il libro è pronto per il ritiro.": "Sent when a loan has been approved and the book is ready for pickup.", + "Inviata quando il tempo per ritirare un libro è scaduto e il prestito è stato annullato.": "Sent when the pickup deadline has passed and the loan has been cancelled.", + "Scadenza ritiro": "Pickup deadline", + "Prestiti in attesa di ritiro attivati": "Loans ready for pickup activated", + "Ritiri scaduti elaborati": "Expired pickups processed", + "Prestito pronto per ritiro non trovato": "Loan ready for pickup not found", + "Errore attivazione prestito schedulato": "Scheduled loan activation error", + "Errore elaborazione ritiro scaduto": "Expired pickup processing error", + "Il termine per il ritiro è scaduto": "The pickup deadline has passed", + "Ritiro non effettuato entro il termine previsto": "Pickup not completed within the deadline", + "Ritiro già confermato o modificato": "Pickup already confirmed or modified", + "Prestito già modificato da altra richiesta": "Loan already modified by another request", + "Errore invio notifica ritiro scaduto": "Error sending pickup expired notification", + "Nessun prestito in attesa di ritiro": "No loans waiting for pickup", + "Gestisci tutti": "Manage all", + "Ritiro annullato": "Pickup cancelled", + "Inviata quando un ritiro viene annullato dall'amministratore.": "Sent when a pickup is cancelled by an administrator.", + "Prestito non trovato o non cancellabile": "Loan not found or cannot be cancelled", + "Ritiro annullato con successo": "Pickup cancelled successfully", + "Ritiro non effettuato": "Pickup not completed", + "Errore durante l'annullamento del ritiro": "Error cancelling pickup", + "Prestito senza copia assegnata - contattare l'amministratore": "Loan has no assigned copy - contact administrator", + "(opzionale - max 200 caratteri)": "(optional - max 200 characters)", + "(opzionale - max 70 caratteri)": "(optional - max 70 characters)", + "(percorso legacy)": "(legacy path)", + "+ Aggiungi da preset...": "+ Add from preset...", + "1 evento": "1 event", + "API Key già configurata": "API Key already configured", + "API configurata": "API configured", + "Abilita Client SRU": "Enable SRU Client", + "Abilita Plugin": "Enable Plugin", + "Abilita Server SRU": "Enable SRU Server", + "Accedi e Procedi": "Login and Continue", + "Accesso negato. Permessi insufficienti.": "Access denied. Insufficient permissions.", + "Acquisito a": "Acquired at", + "Acquisito da": "Acquired from", + "Aggiornamento disponibile!": "Update available!", + "Aggiunti di recente al catalogo": "Recently added to catalog", + "Anni di Vita": "Years of Life", + "Anno a": "Year to", + "Anno da": "Year from", + "Annulla Prestito": "Cancel Loan", + "Annulla Prestito Scaduto": "Cancel Expired Loan", + "Annullare il prestito scaduto?": "Cancel the expired loan?", + "Applicazione già installata": "Application already installed", + "Approvato il %s": "Approved on %s", + "Article (Articolo/Blog)": "Article (Article/Blog)", + "Autenticazione Admin Richiesta": "Admin Authentication Required", + "Autenticazione Richiesta": "Authentication Required", + "Autenticazione richiesta.": "Authentication required.", + "Autore non specificato": "Author not specified", + "Backup creato!": "Backup created!", + "Backup eliminato con successo": "Backup deleted successfully", + "Cambia vista": "Change view", + "Cancella": "Clear", + "Caricamento del logo non riuscito. Verifica le dimensioni e il formato del file.": "Logo upload failed. Check file size and format.", + "Cerca...": "Search...", + "Codice scaffale obbligatorio": "Shelf code required", + "Collocazione:": "Location:", + "Compila tutti i campi obbligatori.": "Fill in all required fields.", + "Confermare il ritiro?": "Confirm pickup?", + "Confermi di voler attivare direttamente questo utente senza richiedere verifica email?": "Are you sure you want to directly activate this user without requiring email verification?", + "Configura API": "Configure API", + "Configura Z39.50": "Configure Z39.50", + "Consigliato: Summary Large Image per homepage.": "Recommended: Summary Large Image for homepage.", + "Contenuto della pagina": "Page content", + "Controlla la tua casella di posta e clicca sul link per resettare la password. Il link sarà valido per 2 ore.": "Check your inbox and click the link to reset your password. The link will be valid for 2 hours.", + "Controllo pre-aggiornamento fallito": "Pre-update check failed", + "Copertina del libro \"%s\"": "Book cover for \"%s\"", + "Copia eliminata con successo.": "Copy deleted successfully.", + "Copia non trovata.": "Copy not found.", + "Crea Backup": "Create Backup", + "Credenziali": "Credentials", + "Credenziali non valide o utente non admin": "Invalid credentials or user is not admin", + "Da approvare o rifiutare": "To approve or reject", + "Da ritirare": "Ready for pickup", + "Data Restituzione": "Return Date", + "Data non valida.": "Invalid date.", + "Database installato (46 tabelle)": "Database installed (46 tables)", + "Descrizione per Twitter/X. Se vuoto, usa la descrizione Open Graph.": "Description for Twitter/X. If empty, uses Open Graph description.", + "Editore %s": "Publisher %s", + "Eliminare i libri selezionati?": "Delete selected books?", + "Eliminare il file .installed dalla root del progetto e rieseguire l'installer": "Delete the .installed file from the project root and run the installer again", + "Email Admin": "Admin Email", + "Endpoint SRU:": "SRU Endpoint:", + "Errore di salvataggio. Riprova più tardi.": "Save error. Please try again later.", + "Errore di sicurezza. Ricarica la pagina e riprova": "Security error. Reload the page and try again", + "Errore di sicurezza. Riprova.": "Security error. Please try again.", + "Errore durante il recupero dei dati": "Error retrieving data", + "Errore durante il recupero delle sessioni": "Error retrieving sessions", + "Errore durante il salvataggio delle impostazioni.": "Error saving settings.", + "Errore durante la conferma del ritiro": "Error confirming pickup", + "Errore durante la revoca della sessione": "Error revoking session", + "Errore durante la revoca delle sessioni": "Error revoking sessions", + "Errore durante la ricerca": "Error during search", + "Errore durante la verifica dei libri associati": "Error verifying associated books", + "Errore durante la verifica dei prestiti attivi": "Error verifying active loans", + "Errore generazione calendario": "Calendar generation error", + "Errore generazione PDF prestito": "Error generating loan PDF", + "Errore interno del database": "Internal database error", + "Errore interno del database durante la verifica": "Internal database error during verification", + "Errore invio notifica ritiro pronto": "Error sending pickup ready notification", + "Errore nel salvataggio del file di traduzione": "Error saving translation file", + "Errore nel salvataggio del file route": "Error saving route file", + "Errore nella prenotazione.": "Error creating reservation.", + "Errore nella ricerca.": "Error during search.", + "Errore nella richiesta di prestito.": "Error creating loan request.", + "Esiste già un altro libro con lo stesso identificatore (ISBN/EAN).": "Another book with the same identifier (ISBN/EAN) already exists.", + "Esiste già un libro con lo stesso identificatore (ISBN/EAN).": "A book with the same identifier (ISBN/EAN) already exists.", + "Esplora il catalogo e scopri nuovi titoli.": "Explore the catalog and discover new titles.", + "Esplora il nostro catalogo digitale": "Explore our digital catalog", + "Espone il catalogo locale via protocollo SRU per altre biblioteche.": "Exposes local catalog via SRU protocol for other libraries.", + "File backup non trovato": "Backup file not found", + "File di aggiornamento non valido (troppo piccolo)": "Invalid update file (too small)", + "File di log non trovato": "Log file not found", + "File troppo grande. Dimensione massima 5MB.": "File too large. Maximum size 5MB.", + "Formato richiesta non valido": "Invalid request format", + "Genere creato con successo!": "Genre created successfully!", + "Google Books API collegata": "Google Books API connected", + "Hai già una prenotazione attiva per questo libro.": "You already have an active reservation for this book.", + "Hai già una richiesta di prestito in attesa per questo libro": "You already have a pending loan request for this book", + "Hai già un prestito attivo o in attesa per questo libro": "You already have an active or pending loan for this book", + "ID genere non valido": "Invalid genre ID", + "IN RITARDO": "OVERDUE", + "ISBN non trovato. Fonti consultate: %s": "ISBN not found. Sources consulted: %s", + "Il download dovrebbe iniziare automaticamente": "Download should start automatically", + "Il termine per il ritiro è scaduto. Vuoi annullare questo prestito?": "The pickup deadline has passed. Do you want to cancel this loan?", + "Immagine Twitter": "Twitter Image", + "Immagine per Twitter/X. Dimensioni consigliate: 1200x675px o 1200x1200px. Se vuoto, usa l'immagine Open Graph.": "Image for Twitter/X. Recommended dimensions: 1200x675px or 1200x1200px. If empty, uses Open Graph image.", + "Importante:": "Important:", + "Impossibile acquisire il lock. Riprova tra qualche secondo.": "Unable to acquire lock. Please try again in a few seconds.", + "Impossibile creare la mensola. Riprova più tardi.": "Unable to create shelf. Please try again later.", + "Impossibile creare lo scaffale. Riprova più tardi.": "Unable to create bookcase. Please try again later.", + "Impossibile eliminare il libro: ci sono prestiti o prenotazioni attive. Termina prima i prestiti/prenotazioni.": "Cannot delete book: there are active loans or reservations. End loans/reservations first.", + "Impossibile eliminare una copia attualmente in prestito.": "Cannot delete a copy currently on loan.", + "Impossibile eliminare: la mensola contiene libri": "Cannot delete: shelf contains books", + "Impossibile eliminare: lo scaffale contiene libri": "Cannot delete: bookcase contains books", + "Impossibile eliminare: lo scaffale contiene mensole": "Cannot delete: bookcase contains shelves", + "Impossibile leggere il file di log": "Unable to read log file", + "Impossibile modificare una copia attualmente in prestito. Prima termina il prestito o imposta lo stato su \"Disponibile\" per chiuderlo automaticamente.": "Cannot edit a copy currently on loan. First end the loan or set status to \"Available\" to close it automatically.", + "Impossibile riaprire il file ZIP": "Unable to reopen ZIP file", + "Impossibile ricalcolare la disponibilità del libro.": "Unable to recalculate book availability.", + "Impossibile salvare le impostazioni.": "Unable to save settings.", + "Impostazioni API Book Scraper salvate correttamente.": "Book Scraper API settings saved successfully.", + "Impostazioni Z39.50 salvate correttamente.": "Z39.50 settings saved successfully.", + "In Attesa": "Pending", + "In scadenza": "Expiring soon", + "Indice ISBN": "ISBN Index", + "Inserisci una breve biografia dell'autore...": "Enter a brief author biography...", + "L'applicazione risulta correttamente configurata.": "The application is correctly configured.", + "L'installazione è stata completata correttamente e tutte le verifiche sono andate a buon fine.": "Installation completed successfully and all verifications passed.", + "La data non può essere nel passato.": "Date cannot be in the past.", + "La pagina che stai cercando non esiste.": "The page you are looking for does not exist.", + "La password deve contenere almeno una lettera maiuscola, una minuscola e un numero.": "Password must contain at least one uppercase letter, one lowercase letter and a number.", + "La password deve contenere maiuscole, minuscole e numeri.": "Password must contain uppercase, lowercase and numbers.", + "La password deve essere lunga almeno 8 caratteri.": "Password must be at least 8 characters long.", + "La password non può superare i 72 caratteri.": "Password cannot exceed 72 characters.", + "La password attuale non è corretta.": "Current password is incorrect.", + "Le password non coincidono.": "Passwords do not match.", + "Le sessioni scadono automaticamente per proteggere i tuoi dati.": "Sessions expire automatically to protect your data.", + "Letta": "Read", + "Libri attualmente in prestito": "Books currently on loan", + "Libri prenotati dagli utenti": "Books reserved by users", + "MaintenanceService errore ritiri scaduti": "MaintenanceService expired pickups error", + "MaintenanceService errore scadenza ritiro": "MaintenanceService pickup expiration error", + "MaintenanceService ritiro scaduto": "MaintenanceService pickup expired", + "Mensola eliminata": "Shelf deleted", + "Modifica Route": "Edit Route", + "Mostra questa guida": "Show this guide", + "Nessun editore trovato per": "No publisher found for", + "Nessun risultato trovato per": "No results found for", + "Nessun server configurato. Aggiungine uno per iniziare.": "No servers configured. Add one to get started.", + "Nessuna copia disponibile per il periodo richiesto": "No copy available for the requested period", + "Nessuna fonte di scraping disponibile. Installa almeno un plugin di scraping (es. Open Library o Scraping Pro).": "No scraping source available. Install at least one scraping plugin (e.g. Open Library or Scraping Pro).", + "Nessuna ricerca recente": "No recent searches", + "Nessuna richiesta da approvare": "No requests to approve", + "Nome Server": "Server Name", + "Nome e cognome sono obbligatori.": "First name and last name are required.", + "Non ci sono azioni urgenti da completare.": "No urgent actions to complete.", + "Nuova ricerca": "New search", + "Nuovo libro": "New book", + "Oppure accedere a /installer/?force=1 per forzare una nuova procedura": "Or go to /installer/?force=1 to force a new installation", + "PDF generato!": "PDF generated!", + "PDF prestito non generato": "Loan PDF not generated", + "Passo": "Step", + "Percorso backup non valido": "Invalid backup path", + "Periodo": "Period", + "Permette di importare libri (Copy Cataloging) e cercare su cataloghi esterni.": "Allows importing books (Copy Cataloging) and searching external catalogs.", + "Personalizzato": "Custom", + "Personalizzazione aspetto": "Appearance customization", + "Plugin API personalizzata per scraping dati libri": "Custom API plugin for book data scraping", + "Prenotazione": "Reservation", + "Prenotazione effettuata con successo": "Reservation created successfully", + "Prenotazioni attive (slot libro)": "Active reservations (book slots)", + "Prestiti approvati in attesa di consegna": "Approved loans awaiting delivery", + "Prestiti pronti per il ritiro": "Loans ready for pickup", + "Prestito annullato!": "Loan cancelled!", + "Prestito approvato - in attesa di ritiro": "Loan approved - awaiting pickup", + "Prestito chiuso automaticamente. La copia è ora disponibile.": "Loan closed automatically. The copy is now available.", + "Prestito già processato da un altro utente": "Loan already processed by another user", + "Prestito prenotato con successo": "Loan reserved successfully", + "Prestito rinnovato correttamente. Nuova scadenza: %s": "Loan renewed successfully. New due date: %s", + "Profile (Profilo)": "Profile", + "Puoi eliminare solo copie perse, danneggiate o in manutenzione. Prima modifica lo stato della copia.": "You can only delete lost, damaged or in maintenance copies. First change the copy status.", + "Quando abilitato, il plugin interrogherà l'API durante l'importazione dati libri.": "When enabled, the plugin will query the API during book data import.", + "Questa operazione cancellerà tutti i dati esistenti. Assicurati di avere un backup.": "This operation will delete all existing data. Make sure you have a backup.", + "Questi sono i server a cui la tua biblioteca si collegherà per cercare e importare libri.": "These are the servers your library will connect to for searching and importing books.", + "Questo plugin interroga un servizio API esterno per recuperare dati libri tramite ISBN/EAN. Ha priorità 3 (più alta di Open Library).": "This plugin queries an external API service to retrieve book data via ISBN/EAN. It has priority 3 (higher than Open Library).", + "Ricerche recenti": "Recent searches", + "Richiedono attenzione immediata": "Require immediate attention", + "Richieste in Attesa": "Pending Requests", + "Richiesto:": "Required:", + "Ritiro confermato!": "Pickup confirmed!", + "Ritiro scaduto il": "Pickup expired on", + "Route aggiornate con successo": "Routes updated successfully", + "Salva Configurazione": "Save Configuration", + "Scadenza prenotazione": "Reservation expiration", + "Scadenza ritiro:": "Pickup deadline:", + "Scaduto il:": "Expired on:", + "Scaffale creato": "Bookcase created", + "Scaffale eliminato": "Bookcase deleted", + "Scaffale obbligatorio": "Bookcase required", + "Cerca globale": "Global search", + "Chiudi popup": "Close popup", + "Mostra scorciatoie": "Show shortcuts", + "Navigazione": "Navigation", + "Scorciatoie da tastiera": "Keyboard shortcuts", + "Vai a Autori": "Go to Authors", + "Vai a Dashboard": "Go to Dashboard", + "Vai a Editori": "Go to Publishers", + "Vai a Impostazioni": "Go to Settings", + "Vai a Libri": "Go to Books", + "Vai a Prestiti": "Go to Loans", + "Vai a Utenti": "Go to Users", + "poi": "then", + "Se desideri reinstallare puoi:": "If you want to reinstall you can:", + "Sei sicuro di voler eliminare questo messaggio?": "Are you sure you want to delete this message?", + "Sei sicuro di voler eliminare questo utente?": "Are you sure you want to delete this user?", + "Seleziona tutti": "Select all", + "Sessione Scaduta": "Session Expired", + "Si è verificato un errore di rete.": "A network error occurred.", + "Si è verificato un errore durante il salvataggio.": "An error occurred while saving.", + "Si è verificato un errore imprevisto.": "An unexpected error occurred.", + "Si è verificato un errore. Riprova.": "An error occurred. Please try again.", + "Sintassi": "Syntax", + "Sito": "Website", + "Statistiche aggiornate per": "Statistics updated for", + "Stato della copia aggiornato con successo.": "Copy status updated successfully.", + "Stato non valido.": "Invalid status.", + "Summary (Immagine Piccola)": "Summary (Small Image)", + "Summary Large Image (Immagine Grande)": "Summary Large Image", + "Sì, Annulla": "Yes, Cancel", + "Test Endpoint": "Test Endpoint", + "Testi Banner Cookie": "Cookie Banner Texts", + "Timeout (secondi)": "Timeout (seconds)", + "Tipo Twitter Card": "Twitter Card Type", + "Tipo di contenuto per Open Graph. Scegli 'Website' per la homepage.": "Content type for Open Graph. Choose 'Website' for homepage.", + "Titolo modale": "Modal title", + "Titolo per Twitter/X. Se vuoto, usa il titolo Open Graph.": "Title for Twitter/X. If empty, uses Open Graph title.", + "Torna alla Home": "Return to Home", + "Trigger database: azione manuale richiesta": "Database trigger: manual action required", + "Tutte le richieste sono state gestite.": "All requests have been processed.", + "Tutto sotto controllo!": "Everything under control!", + "Twitter Cards (X)": "Twitter Cards (X)", + "URL Endpoint API": "API Endpoint URL", + "URL Endpoint SRU": "SRU Endpoint URL", + "Una chiave è attualmente salvata e funzionante. Puoi aggiornarla inserendo un nuovo valore o lasciarla vuota per rimuoverla.": "A key is currently saved and working. You can update it by entering a new value or leave it empty to remove it.", + "Upload non valido": "Invalid upload", + "Utente eliminato con successo.": "User deleted successfully.", + "Utente preselezionato": "Pre-selected user", + "Vai all'applicazione": "Go to application", + "Verifica reCAPTCHA fallita. Riprova.": "reCAPTCHA verification failed. Please try again.", + "Vista griglia": "Grid view", + "Vista tabella": "Table view", + "Website (Sito Web)": "Website", + "attivata": "activated", + "deve iniziare con": "must start with", + "libri eliminati": "books deleted", + "minuti fa": "minutes ago", + "non può contenere spazi": "cannot contain spaces", + "non può essere vuota": "cannot be empty", + "ore fa": "hours ago", + "prenotazioni": "reservations", + "secondi (min: 5, max: 60)": "seconds (min: 5, max: 60)", + "(opzionale)": "(optional)", + "API Key": "API Key", + "CAP": "ZIP Code", + "CSRF": "CSRF", + "Close menu": "Close menu", + "Coda": "Queue", + "Cover": "Cover", + "Database": "Database", + "Export": "Export", + "Import": "Import", + "Library Management System": "Library Management System", + "Search": "Search", + "Toggle menu": "Toggle menu", + "Toggle search": "Toggle search", + "Import LibraryThing": "Import LibraryThing", + "Import da LibraryThing": "Import from LibraryThing", + "Importa i tuoi libri esportati da LibraryThing.com (formato TSV)": "Import your books exported from LibraryThing.com (TSV format)", + "Import CSV Standard": "Standard CSV Import", + "Carica File LibraryThing": "Upload LibraryThing File", + "Arricchisci dati con scraping web (copertine, descrizioni, etc.)": "Enrich data with web scraping (covers, descriptions, etc.)", + "Importa Libri": "Import Books", + "Import in corso...": "Importing...", + "Come Esportare da LibraryThing": "How to Export from LibraryThing", + "Campi Supportati": "Supported Fields", + "Gestione Plugin LibraryThing": "LibraryThing Plugin Management", + "Completo": "Complete", + "Incompleto": "Incomplete", + "Campi Database": "Database Fields", + "Il plugin è attualmente installato e funzionante.": "The plugin is currently installed and working.", + "Disinstalla Plugin": "Uninstall Plugin", + "ATTENZIONE: Disinstallazione Irreversibile": "WARNING: Irreversible Uninstallation", + "Confermo di voler disinstallare il plugin e di aver effettuato un backup dei dati": "I confirm I want to uninstall the plugin and have made a backup of the data", + "Export per LibraryThing": "Export for LibraryThing", + "LibraryThing TSV": "LibraryThing TSV", + "File vuoto o formato non valido": "Empty file or invalid format", + "Il file deve avere estensione .tsv, .csv o .txt": "File must have .tsv, .csv or .txt extension", + "Il file non sembra essere in formato LibraryThing. Colonne richieste: Book Id, Title, Primary Author, ISBNs": "File does not appear to be in LibraryThing format. Required columns: Book Id, Title, Primary Author, ISBNs", + "Impossibile aprire il file": "Unable to open file", + "Numero massimo di righe superato (%d)": "Maximum number of rows exceeded (%d)", + "Copertine scaricate (LibraryThing):": "Covers downloaded (LibraryThing):", + "Già presenti:": "Already present:", + "Impossibile scaricare (libro senza ISBN):": "Cannot download (book has no ISBN):", + "Copertina non trovata online:": "Cover not found online:", + "Storico Import": "Import History", + "Visualizza la cronologia degli import CSV e LibraryThing con report errori dettagliati": "View the history of CSV and LibraryThing imports with detailed error reports", + "%d import registrato": "%d import recorded", + "%d import registrati": "%d imports recorded", + "Cronologia Import": "Import History", + "Libri Importati": "Books Imported", + "Aggiornati": "Updated", + "Errori Totali": "Total Errors", + "Data/Ora": "Date/Time", + "Totali": "Total", + "Importati": "Imported", + "Durata": "Duration", + "Scarica Errori": "Download Errors", + "Nessun errore": "No errors", + "Nessun import registrato": "No imports recorded", + "Gli import CSV e LibraryThing verranno visualizzati qui": "CSV and LibraryThing imports will be displayed here", + "Gli import vengono tracciati automaticamente durante l'elaborazione": "Imports are tracked automatically during processing", + "Informazioni sullo Storico Import": "Import History Information", + "Retention: 90 giorni": "Retention: 90 days", + "I log vengono conservati per 90 giorni per conformità GDPR": "Logs are retained for 90 days for GDPR compliance", + "Scarica il report CSV per analizzare gli errori in dettaglio": "Download the CSV report to analyze errors in detail", + "Ogni errore include: numero riga, titolo libro, tipo errore e messaggio dettagliato": "Each error includes: line number, book title, error type and detailed message", + "ID import mancante": "Missing import ID", + "%d import logs eliminati (più vecchi di %d giorni)": "%d import logs deleted (older than %d days)", + "Leggi PDF": "Read PDF", + "Chiudi Visualizzatore": "Close Viewer", + "Visualizzatore PDF": "PDF Viewer", + "Usa la funzione di ricerca del browser per trovare testo nel documento": "Use your browser's search function to find text in the document", + "Usa il controllo schermo intero del viewer o del browser": "Use the viewer or browser fullscreen control", + "Condivisione": "Sharing", + "Seleziona i pulsanti di condivisione da mostrare nella pagina del libro.": "Select which share buttons to show on the book page.", + "Nessun pulsante selezionato": "No buttons selected", + "Salva impostazioni condivisione": "Save sharing settings", + "Impostazioni di condivisione aggiornate.": "Sharing settings updated.", + "Condividi su X": "Share on X", + "Condividi su Telegram": "Share on Telegram", + "Condividi su LinkedIn": "Share on LinkedIn", + "Condividi su Reddit": "Share on Reddit", + "Condividi su Pinterest": "Share on Pinterest", + "Condividi su Threads": "Share on Threads", + "Condividi su Bluesky": "Share on Bluesky", + "Condividi su Tumblr": "Share on Tumblr", + "Salva su Pocket": "Save to Pocket", + "Condividi su VK": "Share on VK", + "Condividi su LINE": "Share on LINE", + "Invia via SMS": "Send via SMS", + "Invia per email": "Send by email", + "Copia link": "Copy link", + "Collezione: %d libri, %d autori, %d editori.": "Collection: %d books, %d authors, %d publishers.", + "Catalogo bibliotecario gestito con [Pinakes](https://github.com/fabiodalez-dev/Pinakes). Disponibile in: %s.": "Library catalog powered by [Pinakes](https://github.com/fabiodalez-dev/Pinakes). Available in: %s.", + "Pagine Principali": "Main Pages", + "Sfoglia e cerca la collezione completa": "Browse and search the full book collection", + "Informazioni sulla biblioteca": "About this library", + "Calendario eventi culturali": "Cultural events calendar", + "Informativa sulla privacy": "Privacy policy", + "Feed e Scoperta": "Feeds & Discovery", + "Feed RSS": "RSS Feed", + "Ultime aggiunte al catalogo (RSS 2.0)": "Latest book additions (RSS 2.0)", + "Indice completo degli URL": "Complete URL index", + "Interoperabilità bibliotecaria (MARCXML, Dublin Core)": "Library interoperability (MARCXML, Dublin Core)", + "Autenticazione utente": "User authentication", + "Registrazione nuovo utente": "New user registration", + "Genera automaticamente un file llms.txt per rendere la biblioteca comprensibile ai modelli linguistici (LLM)": "Automatically generate an llms.txt file to make the library understandable by large language models (LLMs)", + "Cos'è llms.txt:": "What is llms.txt:", + "È uno standard emergente (llmstxt.org) che fornisce ai motori AI un sommario strutturato del sito in formato Markdown. Quando attivo, il file viene generato dinamicamente con le statistiche della biblioteca, le pagine pubbliche e le informazioni API.": "An emerging standard (llmstxt.org) that provides AI engines with a structured Markdown summary of the site. When enabled, the file is dynamically generated with library statistics, public pages, and API information.", + "Abilita llms.txt": "Enable llms.txt", + "Rende disponibile /llms.txt e lo aggiunge a robots.txt": "Makes /llms.txt available and adds it to robots.txt", + "Disattivato": "Disabled", + "Tipo Media": "Media Type", + "Disco": "Record", + "Tutti i media": "All media" +} \ No newline at end of file diff --git a/locale/it_IT.json b/locale/it_IT.json index 0993a1ac..705a8209 100644 --- a/locale/it_IT.json +++ b/locale/it_IT.json @@ -1,140 +1,148 @@ { - "Plugin attivato con successo.": "Plugin attivato con successo.", - "Plugin disattivato con successo.": "Plugin disattivato con successo.", - "Plugin disinstallato con successo.": "Plugin disinstallato con successo.", - "Plugin installato con successo.": "Plugin installato con successo.", - "Plugin non trovato.": "Plugin non trovato.", - "Plugin già attivo.": "Plugin già attivo.", - "Plugin già disattivato.": "Plugin già disattivato.", - "Plugin già installato.": "Plugin già installato.", - "File principale del plugin non trovato.": "File principale del plugin non trovato.", - "Errore durante l'attivazione: %s": "Errore durante l'attivazione: %s", - "Errore durante l'attivazione del plugin.": "Errore durante l'attivazione del plugin.", - "Errore durante la disattivazione: %s": "Errore durante la disattivazione: %s", - "Errore durante la disattivazione del plugin.": "Errore durante la disattivazione del plugin.", - "Errore durante la rimozione dal database.": "Errore durante la rimozione dal database.", - "File ZIP non trovato.": "File ZIP non trovato.", - "File ZIP troppo grande. Dimensione massima: 100 MB.": "File ZIP troppo grande. Dimensione massima: 100 MB.", - "Impossibile aprire il file ZIP.": "Impossibile aprire il file ZIP.", - "File plugin.json non trovato nel pacchetto.": "File plugin.json non trovato nel pacchetto.", - "File plugin.json non valido.": "File plugin.json non valido.", - "Campo obbligatorio mancante: %s": "Campo obbligatorio mancante: %s", - "Nome plugin non valido. Usa solo lettere, numeri, trattini o underscore.": "Nome plugin non valido. Usa solo lettere, numeri, trattini o underscore.", - "Plugin richiede PHP %s o superiore.": "Plugin richiede PHP %s o superiore.", - "Directory plugin già esistente.": "Directory plugin già esistente.", - "Impossibile creare la directory del plugin.": "Impossibile creare la directory del plugin.", - "Percorso di installazione del plugin non valido.": "Percorso di installazione del plugin non valido.", - "Il pacchetto contiene percorsi non validi.": "Il pacchetto contiene percorsi non validi.", - "Impossibile creare la struttura del plugin.": "Impossibile creare la struttura del plugin.", - "Errore durante l'estrazione del plugin.": "Errore durante l'estrazione del plugin.", - "Il pacchetto non contiene file validi.": "Il pacchetto non contiene file validi.", - "Errore durante il salvataggio nel database.": "Errore durante il salvataggio nel database.", - "Errore durante l'installazione: %s": "Errore durante l'installazione: %s", - "Non autorizzato.": "Non autorizzato.", - "Token CSRF non valido.": "Token CSRF non valido.", - "File non trovato nell'upload.": "File non trovato nell'upload.", - "Errore durante il caricamento del file (code: %s).": "Errore durante il caricamento del file (code: %s).", - "Solo file ZIP sono accettati.": "Solo file ZIP sono accettati.", - "Errore interno: %s": "Errore interno: %s", - "Formato impostazioni non valido.": "Formato impostazioni non valido.", - "Questo plugin non supporta impostazioni personalizzate.": "Questo plugin non supporta impostazioni personalizzate.", - "Chiave Google Books salvata correttamente.": "Chiave Google Books salvata correttamente.", - "Chiave Google Books rimossa.": "Chiave Google Books rimossa.", - "Import LibraryThing": "Import LibraryThing", - "Import da LibraryThing": "Import da LibraryThing", - "Importa i tuoi libri esportati da LibraryThing.com (formato TSV)": "Importa i tuoi libri esportati da LibraryThing.com (formato TSV)", - "Torna ai Libri": "Torna ai Libri", - "Import CSV Standard": "Import CSV Standard", - "Carica File LibraryThing": "Carica File LibraryThing", - "Arricchimento automatico dati": "Arricchimento automatico dati", - "Arricchisci dati con scraping web (copertine, descrizioni, etc.)": "Arricchisci dati con scraping web (copertine, descrizioni, etc.)", - "Importa Libri": "Importa Libri", - "Import in corso...": "Import in corso...", - "Come Esportare da LibraryThing": "Come Esportare da LibraryThing", - "Importante:": "Importante:", - "Campi Supportati": "Campi Supportati", - "Gestione Plugin LibraryThing": "Gestione Plugin LibraryThing", - "Installato": "Installato", - "Completo": "Completo", - "Incompleto": "Incompleto", - "Campi Database": "Campi Database", - "Il plugin è attualmente installato e funzionante.": "Il plugin è attualmente installato e funzionante.", - "Disinstalla Plugin": "Disinstalla Plugin", - "ATTENZIONE: Disinstallazione Irreversibile": "ATTENZIONE: Disinstallazione Irreversibile", - "Confermo di voler disinstallare il plugin e di aver effettuato un backup dei dati": "Confermo di voler disinstallare il plugin e di aver effettuato un backup dei dati", - "Installa Plugin": "Installa Plugin", - "Export per LibraryThing": "Export per LibraryThing", - "LibraryThing TSV": "LibraryThing TSV", - "File vuoto o formato non valido": "File vuoto o formato non valido", - "Il file deve avere estensione .tsv, .csv o .txt": "Il file deve avere estensione .tsv, .csv o .txt", - "Il file non sembra essere in formato LibraryThing. Colonne richieste: Book Id, Title, Primary Author, ISBNs": "Il file non sembra essere in formato LibraryThing. Colonne richieste: Book Id, Title, Primary Author, ISBNs", - "Nessun file caricato": "Nessun file caricato", - "Errore nel caricamento del file": "Errore nel caricamento del file", - "Aggiunge badge cliccabili alla scheda libro per cercare su Anna's Archive, Z-Library e Project Gutenberg con un click. Ispirato all'estensione browser GoodLib.": "Aggiunge badge cliccabili alla scheda libro per cercare su Anna's Archive, Z-Library e Project Gutenberg con un click. Ispirato all'estensione browser GoodLib.", - "Anna's Archive": "Anna's Archive", - "Catalogo pubblico": "Catalogo pubblico", - "Configura Fonti": "Configura Fonti", - "Domini mirror": "Domini mirror", - "Dominio non valido. Inserisci solo host o host:porta, senza percorsi.": "Dominio non valido. Inserisci solo host o host:porta, senza percorsi.", - "Dominio personalizzato...": "Dominio personalizzato...", - "Errore": "Errore", - "Errore durante l'aggiornamento del profilo.": "Errore durante l'aggiornamento del profilo.", - "Cerca su:": "Cerca su:", - "Predefinita del sito": "Predefinita del sito", - "Cerca \"%s\" su %s": "Cerca \"%s\" su %s", - "Fonti attive": "Fonti attive", - "GoodLib — External Sources": "GoodLib — Fonti Esterne", - "GoodLib — Fonti Esterne": "GoodLib — Fonti Esterne", - "Impostazioni GoodLib salvate correttamente.": "Impostazioni GoodLib salvate correttamente.", - "Mostra badge nella pagina dettaglio libro": "Mostra badge nella pagina dettaglio libro", - "Mostra badge nell'area amministrazione": "Mostra badge nell'area amministrazione", - "Mostra i badge nella pagina dettaglio libro del catalogo": "Mostra i badge nella pagina dettaglio libro del catalogo", - "Mostra i badge nella scheda libro dell'area amministrazione": "Mostra i badge nella scheda libro dell'area amministrazione", - "Project Gutenberg": "Project Gutenberg", - "Puoi scegliere un mirror suggerito oppure selezionare dominio personalizzato.": "Puoi scegliere un mirror suggerito oppure selezionare dominio personalizzato.", - "Puoi usare i mirror suggeriti oppure inserire un dominio custom.": "Puoi usare i mirror suggeriti oppure inserire un dominio custom.", - "Questi siti cambiano dominio spesso. Seleziona un mirror funzionante.": "Questi siti cambiano dominio spesso. Seleziona un mirror funzionante.", - "Scheda libro admin": "Scheda libro admin", - "Sono accettati anche domini personalizzati; se incolli un URL completo verrà salvato solo l'host.": "Sono accettati anche domini personalizzati; se incolli un URL completo verrà salvato solo l'host.", - "Visibilita": "Visibilita", - "Visibilità": "Visibilità", - "Z-Library": "Z-Library", - "Impossibile aprire il file": "Impossibile aprire il file", - "Numero massimo di righe superato (%d)": "Numero massimo di righe superato (%d)", - "Titolo obbligatorio mancante": "Titolo obbligatorio mancante", - "Copertine scaricate:": "Copertine scaricate:", - "Già presenti:": "Già presenti:", - "Impossibile scaricare (libro senza ISBN):": "Impossibile scaricare (libro senza ISBN):", - "Copertina non trovata online:": "Copertina non trovata online:", - "Errori:": "Errori:", - "Leggi PDF": "Leggi PDF", - "Chiudi Visualizzatore": "Chiudi Visualizzatore", - "Scarica PDF": "Scarica PDF", - "Visualizzatore PDF": "Visualizzatore PDF", - "Usa la funzione di ricerca del browser per trovare testo nel documento": "Usa la funzione di ricerca del browser per trovare testo nel documento", - "Usa il controllo schermo intero del viewer o del browser": "Usa il controllo schermo intero del viewer o del browser", - "Condivisione": "Condivisione", - "Seleziona i pulsanti di condivisione da mostrare nella pagina del libro.": "Seleziona i pulsanti di condivisione da mostrare nella pagina del libro.", - "Anteprima": "Anteprima", - "Nessun pulsante selezionato": "Nessun pulsante selezionato", - "Salva impostazioni condivisione": "Salva impostazioni condivisione", - "Impostazioni di condivisione aggiornate.": "Impostazioni di condivisione aggiornate.", - "Condividi su Facebook": "Condividi su Facebook", - "Condividi su X": "Condividi su X", - "Condividi su WhatsApp": "Condividi su WhatsApp", - "Condividi su Telegram": "Condividi su Telegram", - "Condividi su LinkedIn": "Condividi su LinkedIn", - "Condividi su Reddit": "Condividi su Reddit", - "Condividi su Pinterest": "Condividi su Pinterest", - "Condividi su Threads": "Condividi su Threads", - "Condividi su Bluesky": "Condividi su Bluesky", - "Condividi su Tumblr": "Condividi su Tumblr", - "Salva su Pocket": "Salva su Pocket", - "Condividi su VK": "Condividi su VK", - "Condividi su LINE": "Condividi su LINE", - "Invia via SMS": "Invia via SMS", - "Invia per email": "Invia per email", - "Copia link": "Copia link", - "Link copiato!": "Link copiato!", - "Condividi": "Condividi" -} + "Plugin attivato con successo.": "Plugin attivato con successo.", + "Plugin disattivato con successo.": "Plugin disattivato con successo.", + "Plugin disinstallato con successo.": "Plugin disinstallato con successo.", + "Plugin installato con successo.": "Plugin installato con successo.", + "Plugin non trovato.": "Plugin non trovato.", + "Plugin già attivo.": "Plugin già attivo.", + "Plugin già disattivato.": "Plugin già disattivato.", + "Plugin già installato.": "Plugin già installato.", + "File principale del plugin non trovato.": "File principale del plugin non trovato.", + "Errore durante l'attivazione: %s": "Errore durante l'attivazione: %s", + "Errore durante l'attivazione del plugin.": "Errore durante l'attivazione del plugin.", + "Errore durante la disattivazione: %s": "Errore durante la disattivazione: %s", + "Errore durante la disattivazione del plugin.": "Errore durante la disattivazione del plugin.", + "Errore durante la rimozione dal database.": "Errore durante la rimozione dal database.", + "File ZIP non trovato.": "File ZIP non trovato.", + "File ZIP troppo grande. Dimensione massima: 100 MB.": "File ZIP troppo grande. Dimensione massima: 100 MB.", + "Impossibile aprire il file ZIP.": "Impossibile aprire il file ZIP.", + "File plugin.json non trovato nel pacchetto.": "File plugin.json non trovato nel pacchetto.", + "File plugin.json non valido.": "File plugin.json non valido.", + "Campo obbligatorio mancante: %s": "Campo obbligatorio mancante: %s", + "Nome plugin non valido. Usa solo lettere, numeri, trattini o underscore.": "Nome plugin non valido. Usa solo lettere, numeri, trattini o underscore.", + "Plugin richiede PHP %s o superiore.": "Plugin richiede PHP %s o superiore.", + "Directory plugin già esistente.": "Directory plugin già esistente.", + "Impossibile creare la directory del plugin.": "Impossibile creare la directory del plugin.", + "Percorso di installazione del plugin non valido.": "Percorso di installazione del plugin non valido.", + "Il pacchetto contiene percorsi non validi.": "Il pacchetto contiene percorsi non validi.", + "Impossibile creare la struttura del plugin.": "Impossibile creare la struttura del plugin.", + "Errore durante l'estrazione del plugin.": "Errore durante l'estrazione del plugin.", + "Il pacchetto non contiene file validi.": "Il pacchetto non contiene file validi.", + "Errore durante il salvataggio nel database.": "Errore durante il salvataggio nel database.", + "Errore durante l'installazione: %s": "Errore durante l'installazione: %s", + "Non autorizzato.": "Non autorizzato.", + "Token CSRF non valido.": "Token CSRF non valido.", + "File non trovato nell'upload.": "File non trovato nell'upload.", + "Errore durante il caricamento del file (code: %s).": "Errore durante il caricamento del file (code: %s).", + "Solo file ZIP sono accettati.": "Solo file ZIP sono accettati.", + "Errore interno: %s": "Errore interno: %s", + "Formato impostazioni non valido.": "Formato impostazioni non valido.", + "Questo plugin non supporta impostazioni personalizzate.": "Questo plugin non supporta impostazioni personalizzate.", + "Chiave Google Books salvata correttamente.": "Chiave Google Books salvata correttamente.", + "Chiave Google Books rimossa.": "Chiave Google Books rimossa.", + "Import LibraryThing": "Import LibraryThing", + "Import da LibraryThing": "Import da LibraryThing", + "Importa i tuoi libri esportati da LibraryThing.com (formato TSV)": "Importa i tuoi libri esportati da LibraryThing.com (formato TSV)", + "Torna ai Libri": "Torna ai Libri", + "Import CSV Standard": "Import CSV Standard", + "Carica File LibraryThing": "Carica File LibraryThing", + "Arricchimento automatico dati": "Arricchimento automatico dati", + "Arricchisci dati con scraping web (copertine, descrizioni, etc.)": "Arricchisci dati con scraping web (copertine, descrizioni, etc.)", + "Importa Libri": "Importa Libri", + "Import in corso...": "Import in corso...", + "Come Esportare da LibraryThing": "Come Esportare da LibraryThing", + "Importante:": "Importante:", + "Campi Supportati": "Campi Supportati", + "Gestione Plugin LibraryThing": "Gestione Plugin LibraryThing", + "Installato": "Installato", + "Completo": "Completo", + "Incompleto": "Incompleto", + "Campi Database": "Campi Database", + "Il plugin è attualmente installato e funzionante.": "Il plugin è attualmente installato e funzionante.", + "Disinstalla Plugin": "Disinstalla Plugin", + "ATTENZIONE: Disinstallazione Irreversibile": "ATTENZIONE: Disinstallazione Irreversibile", + "Confermo di voler disinstallare il plugin e di aver effettuato un backup dei dati": "Confermo di voler disinstallare il plugin e di aver effettuato un backup dei dati", + "Installa Plugin": "Installa Plugin", + "Export per LibraryThing": "Export per LibraryThing", + "LibraryThing TSV": "LibraryThing TSV", + "File vuoto o formato non valido": "File vuoto o formato non valido", + "Il file deve avere estensione .tsv, .csv o .txt": "Il file deve avere estensione .tsv, .csv o .txt", + "Il file non sembra essere in formato LibraryThing. Colonne richieste: Book Id, Title, Primary Author, ISBNs": "Il file non sembra essere in formato LibraryThing. Colonne richieste: Book Id, Title, Primary Author, ISBNs", + "Nessun file caricato": "Nessun file caricato", + "Errore nel caricamento del file": "Errore nel caricamento del file", + "Aggiunge badge cliccabili alla scheda libro per cercare su Anna's Archive, Z-Library e Project Gutenberg con un click. Ispirato all'estensione browser GoodLib.": "Aggiunge badge cliccabili alla scheda libro per cercare su Anna's Archive, Z-Library e Project Gutenberg con un click. Ispirato all'estensione browser GoodLib.", + "Anna's Archive": "Anna's Archive", + "Catalogo pubblico": "Catalogo pubblico", + "Configura Fonti": "Configura Fonti", + "Domini mirror": "Domini mirror", + "Dominio non valido. Inserisci solo host o host:porta, senza percorsi.": "Dominio non valido. Inserisci solo host o host:porta, senza percorsi.", + "Dominio personalizzato...": "Dominio personalizzato...", + "Errore": "Errore", + "Errore durante l'aggiornamento del profilo.": "Errore durante l'aggiornamento del profilo.", + "Cerca su:": "Cerca su:", + "Predefinita del sito": "Predefinita del sito", + "Cerca \"%s\" su %s": "Cerca \"%s\" su %s", + "Fonti attive": "Fonti attive", + "GoodLib — External Sources": "GoodLib — Fonti Esterne", + "GoodLib — Fonti Esterne": "GoodLib — Fonti Esterne", + "Impostazioni GoodLib salvate correttamente.": "Impostazioni GoodLib salvate correttamente.", + "Mostra badge nella pagina dettaglio libro": "Mostra badge nella pagina dettaglio libro", + "Mostra badge nell'area amministrazione": "Mostra badge nell'area amministrazione", + "Mostra i badge nella pagina dettaglio libro del catalogo": "Mostra i badge nella pagina dettaglio libro del catalogo", + "Mostra i badge nella scheda libro dell'area amministrazione": "Mostra i badge nella scheda libro dell'area amministrazione", + "Project Gutenberg": "Project Gutenberg", + "Puoi scegliere un mirror suggerito oppure selezionare dominio personalizzato.": "Puoi scegliere un mirror suggerito oppure selezionare dominio personalizzato.", + "Puoi usare i mirror suggeriti oppure inserire un dominio custom.": "Puoi usare i mirror suggeriti oppure inserire un dominio custom.", + "Questi siti cambiano dominio spesso. Seleziona un mirror funzionante.": "Questi siti cambiano dominio spesso. Seleziona un mirror funzionante.", + "Scheda libro admin": "Scheda libro admin", + "Sono accettati anche domini personalizzati; se incolli un URL completo verrà salvato solo l'host.": "Sono accettati anche domini personalizzati; se incolli un URL completo verrà salvato solo l'host.", + "Visibilita": "Visibilita", + "Visibilità": "Visibilità", + "Z-Library": "Z-Library", + "Impossibile aprire il file": "Impossibile aprire il file", + "Numero massimo di righe superato (%d)": "Numero massimo di righe superato (%d)", + "Titolo obbligatorio mancante": "Titolo obbligatorio mancante", + "Copertine scaricate:": "Copertine scaricate:", + "Già presenti:": "Già presenti:", + "Impossibile scaricare (libro senza ISBN):": "Impossibile scaricare (libro senza ISBN):", + "Copertina non trovata online:": "Copertina non trovata online:", + "Errori:": "Errori:", + "Leggi PDF": "Leggi PDF", + "Chiudi Visualizzatore": "Chiudi Visualizzatore", + "Scarica PDF": "Scarica PDF", + "Visualizzatore PDF": "Visualizzatore PDF", + "Usa la funzione di ricerca del browser per trovare testo nel documento": "Usa la funzione di ricerca del browser per trovare testo nel documento", + "Usa il controllo schermo intero del viewer o del browser": "Usa il controllo schermo intero del viewer o del browser", + "Condivisione": "Condivisione", + "Seleziona i pulsanti di condivisione da mostrare nella pagina del libro.": "Seleziona i pulsanti di condivisione da mostrare nella pagina del libro.", + "Anteprima": "Anteprima", + "Nessun pulsante selezionato": "Nessun pulsante selezionato", + "Salva impostazioni condivisione": "Salva impostazioni condivisione", + "Impostazioni di condivisione aggiornate.": "Impostazioni di condivisione aggiornate.", + "Condividi su Facebook": "Condividi su Facebook", + "Condividi su X": "Condividi su X", + "Condividi su WhatsApp": "Condividi su WhatsApp", + "Condividi su Telegram": "Condividi su Telegram", + "Condividi su LinkedIn": "Condividi su LinkedIn", + "Condividi su Reddit": "Condividi su Reddit", + "Condividi su Pinterest": "Condividi su Pinterest", + "Condividi su Threads": "Condividi su Threads", + "Condividi su Bluesky": "Condividi su Bluesky", + "Condividi su Tumblr": "Condividi su Tumblr", + "Salva su Pocket": "Salva su Pocket", + "Condividi su VK": "Condividi su VK", + "Condividi su LINE": "Condividi su LINE", + "Invia via SMS": "Invia via SMS", + "Invia per email": "Invia per email", + "Copia link": "Copia link", + "Link copiato!": "Link copiato!", + "Condividi": "Condividi", + "Tipo Media": "Tipo Media", + "Libro": "Libro", + "Disco": "Disco", + "Tutti i media": "Tutti i media", + "Filtra per tipo": "Filtra per tipo", + "Audiolibro": "Audiolibro", + "DVD": "DVD", + "Altro": "Altro" +} \ No newline at end of file diff --git a/storage/plugins/discogs/DiscogsPlugin.php b/storage/plugins/discogs/DiscogsPlugin.php index cf16e319..448cf184 100644 --- a/storage/plugins/discogs/DiscogsPlugin.php +++ b/storage/plugins/discogs/DiscogsPlugin.php @@ -380,6 +380,7 @@ private function mapReleaseToPinakes(array $release, array $searchResult, string 'isbn13' => null, 'ean' => $isbn, 'country' => $release['country'] ?? null, + 'tipo_media' => 'disco', 'source' => 'discogs', 'discogs_id' => $release['id'] ?? null, ]; diff --git a/test-results/.last-run.json b/test-results/.last-run.json new file mode 100644 index 00000000..cbcc1fba --- /dev/null +++ b/test-results/.last-run.json @@ -0,0 +1,4 @@ +{ + "status": "passed", + "failedTests": [] +} \ No newline at end of file From e3c383b9db66fb96e2e19042185b453aaa296575 Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Mon, 30 Mar 2026 17:34:38 +0200 Subject: [PATCH 09/28] fix: Discogs enrichment + CodeRabbit review fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add extractCredits() for Discogs extra artists (producers, engineers) - Map all Discogs fields: styles→keywords, notes, weight, price, track count, catalog number, physical description, credits, URL - Fix isMusic() false positive on "audiolibro" (exact match, not substring) - Escape formatTracklist() fallback text (XSS prevention) - updateBasic() only persists tipo_media when explicitly provided - Add format display name aliases (cd, vinyl, cassette, blu_ray) --- app/Models/BookRepository.php | 4 +- app/Support/MediaLabels.php | 27 ++++-- pinakes-v0.5.3.zip.sha256 | 1 + storage/plugins/discogs/DiscogsPlugin.php | 112 +++++++++++++++++++++- 4 files changed, 129 insertions(+), 15 deletions(-) create mode 100644 pinakes-v0.5.3.zip.sha256 diff --git a/app/Models/BookRepository.php b/app/Models/BookRepository.php index a064abb6..928c597c 100644 --- a/app/Models/BookRepository.php +++ b/app/Models/BookRepository.php @@ -643,8 +643,8 @@ public function updateBasic(int $id, array $data): bool if ($this->hasColumn('formato')) { $addSet('formato', 's', $data['formato'] ?? null); } - if ($this->hasColumn('tipo_media')) { - $val = $data['tipo_media'] ?? null; + if ($this->hasColumn('tipo_media') && array_key_exists('tipo_media', $data)) { + $val = is_string($data['tipo_media']) ? $data['tipo_media'] : null; $addSet('tipo_media', 's', $this->normalizeEnumValue($val, 'tipo_media', 'libro')); } if ($this->hasColumn('peso')) { diff --git a/app/Support/MediaLabels.php b/app/Support/MediaLabels.php index 1eb507ee..33820f25 100644 --- a/app/Support/MediaLabels.php +++ b/app/Support/MediaLabels.php @@ -10,9 +10,9 @@ */ class MediaLabels { - /** @var array */ - private static array $musicFormats = [ - 'cd_audio', 'vinile', 'cassetta', 'vinyl', 'lp', 'cd', 'cassette', 'audio', 'musik', 'music' + /** Exact music format tokens (no substring matching to avoid 'audiolibro' false positive) */ + private const MUSIC_FORMATS = [ + 'cd_audio', 'vinile', 'cassetta', 'vinyl', 'lp', 'cd', 'cassette', 'audiocassetta', ]; /** @@ -27,10 +27,13 @@ public static function isMusic(?string $formato, ?string $tipoMedia = null): boo return false; } $lower = strtolower(trim($formato)); - foreach (self::$musicFormats as $musicFormat) { - if (str_contains($lower, $musicFormat)) { - return true; - } + // Exact match first + if (in_array($lower, self::MUSIC_FORMATS, true)) { + return true; + } + // Word-boundary match for generic terms + if (preg_match('/\b(?:music|musik)\b/i', $lower) === 1) { + return true; } return false; } @@ -42,12 +45,18 @@ public static function isMusic(?string $formato, ?string $tipoMedia = null): boo 'cartaceo' => 'Cartaceo', 'ebook' => 'eBook', 'audiolibro' => 'Audiolibro', + 'audiobook' => 'Audiolibro', 'cd_audio' => 'CD Audio', + 'cd' => 'CD', 'vinile' => 'Vinile', + 'vinyl' => 'Vinile', 'lp' => 'LP', 'cassetta' => 'Cassetta', + 'cassette' => 'Cassetta', + 'audiocassetta' => 'Audiocassetta', 'dvd' => 'DVD', 'blu-ray' => 'Blu-ray', + 'blu_ray' => 'Blu-ray', 'digitale' => 'Digitale', 'altro' => 'Altro', ]; @@ -91,7 +100,7 @@ public static function formatTracklist(string $text): string } if ($tracks === false || count($tracks) < 2) { - return $text; // Not a tracklist, return as-is + return nl2br(htmlspecialchars($text, ENT_QUOTES, 'UTF-8'), false); } $items = []; @@ -105,7 +114,7 @@ public static function formatTracklist(string $text): string } if (empty($items)) { - return $text; + return nl2br(htmlspecialchars($text, ENT_QUOTES, 'UTF-8'), false); } $html = '
    '; diff --git a/pinakes-v0.5.3.zip.sha256 b/pinakes-v0.5.3.zip.sha256 new file mode 100644 index 00000000..20372163 --- /dev/null +++ b/pinakes-v0.5.3.zip.sha256 @@ -0,0 +1 @@ +5803bd07a77e04ee1896556a0189f56697f1b7da516dd92bf0a5587f8efc8880 pinakes-v0.5.3.zip diff --git a/storage/plugins/discogs/DiscogsPlugin.php b/storage/plugins/discogs/DiscogsPlugin.php index 448cf184..9effbafa 100644 --- a/storage/plugins/discogs/DiscogsPlugin.php +++ b/storage/plugins/discogs/DiscogsPlugin.php @@ -325,7 +325,7 @@ private function mapReleaseToPinakes(array $release, array $searchResult, string $artists = $this->extractArtists($release['artists'] ?? []); $firstArtist = $artists[0] ?? ''; - // Build tracklist description + // Build tracklist description as HTML
      $description = $this->buildTracklistDescription($release['tracklist'] ?? []); // Get cover image: prefer full images (requires auth), fallback to search thumbnails @@ -338,10 +338,12 @@ private function mapReleaseToPinakes(array $release, array $searchResult, string $coverUrl = $searchResult['thumb']; } - // Extract publisher (label) + // Extract publisher (label + catalog number) $publisher = ''; + $catalogNumber = ''; if (!empty($release['labels'][0]['name'])) { $publisher = trim($release['labels'][0]['name']); + $catalogNumber = trim($release['labels'][0]['catno'] ?? ''); } // Extract series @@ -353,17 +355,86 @@ private function mapReleaseToPinakes(array $release, array $searchResult, string // Map Discogs format to Pinakes format $format = $this->mapDiscogsFormat($release['formats'] ?? []); - // Extract first genre + // Extract genre + styles as keywords $genre = ''; if (!empty($release['genres'][0])) { $genre = trim($release['genres'][0]); } + $styles = []; + foreach ($release['styles'] ?? [] as $style) { + $s = trim((string) $style); + if ($s !== '') { + $styles[] = $s; + } + } + $keywords = implode(', ', $styles); // Year $year = isset($release['year']) && $release['year'] > 0 - ? (string)$release['year'] + ? (string) $release['year'] : null; + // Weight in kg (Discogs gives grams) + $weightKg = null; + if (!empty($release['estimated_weight']) && is_numeric($release['estimated_weight'])) { + $weightKg = round((float) $release['estimated_weight'] / 1000, 3); + } + + // Price + $price = null; + if (!empty($release['lowest_price']) && is_numeric($release['lowest_price'])) { + $price = (string) $release['lowest_price']; + } + + // Number of tracks + $trackCount = 0; + foreach ($release['tracklist'] ?? [] as $track) { + if (($track['type_'] ?? 'track') === 'track' && trim($track['title'] ?? '') !== '') { + $trackCount++; + } + } + + // Format quantity (number of discs) + $formatQty = (int) ($release['format_quantity'] ?? 1); + + // Notes from Discogs + $discogsNotes = trim($release['notes'] ?? ''); + + // Build note_varie with extra metadata + $noteParts = []; + if ($catalogNumber !== '') { + $noteParts[] = 'Cat#: ' . $catalogNumber; + } + if (!empty($release['country'])) { + $noteParts[] = 'Country: ' . $release['country']; + } + if ($formatQty > 1) { + $noteParts[] = $formatQty . ' discs'; + } + // Extra artists (producers, engineers, etc.) + $credits = $this->extractCredits($release['extraartists'] ?? []); + if ($credits !== '') { + $noteParts[] = $credits; + } + if ($discogsNotes !== '') { + $noteParts[] = $discogsNotes; + } + $noteVarie = implode("\n", $noteParts); + + // Discogs URL for sameAs + $discogsUrl = $release['uri'] ?? null; + + // Physical description (format details) + $physicalDesc = ''; + if (!empty($release['formats'][0])) { + $fmt = $release['formats'][0]; + $parts = [$fmt['name'] ?? '']; + foreach ($fmt['descriptions'] ?? [] as $desc) { + $parts[] = $desc; + } + $physicalDesc = implode(', ', array_filter($parts)); + } + return [ 'title' => $title, 'author' => $firstArtist, @@ -376,6 +447,7 @@ private function mapReleaseToPinakes(array $release, array $searchResult, string 'series' => $series ?? '', 'format' => $format, 'genres' => $genre, + 'parole_chiave' => $keywords, 'isbn10' => null, 'isbn13' => null, 'ean' => $isbn, @@ -383,6 +455,13 @@ private function mapReleaseToPinakes(array $release, array $searchResult, string 'tipo_media' => 'disco', 'source' => 'discogs', 'discogs_id' => $release['id'] ?? null, + 'peso' => $weightKg, + 'prezzo' => $price, + 'numero_pagine' => $trackCount > 0 ? (string) $trackCount : null, + 'note_varie' => $noteVarie !== '' ? $noteVarie : null, + 'physical_description' => $physicalDesc !== '' ? $physicalDesc : null, + 'numero_inventario' => $catalogNumber !== '' ? $catalogNumber : null, + 'discogs_url' => $discogsUrl, ]; } @@ -435,6 +514,31 @@ private function extractArtists(array $artists): array return $names; } + /** + * Extract credits from Discogs extraartists (producers, engineers, etc.) + */ + private function extractCredits(array $extraartists): string + { + if (empty($extraartists)) { + return ''; + } + $credits = []; + foreach ($extraartists as $person) { + $name = trim($person['name'] ?? ''); + $role = trim($person['role'] ?? ''); + if ($name === '' || $role === '') { + continue; + } + // Clean disambiguation suffix + $name = (string) preg_replace('/\s*\(\d+\)$/', '', $name); + $credits[] = $role . ': ' . $name; + } + if (empty($credits)) { + return ''; + } + return 'Credits: ' . implode(', ', $credits); + } + /** * Build a tracklist description from Discogs tracklist data * From ed8694cc01da949a2ef6b7938f58a12234034790 Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Mon, 30 Mar 2026 18:09:00 +0200 Subject: [PATCH 10/28] fix: address CodeRabbit review findings (round 3) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - EAN→Barcode label for music in frontend book-detail - HTML escaping in catalog-grid badge, catalog filter, book_form option - Remove tipo_media default from LibriController (let scraped values flow) - CSV import: null tipo_media on update preserves existing value - DataTable column index shift after tipo_media column - German "Cartaceo" → "Druckausgabe" - Remove Discogs early-return guard (let merge fill missing fields) --- app/Controllers/CsvImportController.php | 10 ++++++---- app/Controllers/LibriController.php | 2 -- app/Views/frontend/book-detail.php | 6 +++--- app/Views/frontend/catalog-grid.php | 4 ++-- app/Views/frontend/catalog.php | 2 +- app/Views/libri/index.php | 10 ++++++---- app/Views/libri/partials/book_form.php | 2 +- locale/de_DE.json | 2 +- storage/plugins/discogs/DiscogsPlugin.php | 6 ++---- 9 files changed, 22 insertions(+), 22 deletions(-) diff --git a/app/Controllers/CsvImportController.php b/app/Controllers/CsvImportController.php index 1d00e798..b15319ac 100644 --- a/app/Controllers/CsvImportController.php +++ b/app/Controllers/CsvImportController.php @@ -770,7 +770,9 @@ private function parseCsvRow(array $row): array 'genere' => !empty($row['genere']) ? trim($row['genere']) : null, 'descrizione' => !empty($row['descrizione']) ? trim($row['descrizione']) : null, 'formato' => !empty($row['formato']) ? trim($row['formato']) : 'cartaceo', - 'tipo_media' => !empty($row['tipo_media']) ? trim($row['tipo_media']) : \App\Support\MediaLabels::inferTipoMedia($row['formato'] ?? ''), + 'tipo_media' => array_key_exists('tipo_media', $row) && trim((string) ($row['tipo_media'] ?? '')) !== '' + ? trim($row['tipo_media']) + : null, 'prezzo' => $this->validatePrice($row['prezzo'] ?? ''), 'copie_totali' => !empty($row['copie_totali']) ? (int)$row['copie_totali'] : 1, 'collana' => !empty($row['collana']) ? trim($row['collana']) : null, @@ -1240,7 +1242,7 @@ private function updateBook(\mysqli $db, int $bookId, array $data, ?int $editorI genere_id = ?, descrizione = ?, formato = ?, - tipo_media = ?, + tipo_media = COALESCE(?, tipo_media), prezzo = ?, editore_id = ?, collana = ?, @@ -1264,7 +1266,7 @@ classificazione_dewey = ?, $pagine = !empty($data['numero_pagine']) ? (int) $data['numero_pagine'] : null; $descrizione = !empty($data['descrizione']) ? $data['descrizione'] : null; $formato = !empty($data['formato']) ? $data['formato'] : 'cartaceo'; - $tipoMedia = !empty($data['tipo_media']) ? $data['tipo_media'] : \App\Support\MediaLabels::inferTipoMedia($formato); + $tipoMedia = $data['tipo_media'] ?? null; // null = keep existing (COALESCE in SQL) $prezzo = $data['prezzo'] ?? null; $collana = !empty($data['collana']) ? $data['collana'] : null; $numeroSerie = !empty($data['numero_serie']) ? $data['numero_serie'] : null; @@ -1355,7 +1357,7 @@ classificazione_dewey, stato, created_at $pagine = !empty($data['numero_pagine']) ? (int) $data['numero_pagine'] : null; $descrizione = !empty($data['descrizione']) ? $data['descrizione'] : null; $formato = !empty($data['formato']) ? $data['formato'] : 'cartaceo'; - $tipoMedia = !empty($data['tipo_media']) ? $data['tipo_media'] : \App\Support\MediaLabels::inferTipoMedia($formato); + $tipoMedia = $data['tipo_media'] ?? \App\Support\MediaLabels::inferTipoMedia($formato); $prezzo = $data['prezzo'] ?? null; $copie = !empty($data['copie_totali']) ? (int) $data['copie_totali'] : 1; // Add bounds checking to prevent DoS attacks diff --git a/app/Controllers/LibriController.php b/app/Controllers/LibriController.php index 5ef673ee..925ce41c 100644 --- a/app/Controllers/LibriController.php +++ b/app/Controllers/LibriController.php @@ -649,7 +649,6 @@ public function store(Request $request, Response $response, mysqli $db): Respons 'descrizione' => '', 'parole_chiave' => '', 'formato' => '', - 'tipo_media' => 'libro', 'peso' => null, 'dimensioni' => '', 'prezzo' => null, @@ -1190,7 +1189,6 @@ public function update(Request $request, Response $response, mysqli $db, int $id 'descrizione' => '', 'parole_chiave' => '', 'formato' => '', - 'tipo_media' => 'libro', 'peso' => null, 'dimensioni' => '', 'prezzo' => null, diff --git a/app/Views/frontend/book-detail.php b/app/Views/frontend/book-detail.php index 4dbc1151..a003d664 100644 --- a/app/Views/frontend/book-detail.php +++ b/app/Views/frontend/book-detail.php @@ -1705,9 +1705,9 @@ class="book-cover-large img-fluid"
      - +
      -
      +
      ISBN-13
      @@ -1721,7 +1721,7 @@ class="book-cover-large img-fluid"
      -
      EAN
      +
      diff --git a/app/Views/frontend/catalog-grid.php b/app/Views/frontend/catalog-grid.php index 2ec5b411..f122ba73 100644 --- a/app/Views/frontend/catalog-grid.php +++ b/app/Views/frontend/catalog-grid.php @@ -39,8 +39,8 @@ - - + +
      diff --git a/app/Views/frontend/catalog.php b/app/Views/frontend/catalog.php index ec76c3e2..97ea759a 100644 --- a/app/Views/frontend/catalog.php +++ b/app/Views/frontend/catalog.php @@ -1317,7 +1317,7 @@ class="filter-option count + onclick="updateFilter('tipo_media', ); return false;"> diff --git a/app/Views/libri/index.php b/app/Views/libri/index.php index 37d46bc1..a8a0edcf 100644 --- a/app/Views/libri/index.php +++ b/app/Views/libri/index.php @@ -812,7 +812,7 @@ className: 'text-center align-middle', } } ], - order: [[3, 'asc']], + order: [[4, 'asc']], pageLength: 25, lengthMenu: [[10, 25, 50, 100], [10, 25, 50, 100]], language: typeof window.getDtLanguage === 'function' ? window.getDtLanguage() : {}, @@ -1446,7 +1446,7 @@ function renderGrid() { #libri-table tbody tr:hover { @apply bg-gray-50; } /* Info column text wrapping */ -#libri-table tbody td:nth-child(4) { white-space: normal !important; word-wrap: break-word; } +#libri-table tbody td:nth-child(5) { white-space: normal !important; word-wrap: break-word; } .dataTables_wrapper .dataTables_length select { @apply py-1.5 px-2 text-sm border border-gray-300 rounded-lg bg-white; } .dataTables_wrapper .dataTables_info { @apply text-sm text-gray-600 py-3; } @@ -1462,8 +1462,10 @@ function renderGrid() { .dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_info { @apply text-xs; } - /* Hide cover column on mobile */ + /* Hide media-type and cover columns on mobile */ #libri-table thead th:nth-child(3), - #libri-table tbody td:nth-child(3) { display: none; } + #libri-table tbody td:nth-child(3), + #libri-table thead th:nth-child(4), + #libri-table tbody td:nth-child(4) { display: none; } } diff --git a/app/Views/libri/partials/book_form.php b/app/Views/libri/partials/book_form.php index 457ba5b4..85aa4ac4 100644 --- a/app/Views/libri/partials/book_form.php +++ b/app/Views/libri/partials/book_form.php @@ -425,7 +425,7 @@ class="choices__input choices__input--cloned flex-1 bg-transparent focus:outline + placeholder="">
      + + +

      diff --git a/test-results/.last-run.json b/test-results/.last-run.json deleted file mode 100644 index cbcc1fba..00000000 --- a/test-results/.last-run.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "status": "passed", - "failedTests": [] -} \ No newline at end of file From 063e8ff3978ecced9db4f8892f7d763a170f6fda Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Mon, 30 Mar 2026 22:04:45 +0200 Subject: [PATCH 12/28] test: add 5 advanced Discogs E2E tests 1. Admin list tipo_media=disco filter via DataTable API 2. CSV export includes tipo_media column with correct value 3. Schema.org tipo_media stored as 'disco' vs 'libro' in DB 4. Admin detail: music labels + tracklist vs book labels + prose 5. Edit persistence: tipo_media='disco' survives form save --- tests/discogs-advanced.spec.js | 218 +++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 tests/discogs-advanced.spec.js diff --git a/tests/discogs-advanced.spec.js b/tests/discogs-advanced.spec.js new file mode 100644 index 00000000..d7c76dc3 --- /dev/null +++ b/tests/discogs-advanced.spec.js @@ -0,0 +1,218 @@ +// @ts-check +/** + * Advanced Discogs tests: tipo_media filtering, CSV export, Schema.org, + * tracklist rendering, and edit persistence. + * Requires: app installed, admin user, Discogs plugin active, music records in DB. + */ +const { test, expect } = require('@playwright/test'); +const { execFileSync } = require('child_process'); + +const BASE = process.env.E2E_BASE_URL || 'http://localhost:8081'; +const ADMIN_EMAIL = process.env.E2E_ADMIN_EMAIL || ''; +const ADMIN_PASS = process.env.E2E_ADMIN_PASS || ''; +const DB_USER = process.env.E2E_DB_USER || ''; +const DB_PASS = process.env.E2E_DB_PASS || ''; +const DB_NAME = process.env.E2E_DB_NAME || ''; +const DB_SOCKET = process.env.E2E_DB_SOCKET || ''; +const RUN_ID = Date.now(); + +function dbQuery(sql) { + const args = ['-u', DB_USER, `-p${DB_PASS}`, DB_NAME, '-N', '-B', '-e', sql]; + if (DB_SOCKET) args.splice(3, 0, '-S', DB_SOCKET); + return execFileSync('mysql', args, { encoding: 'utf-8', timeout: 10000 }).trim(); +} + +function dbExec(sql) { + const args = ['-u', DB_USER, `-p${DB_PASS}`, DB_NAME, '-e', sql]; + if (DB_SOCKET) args.splice(3, 0, '-S', DB_SOCKET); + execFileSync('mysql', args, { encoding: 'utf-8', timeout: 10000 }); +} + +test.describe.serial('Discogs Advanced Tests', () => { + /** @type {import('@playwright/test').Page} */ + let page; + /** @type {import('@playwright/test').BrowserContext} */ + let context; + let musicBookId = ''; + let bookBookId = ''; + + test.beforeAll(async ({ browser }) => { + test.skip(!ADMIN_EMAIL || !ADMIN_PASS || !DB_USER || !DB_PASS || !DB_NAME, 'Missing E2E env vars'); + context = await browser.newContext(); + page = await context.newPage(); + + // Login + await page.goto(`${BASE}/accedi`); + await page.fill('input[name="email"]', ADMIN_EMAIL); + await page.fill('input[name="password"]', ADMIN_PASS); + await page.click('button[type="submit"]'); + await page.waitForURL(/\/admin\//, { timeout: 15000 }); + + // Seed a music record and a book for comparison + dbExec( + "INSERT INTO libri (titolo, formato, tipo_media, ean, copie_totali, copie_disponibili, descrizione, note_varie, created_at, updated_at) " + + "VALUES ('E2E_ADV_CD_" + RUN_ID + "', 'cd_audio', 'disco', '1234567890123', 1, 1, " + + "'Track One - Track Two', 'Cat: TEST-001', NOW(), NOW())" + ); + dbExec( + "INSERT INTO libri (titolo, formato, tipo_media, isbn13, copie_totali, copie_disponibili, descrizione, created_at, updated_at) " + + "VALUES ('E2E_ADV_Book_" + RUN_ID + "', 'cartaceo', 'libro', '9781234567897', 1, 1, " + + "'A test book description', NOW(), NOW())" + ); + + musicBookId = dbQuery(`SELECT id FROM libri WHERE titolo = 'E2E_ADV_CD_${RUN_ID}' AND deleted_at IS NULL LIMIT 1`); + bookBookId = dbQuery(`SELECT id FROM libri WHERE titolo = 'E2E_ADV_Book_${RUN_ID}' AND deleted_at IS NULL LIMIT 1`); + }); + + test.afterAll(async () => { + try { dbExec(`DELETE FROM libri WHERE titolo LIKE 'E2E_ADV_%_${RUN_ID}' AND deleted_at IS NULL`); } catch {} + await context?.close(); + }); + + // ═══════════════════════════════════════════════════════════════════ + // Test 1: tipo_media filter in admin book list + // ═══════════════════════════════════════════════════════════════════ + test('1. Admin list filters by tipo_media=disco', async () => { + // Fetch the DataTable API with tipo_media filter + const resp = await page.request.get(`${BASE}/api/libri?tipo_media=disco&start=0&length=100&search_text=E2E_ADV`); + expect(resp.status()).toBe(200); + const data = await resp.json(); + + // Should find the CD but not the book + const titles = (data.data || []).map((r) => r.titolo || r.info || ''); + const flatTitles = titles.join(' '); + + expect(flatTitles).toContain(`E2E_ADV_CD_${RUN_ID}`); + expect(flatTitles).not.toContain(`E2E_ADV_Book_${RUN_ID}`); + }); + + // ═══════════════════════════════════════════════════════════════════ + // Test 2: CSV export includes tipo_media column + // ═══════════════════════════════════════════════════════════════════ + test('2. CSV export includes tipo_media for music records', async () => { + const resp = await page.request.get(`${BASE}/admin/libri/export/csv?ids=${musicBookId}`); + expect(resp.status()).toBe(200); + const body = await resp.text(); + + // Parse header + const lines = body.split('\n'); + const header = lines[0].replace(/^\uFEFF/, ''); + expect(header).toContain('tipo_media'); + + // Parse the data row + const headerFields = header.split(';'); + const tipoMediaIdx = headerFields.indexOf('tipo_media'); + expect(tipoMediaIdx).toBeGreaterThan(-1); + + if (lines.length > 1 && lines[1].trim()) { + const dataFields = lines[1].split(';'); + expect(dataFields[tipoMediaIdx]).toBe('disco'); + } + }); + + // ═══════════════════════════════════════════════════════════════════ + // Test 3: Schema.org uses MusicAlbum for disco, Book for libro + // ═══════════════════════════════════════════════════════════════════ + test('3. Schema.org JSON-LD type is MusicAlbum for disco', async () => { + // We need the public URL for the music book — get it from sitemap or construct + // The book might not have an author, so book_path may not work + // Instead, check the admin detail for the Schema.org type (admin also renders it? No, only frontend) + // Use the public API to check tipo_media is returned + const apiResp = await page.request.get(`${BASE}/api/books?q=E2E_ADV_CD_${RUN_ID}`); + + if (apiResp.status() === 200) { + const apiData = await apiResp.json(); + const books = Array.isArray(apiData) ? apiData : (apiData.results || apiData.data || []); + const musicBook = books.find((b) => b.titolo?.includes(`E2E_ADV_CD_${RUN_ID}`) || b.title?.includes(`E2E_ADV_CD_${RUN_ID}`)); + + if (musicBook) { + expect(musicBook.tipo_media).toBe('disco'); + } + } + + // Also verify via direct DB that tipo_media is stored correctly + const tipoMedia = dbQuery(`SELECT tipo_media FROM libri WHERE id = ${musicBookId}`); + expect(tipoMedia).toBe('disco'); + + const bookTipoMedia = dbQuery(`SELECT tipo_media FROM libri WHERE id = ${bookBookId}`); + expect(bookTipoMedia).toBe('libro'); + }); + + // ═══════════════════════════════════════════════════════════════════ + // Test 4: Tracklist renders as

        in admin detail (music) + // vs prose

        for regular books + // ═══════════════════════════════════════════════════════════════════ + test('4. Admin detail: music shows tracklist, book shows prose description', async () => { + // Music book + await page.goto(`${BASE}/admin/libri/${musicBookId}`); + await page.waitForLoadState('domcontentloaded'); + const musicContent = await page.content(); + + // Should have tracklist HTML + expect(musicContent).toContain('Track One'); + expect(musicContent).toContain('Track Two'); + + // Should show music-specific labels + const hasEtichetta = musicContent.includes('Etichetta') || musicContent.includes('Label'); + const hasAnnoUscita = musicContent.includes('Anno di Uscita') || musicContent.includes('Release Year'); + expect(hasEtichetta || hasAnnoUscita).toBe(true); + + // Should have the media type badge + expect(musicContent).toContain('fa-compact-disc'); + + // Regular book + await page.goto(`${BASE}/admin/libri/${bookBookId}`); + await page.waitForLoadState('domcontentloaded'); + const bookContent = await page.content(); + + // Should have standard labels + const hasEditore = bookContent.includes('Editore') || bookContent.includes('Publisher'); + expect(hasEditore).toBe(true); + + // Should have book icon badge + expect(bookContent).toContain('fa-book'); + }); + + // ═══════════════════════════════════════════════════════════════════ + // Test 5: Edit a CD — tipo_media persists after save + // ═══════════════════════════════════════════════════════════════════ + test('5. Edit music record: tipo_media persists after save', async () => { + await page.goto(`${BASE}/admin/libri/modifica/${musicBookId}`); + await page.waitForLoadState('domcontentloaded'); + + // Verify tipo_media select shows "disco" (or equivalent) + const tipoSelect = page.locator('#tipo_media'); + if (await tipoSelect.isVisible({ timeout: 3000 }).catch(() => false)) { + const currentValue = await tipoSelect.inputValue(); + expect(currentValue).toBe('disco'); + + // Change the title slightly + const titleInput = page.locator('input[name="titolo"]'); + const currentTitle = await titleInput.inputValue(); + await titleInput.fill(currentTitle + ' (edited)'); + + // Submit + await page.locator('button[type="submit"]').first().click(); + const swalConfirm = page.locator('.swal2-confirm'); + if (await swalConfirm.isVisible({ timeout: 3000 }).catch(() => false)) { + await swalConfirm.click(); + } + await page.waitForURL(/\/admin\/libri\/\d+/, { timeout: 15000 }).catch(() => {}); + + // Verify tipo_media was NOT overwritten to 'libro' + const tipoAfter = dbQuery(`SELECT tipo_media FROM libri WHERE id = ${musicBookId}`); + expect(tipoAfter).toBe('disco'); + + // Verify title was updated + const titleAfter = dbQuery(`SELECT titolo FROM libri WHERE id = ${musicBookId}`); + expect(titleAfter).toContain('(edited)'); + + // Clean up title + dbExec(`UPDATE libri SET titolo = 'E2E_ADV_CD_${RUN_ID}' WHERE id = ${musicBookId}`); + } else { + // tipo_media column might not exist yet (pre-migration) + const tipoMedia = dbQuery(`SELECT tipo_media FROM libri WHERE id = ${musicBookId}`); + expect(tipoMedia).toBe('disco'); + } + }); +}); From 5724f165b0475d3ad448a28e234e6d15a4a0b807 Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Mon, 30 Mar 2026 22:10:00 +0200 Subject: [PATCH 13/28] fix: admin detail uses formatTracklist for music records Was showing raw 'Tracklist: 1. Come Together (4:19) 2. Something...' as plain text. Now calls MediaLabels::formatTracklist() which converts to

          with individual
        1. per track. Also shows music icon + 'Tracklist' label instead of 'Descrizione'. --- app/Views/libri/scheda_libro.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/Views/libri/scheda_libro.php b/app/Views/libri/scheda_libro.php index 09f0592e..fe5f9c29 100644 --- a/app/Views/libri/scheda_libro.php +++ b/app/Views/libri/scheda_libro.php @@ -598,13 +598,17 @@ class="inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full

          - - + +

          - + + + + +
          From 9ec7d98f0ddfba645d896261bff8fff75e7968e6 Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Mon, 30 Mar 2026 22:38:44 +0200 Subject: [PATCH 14/28] feat: extend music plugin with MusicBrainz + Deezer sources Single plugin, three sources in cascade: 1. Discogs (barcode search, primary) 2. MusicBrainz + Cover Art Archive (barcode fallback, open data) 3. Deezer (cover HD enrichment by title+artist) - MusicBrainz: barcode search, full release with artists/labels/recordings - Cover Art Archive: front cover in high resolution - Deezer: cover_xl (1000x1000) when other sources lack images - Each API has independent rate limiting (1s Discogs, 1.1s MB, 1s Deezer) - Plugin display name: "Music Scraper (Discogs, MusicBrainz, Deezer)" --- storage/plugins/discogs/DiscogsPlugin.php | 330 +++++++++++++++++++++- storage/plugins/discogs/README.md | 60 +++- storage/plugins/discogs/plugin.json | 15 +- 3 files changed, 388 insertions(+), 17 deletions(-) diff --git a/storage/plugins/discogs/DiscogsPlugin.php b/storage/plugins/discogs/DiscogsPlugin.php index bd7067b4..4d496b58 100644 --- a/storage/plugins/discogs/DiscogsPlugin.php +++ b/storage/plugins/discogs/DiscogsPlugin.php @@ -7,13 +7,15 @@ use App\Support\Hooks; /** - * Discogs API Plugin + * Multi-source Music Scraper Plugin (Discogs, MusicBrainz, Deezer) * - * Integrates Discogs APIs for music media metadata scraping. - * Searches by barcode (EAN/UPC) or title+artist and provides - * cover art, tracklist, label, year and format information. + * Integrates Discogs, MusicBrainz + Cover Art Archive, and Deezer APIs + * for music media metadata scraping. Searches by barcode (EAN/UPC) with + * MusicBrainz as fallback, and enriches with Deezer HD covers. * * @see https://www.discogs.com/developers + * @see https://musicbrainz.org/doc/MusicBrainz_API + * @see https://developers.deezer.com/api */ class DiscogsPlugin { @@ -26,6 +28,8 @@ class DiscogsPlugin /** @phpstan-ignore-next-line Property kept for PluginManager interface compatibility */ private ?object $hookManager = null; private ?int $pluginId = null; + /** @var float Timestamp of last MusicBrainz API request for rate limiting */ + private static float $lastMbRequestTime = 0.0; public function __construct(?\mysqli $db = null, ?object $hookManager = null) { @@ -228,6 +232,11 @@ public function fetchFromDiscogs($currentResult, array $sources, string $isbn): $searchResult = $this->apiRequest($searchUrl, $token); if (empty($searchResult['results'][0])) { + // Discogs found nothing — try MusicBrainz as fallback + $mbResult = $this->searchMusicBrainz($isbn, $token); + if ($mbResult !== null) { + return $this->mergeBookData($currentResult, $mbResult); + } return $currentResult; } @@ -301,6 +310,11 @@ public function enrichWithDiscogsData(array $data, string $isbn, array $source, \App\Support\SecureLogger::warning('[Discogs] Cover enrichment error: ' . $e->getMessage()); } + // If still missing cover or genre, try Deezer enrichment + if ((empty($data['image']) || empty($data['genres'])) && !empty($data['title'])) { + $data = $this->enrichFromDeezer($data); + } + return $data; } @@ -845,9 +859,9 @@ public function getInfo(): array { return [ 'name' => 'discogs', - 'display_name' => 'Discogs Music Scraper', - 'version' => '1.0.0', - 'description' => 'Integrazione con le API di Discogs per lo scraping di metadati musicali.', + 'display_name' => 'Music Scraper (Discogs, MusicBrainz, Deezer)', + 'version' => '1.1.0', + 'description' => 'Scraping multi-sorgente di metadati musicali: Discogs, MusicBrainz + Cover Art Archive, Deezer.', ]; } @@ -889,4 +903,306 @@ private function mergeBookData(?array $existing, ?array $new): ?array return $existing; } + + // ─── MusicBrainz Integration ──────────────────────────────────────── + + /** + * Search MusicBrainz by barcode as fallback when Discogs finds nothing + * + * @param string $barcode EAN/UPC barcode + * @param string|null $discogsToken Discogs token (unused, kept for signature consistency) + * @return array|null Pinakes-formatted data or null if not found + */ + private function searchMusicBrainz(string $barcode, ?string $discogsToken): ?array + { + // Search by barcode + $url = 'https://musicbrainz.org/ws/2/release?query=barcode:' . urlencode($barcode) . '&fmt=json&limit=1'; + $result = $this->musicBrainzRequest($url); + + if (empty($result['releases'][0])) { + return null; + } + + $release = $result['releases'][0]; + $mbid = $release['id'] ?? null; + if ($mbid === null || !is_string($mbid)) { + return null; + } + + // Fetch full release details + $detailUrl = 'https://musicbrainz.org/ws/2/release/' . $mbid . '?inc=artists+labels+recordings+release-groups&fmt=json'; + $detail = $this->musicBrainzRequest($detailUrl); + if (empty($detail)) { + return null; + } + + // Get cover from Cover Art Archive + $coverUrl = $this->fetchCoverArtArchive($mbid); + + return $this->mapMusicBrainzToPinakes($detail, $barcode, $coverUrl); + } + + /** + * Map MusicBrainz release data to Pinakes book data format + * + * @param array $release Full release data from MusicBrainz + * @param string $barcode Original barcode used for search + * @param string|null $coverUrl Cover URL from Cover Art Archive + * @return array Pinakes-formatted data + */ + private function mapMusicBrainzToPinakes(array $release, string $barcode, ?string $coverUrl): array + { + $title = trim($release['title'] ?? ''); + + // Extract artists from artist-credit array + $artists = []; + $firstArtist = ''; + if (!empty($release['artist-credit']) && is_array($release['artist-credit'])) { + foreach ($release['artist-credit'] as $credit) { + $name = trim($credit['name'] ?? ''); + if ($name !== '') { + $artists[] = $name; + } + } + $firstArtist = $artists[0] ?? ''; + } + + // Build tracklist HTML from media/tracks + $description = ''; + if (!empty($release['media'][0]['tracks']) && is_array($release['media'][0]['tracks'])) { + $items = []; + foreach ($release['media'][0]['tracks'] as $track) { + $trackTitle = trim($track['title'] ?? ''); + if ($trackTitle === '') { + continue; + } + $text = htmlspecialchars($trackTitle, ENT_QUOTES, 'UTF-8'); + // Length is in milliseconds + $lengthMs = $track['length'] ?? null; + if ($lengthMs !== null && is_numeric($lengthMs) && (int)$lengthMs > 0) { + $totalSeconds = (int)round((int)$lengthMs / 1000); + $minutes = intdiv($totalSeconds, 60); + $seconds = $totalSeconds % 60; + $duration = $minutes . ':' . str_pad((string)$seconds, 2, '0', STR_PAD_LEFT); + $text .= ' (' . $duration . ')'; + } + $items[] = $text; + } + if (!empty($items)) { + $description = '
            ' . implode('', array_map( + static fn(string $item): string => '
          1. ' . $item . '
          2. ', + $items + )) . '
          '; + } + } + + // Year: first 4 chars of date + $year = null; + $date = $release['date'] ?? ''; + if (is_string($date) && strlen($date) >= 4) { + $year = substr($date, 0, 4); + } + + // Publisher: first label + $publisher = ''; + if (!empty($release['label-info'][0]['label']['name'])) { + $publisher = trim((string)$release['label-info'][0]['label']['name']); + } + + // Format mapping + $format = 'altro'; + if (!empty($release['media'][0]['format'])) { + $mbFormat = strtolower(trim((string)$release['media'][0]['format'])); + $formatMap = [ + 'cd' => 'cd_audio', + 'vinyl' => 'vinile', + 'cassette' => 'audiocassetta', + 'digital media' => 'digitale', + 'dvd' => 'dvd', + 'blu-ray' => 'blu_ray', + ]; + foreach ($formatMap as $key => $value) { + if (str_contains($mbFormat, $key)) { + $format = $value; + break; + } + } + } + + // Track count + $trackCount = 0; + if (!empty($release['media'][0]['tracks']) && is_array($release['media'][0]['tracks'])) { + $trackCount = count($release['media'][0]['tracks']); + } + + return [ + 'title' => $title, + 'author' => $firstArtist, + 'authors' => $artists, + 'description' => $description, + 'image' => $coverUrl, + 'cover_url' => $coverUrl, + 'year' => $year, + 'publisher' => $publisher, + 'series' => '', + 'format' => $format, + 'genres' => '', + 'parole_chiave' => '', + 'isbn10' => null, + 'isbn13' => null, + 'ean' => $barcode, + 'country' => $release['country'] ?? null, + 'tipo_media' => 'disco', + 'source' => 'musicbrainz', + 'musicbrainz_id' => $release['id'] ?? null, + 'numero_pagine' => $trackCount > 0 ? (string)$trackCount : null, + ]; + } + + /** + * Fetch cover art URL from the Cover Art Archive + * + * @param string $mbid MusicBrainz release ID + * @return string|null URL of the cover image or null if unavailable + */ + private function fetchCoverArtArchive(string $mbid): ?string + { + // Cover Art Archive — no rate limit, but may 404 + $url = 'https://coverartarchive.org/release/' . urlencode($mbid); + $ch = curl_init(); + curl_setopt_array($ch, [ + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_TIMEOUT => 10, + CURLOPT_USERAGENT => self::USER_AGENT, + ]); + $resp = curl_exec($ch); + $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + if ($code !== 200 || !is_string($resp)) { + return null; + } + + $data = json_decode($resp, true); + if (!is_array($data) || empty($data['images']) || !is_array($data['images'])) { + return null; + } + + // Prefer front cover, then first image + foreach ($data['images'] as $img) { + if (!is_array($img)) { + continue; + } + if (($img['front'] ?? false) === true) { + return $img['thumbnails']['large'] ?? $img['image'] ?? null; + } + } + + $firstImg = $data['images'][0]; + if (is_array($firstImg)) { + return $firstImg['thumbnails']['large'] ?? $firstImg['image'] ?? null; + } + + return null; + } + + /** + * Make a rate-limited request to the MusicBrainz API + * + * MusicBrainz enforces a strict 1 request/second limit. + * We use 1.1s between requests for safety margin. + * + * @param string $url Full MusicBrainz API URL + * @return array|null Decoded JSON response or null on failure + */ + private function musicBrainzRequest(string $url): ?array + { + // MusicBrainz requires 1 req/s strictly + $elapsed = microtime(true) - self::$lastMbRequestTime; + if (self::$lastMbRequestTime > 0 && $elapsed < 1.1) { + usleep((int)((1.1 - $elapsed) * 1_000_000)); + } + self::$lastMbRequestTime = microtime(true); + + $ch = curl_init(); + curl_setopt_array($ch, [ + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_FOLLOWLOCATION => true, + CURLOPT_TIMEOUT => self::TIMEOUT, + CURLOPT_USERAGENT => self::USER_AGENT, + CURLOPT_HTTPHEADER => ['Accept: application/json'], + ]); + $resp = curl_exec($ch); + $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + if ($code !== 200 || !is_string($resp)) { + return null; + } + + $data = json_decode($resp, true); + return is_array($data) ? $data : null; + } + + // ─── Deezer Integration ───────────────────────────────────────────── + + /** + * Enrich data with Deezer album cover and metadata + * + * Searches Deezer by title+artist to find a matching album, + * then fills in missing cover image. + * + * @param array $data Current Pinakes data (must have 'title') + * @return array Enriched data + */ + private function enrichFromDeezer(array $data): array + { + $title = trim($data['title'] ?? ''); + $artist = trim($data['author'] ?? ''); + if ($title === '') { + return $data; + } + + $query = $artist !== '' ? $artist . ' ' . $title : $title; + $url = 'https://api.deezer.com/search/album?q=' . urlencode($query) . '&limit=1'; + + // Simple rate limit — 1 second between Deezer requests + usleep(1_000_000); + + $ch = curl_init(); + curl_setopt_array($ch, [ + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 10, + CURLOPT_USERAGENT => self::USER_AGENT, + ]); + $resp = curl_exec($ch); + $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + if ($code !== 200 || !is_string($resp)) { + return $data; + } + + $result = json_decode($resp, true); + if (!is_array($result) || empty($result['data'][0])) { + return $data; + } + + $album = $result['data'][0]; + if (!is_array($album)) { + return $data; + } + + // Fill missing cover with Deezer's high-quality image + if (empty($data['image']) && !empty($album['cover_xl'])) { + $data['image'] = $album['cover_xl']; + $data['cover_url'] = $album['cover_xl']; + } + + return $data; + } } diff --git a/storage/plugins/discogs/README.md b/storage/plugins/discogs/README.md index 79fc3836..d8e0b9b0 100644 --- a/storage/plugins/discogs/README.md +++ b/storage/plugins/discogs/README.md @@ -1,19 +1,21 @@ -# Discogs Music Scraper Plugin +# Music Scraper Plugin (Discogs, MusicBrainz, Deezer) -Plugin per l'integrazione delle API di Discogs nel sistema di scraping di Pinakes, pensato per catalogare supporti musicali (CD, LP, vinili, cassette). +Plugin multi-sorgente per lo scraping di metadati musicali in Pinakes, pensato per catalogare supporti musicali (CD, LP, vinili, cassette). Interroga Discogs, MusicBrainz + Cover Art Archive e Deezer per massimizzare la copertura dei dati. ## Funzionamento Il plugin si aggancia al sistema di scraping tramite tre hook: -- **scrape.sources** (priorita 8) -- Registra Discogs come fonte di scraping +- **scrape.sources** (priorita 8) -- Registra il plugin come fonte di scraping - **scrape.fetch.custom** (priorita 8) -- Esegue la ricerca e il recupero dei metadati - **scrape.data.modify** (priorita 15) -- Arricchisce i dati con copertine mancanti ### Strategia di ricerca -1. Ricerca per barcode (EAN/UPC) -- `GET /database/search?barcode={ean}&type=release` -2. Recupero dettagli completi della release -- `GET /releases/{id}` +1. Ricerca per barcode (EAN/UPC) su Discogs -- `GET /database/search?barcode={ean}&type=release` +2. Recupero dettagli completi della release Discogs -- `GET /releases/{id}` +3. **Fallback MusicBrainz** -- se Discogs non trova risultati, cerca su MusicBrainz per barcode +4. **Arricchimento Deezer** -- se manca la copertina o il genere, cerca su Deezer per titolo+artista ## Mappatura dati Discogs -> Pinakes @@ -64,18 +66,64 @@ Senza token le API di Discogs permettono 25 richieste al minuto. Con un token pe 4. Seleziona il file ZIP e clicca **"Installa"** 5. Attiva il plugin dalla lista +## MusicBrainz (fallback barcode) + +Quando Discogs non trova risultati per un barcode, il plugin cerca automaticamente su [MusicBrainz](https://musicbrainz.org/), un database musicale open data. + +- **Ricerca per barcode** -- `GET /ws/2/release?query=barcode:{ean}&fmt=json` +- **Dettagli release** -- `GET /ws/2/release/{mbid}?inc=artists+labels+recordings+release-groups&fmt=json` +- **Cover Art Archive** -- le copertine vengono recuperate da [Cover Art Archive](https://coverartarchive.org/), un archivio gratuito collegato a MusicBrainz + +### Mappatura MusicBrainz -> Pinakes + +| MusicBrainz | Pinakes | Note | +|-------------|---------|------| +| title | Titolo | Titolo della release | +| artist-credit | Autore/i | Array di crediti artista con joinphrase | +| media.tracks | Descrizione | Tracklist HTML con durate (ms -> mm:ss) | +| date | Anno | Primi 4 caratteri della data | +| label-info.label.name | Editore | Prima etichetta | +| media.format | Formato | CD -> cd_audio, Vinyl -> vinile, ecc. | +| Cover Art Archive | Copertina | Preferisce front cover, poi prima immagine | + +Non e richiesta autenticazione. Rate limit: 1 richiesta/secondo (rispettato automaticamente). + +## Deezer (copertine HD) + +Se dopo Discogs e MusicBrainz la copertina o il genere sono ancora mancanti, il plugin cerca su [Deezer](https://developers.deezer.com/) per titolo+artista. + +- **Ricerca album** -- `GET /search/album?q={artista}+{titolo}&limit=1` +- **Copertina HD** -- usa `cover_xl` (1000x1000px) per la massima qualita +- Non richiede autenticazione ne API key +- Rate limit: 1 secondo tra le richieste + ## Rate Limiting -Il plugin rispetta i limiti di Discogs con throttling adattivo: 1 secondo tra le chiamate quando si usa un token, 2.5 secondi senza token. In caso di errore 429 (rate limit exceeded) la risposta viene registrata nei log. +Il plugin rispetta i limiti di ciascuna API con throttling adattivo: + +| Sorgente | Rate limit | Intervallo | +|----------|-----------|------------| +| Discogs (con token) | 60 req/min | 1s tra le chiamate | +| Discogs (senza token) | 25 req/min | 2.5s tra le chiamate | +| MusicBrainz | 1 req/s | 1.1s tra le chiamate | +| Cover Art Archive | Nessun limite | Nessun ritardo aggiuntivo | +| Deezer | 50 req/5s | 1s tra le chiamate | + +In caso di errore 429 (rate limit exceeded) la risposta viene registrata nei log. ## Link utili - [Discogs API Documentation](https://www.discogs.com/developers) - [Discogs Database Search](https://www.discogs.com/developers#page:database,header:database-search) - [Discogs Release](https://www.discogs.com/developers#page:database,header:database-release) +- [MusicBrainz API Documentation](https://musicbrainz.org/doc/MusicBrainz_API) +- [Cover Art Archive API](https://wiki.musicbrainz.org/Cover_Art_Archive/API) +- [Deezer API Documentation](https://developers.deezer.com/api) ## Licenza Questo plugin e parte del progetto Pinakes ed e rilasciato sotto la stessa licenza del progetto principale. I dati di Discogs sono soggetti ai [termini di utilizzo delle API Discogs](https://www.discogs.com/developers/#page:home,header:home-general-information). +I dati di MusicBrainz sono disponibili sotto [licenza CC0](https://creativecommons.org/publicdomain/zero/1.0/) (dominio pubblico). +Le copertine di Cover Art Archive seguono le rispettive licenze indicate per ciascuna immagine. diff --git a/storage/plugins/discogs/plugin.json b/storage/plugins/discogs/plugin.json index c1226d3b..ccb0cdc3 100644 --- a/storage/plugins/discogs/plugin.json +++ b/storage/plugins/discogs/plugin.json @@ -1,7 +1,7 @@ { "name": "discogs", - "display_name": "Discogs Music Scraper", - "description": "Integrazione con le API di Discogs per lo scraping di metadati musicali (CD, LP, vinili). Cerca per barcode (EAN) o titolo+artista e popola copertina, tracklist, etichetta e anno.", + "display_name": "Music Scraper (Discogs, MusicBrainz, Deezer)", + "description": "Scraping multi-sorgente di metadati musicali: Discogs (barcode/titolo), MusicBrainz + Cover Art Archive (fallback barcode), Deezer (copertine HD). Supporta CD, LP, vinili, cassette.", "version": "1.0.0", "author": "Fabiodalez", "author_url": "", @@ -15,6 +15,8 @@ "tags": [ "api", "discogs", + "musicbrainz", + "deezer", "scraping", "music", "vinyl", @@ -23,7 +25,10 @@ "priority": 8, "api_endpoints": [ "https://api.discogs.com/database/search", - "https://api.discogs.com/releases/{id}" + "https://api.discogs.com/releases/{id}", + "https://musicbrainz.org/ws/2/release", + "https://coverartarchive.org/release/{mbid}", + "https://api.deezer.com/search/album" ], "hooks": [ { @@ -51,7 +56,9 @@ "Copertine album ad alta risoluzione", "Tracklist completa nella descrizione", "Mappatura etichetta su editore", - "Supporto CD, vinile, cassette" + "Supporto CD, vinile, cassette", + "Fallback MusicBrainz + Cover Art Archive per barcode", + "Arricchimento copertine HD da Deezer" ] } } From 475e8b5918aa0ae659078176a924c2e769a16bcb Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Mon, 30 Mar 2026 22:42:50 +0200 Subject: [PATCH 15/28] fix: use unique barcode in plugin test (avoid EAN UNIQUE conflict) --- tests/discogs-plugin.spec.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/discogs-plugin.spec.js b/tests/discogs-plugin.spec.js index 7c6e7ed7..302817fd 100644 --- a/tests/discogs-plugin.spec.js +++ b/tests/discogs-plugin.spec.js @@ -22,8 +22,8 @@ function dbExec(sql) { execFileSync('mysql', args, { encoding: 'utf-8', timeout: 10000 }); } -// Known CD barcode for testing (Pink Floyd - The Dark Side of the Moon) -const TEST_BARCODE = '5099902894225'; +// Unique barcode for testing (not used by seeded records) +const TEST_BARCODE = '9999999999901'; const TEST_ARTIST = 'Pink Floyd'; test.describe.serial('Discogs Plugin (#87)', () => { @@ -182,10 +182,10 @@ test.describe.serial('Discogs Plugin (#87)', () => { test('6. Frontend: music book shows Barcode instead of ISBN-13', async () => { // Create a music book with EAN - dbExec(` - INSERT INTO libri (titolo, formato, ean, copie_totali, copie_disponibili, created_at, updated_at) - VALUES ('E2E_DISCOGS_Frontend_CD', 'vinile', '${TEST_BARCODE}', 1, 1, NOW(), NOW()) - `); + dbExec( + "INSERT INTO libri (titolo, formato, tipo_media, ean, copie_totali, copie_disponibili, created_at, updated_at) " + + "VALUES ('E2E_DISCOGS_Frontend_CD', 'vinile', 'disco', '" + TEST_BARCODE + "', 1, 1, NOW(), NOW())" + ); const bookId = dbQuery( "SELECT id FROM libri WHERE titolo = 'E2E_DISCOGS_Frontend_CD' AND deleted_at IS NULL LIMIT 1" ); From 5adf8249420fbeebafb078bca7ab15c914b67a10 Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Mon, 30 Mar 2026 22:56:00 +0200 Subject: [PATCH 16/28] fix: CodeRabbit round 5 + Schema.org media-specific shapes Backend: - CsvImportController: soft-delete guard on all UPDATE libri - CSV parseCsvRow: normalize tipo_media through inferTipoMedia - FrontendController: hasColumn guard for tipo_media filter - LT import: tipo_media null on update (preserve existing), infer only on insert - BookRepository createBasic: fallback from formato when tipo_media absent - Migration: LIKE patterns instead of exact IN() for broader matching - Discogs enrichment: gate on discogs_id, not source Schema.org: - MusicAlbum: byArtist, recordLabel, numTracks, EAN identifier - Movie: director, productionCompany, EAN identifier - Audiobook: author, publisher, readBy (narrator), isbn - Book: full properties (author, translator, illustrator, editor, isbn, issn, pages, edition) Tests: - Cleanup by ean/isbn13 (stable identifiers, not mutable titles) --- app/Controllers/CsvImportController.php | 8 +- app/Controllers/FrontendController.php | 14 +- .../LibraryThingImportController.php | 5 +- app/Models/BookRepository.php | 14 +- app/Views/frontend/book-detail.php | 136 ++++++++++++------ .../database/migrations/migrate_0.5.4.sql | 10 +- storage/plugins/discogs/DiscogsPlugin.php | 13 +- tests/discogs-advanced.spec.js | 2 +- tests/discogs-import.spec.js | 2 +- 9 files changed, 134 insertions(+), 70 deletions(-) diff --git a/app/Controllers/CsvImportController.php b/app/Controllers/CsvImportController.php index b15319ac..c5c37a76 100644 --- a/app/Controllers/CsvImportController.php +++ b/app/Controllers/CsvImportController.php @@ -771,7 +771,7 @@ private function parseCsvRow(array $row): array 'descrizione' => !empty($row['descrizione']) ? trim($row['descrizione']) : null, 'formato' => !empty($row['formato']) ? trim($row['formato']) : 'cartaceo', 'tipo_media' => array_key_exists('tipo_media', $row) && trim((string) ($row['tipo_media'] ?? '')) !== '' - ? trim($row['tipo_media']) + ? \App\Support\MediaLabels::inferTipoMedia(trim($row['tipo_media'])) : null, 'prezzo' => $this->validatePrice($row['prezzo'] ?? ''), 'copie_totali' => !empty($row['copie_totali']) ? (int)$row['copie_totali'] : 1, @@ -1252,7 +1252,7 @@ private function updateBook(\mysqli $db, int $bookId, array $data, ?int $editorI parole_chiave = ?, classificazione_dewey = ?, updated_at = NOW() - WHERE id = ? + WHERE id = ? AND deleted_at IS NULL "); $isbn10 = !empty($data['isbn10']) ? $data['isbn10'] : null; @@ -1562,7 +1562,7 @@ private function enrichBookWithScrapedData(\mysqli $db, int $bookId, array $csvD // Update libro if we have data if (!empty($updates)) { - $sql = "UPDATE libri SET " . implode(', ', $updates) . " WHERE id = ?"; + $sql = "UPDATE libri SET " . implode(', ', $updates) . " WHERE id = ? AND deleted_at IS NULL"; $params[] = $bookId; $types .= 'i'; @@ -1603,7 +1603,7 @@ private function enrichBookWithScrapedData(\mysqli $db, int $bookId, array $csvD $publisherResult = $this->getOrCreatePublisher($db, $scrapedData['publisher']); $editorId = $publisherResult['id']; - $stmt = $db->prepare("UPDATE libri SET editore_id = ? WHERE id = ?"); + $stmt = $db->prepare("UPDATE libri SET editore_id = ? WHERE id = ? AND deleted_at IS NULL"); $stmt->bind_param('ii', $editorId, $bookId); $stmt->execute(); $stmt->close(); diff --git a/app/Controllers/FrontendController.php b/app/Controllers/FrontendController.php index d5b3c81c..25e428ea 100644 --- a/app/Controllers/FrontendController.php +++ b/app/Controllers/FrontendController.php @@ -898,9 +898,17 @@ private function buildWhereConditions(array $filters, mysqli $db): array } if (!empty($filters['tipo_media'])) { - $conditions[] = "l.tipo_media = ?"; - $params[] = $filters['tipo_media']; - $types .= 's'; + // Check if column exists (may not on pre-0.5.4 databases) + static $hasTipoMedia = null; + if ($hasTipoMedia === null) { + $result = $db->query("SHOW COLUMNS FROM libri LIKE 'tipo_media'"); + $hasTipoMedia = $result !== false && $result->num_rows > 0; + } + if ($hasTipoMedia) { + $conditions[] = "l.tipo_media = ?"; + $params[] = $filters['tipo_media']; + $types .= 's'; + } } return [ diff --git a/app/Controllers/LibraryThingImportController.php b/app/Controllers/LibraryThingImportController.php index 45b3857d..e8619870 100644 --- a/app/Controllers/LibraryThingImportController.php +++ b/app/Controllers/LibraryThingImportController.php @@ -911,8 +911,9 @@ private function parseLibraryThingRow(array $data): array } } - // Infer tipo_media from formato - $result['tipo_media'] = \App\Support\MediaLabels::inferTipoMedia($result['formato'] ?? ''); + // Infer tipo_media from Media field (null when empty to avoid overwriting) + $mediaRaw = trim((string) ($data['Media'] ?? '')); + $result['tipo_media'] = $mediaRaw !== '' ? \App\Support\MediaLabels::inferTipoMedia($mediaRaw) : null; // Genre/Subjects $result['genere'] = !empty($data['Subjects']) ? trim(explode(',', $data['Subjects'])[0]) : ''; diff --git a/app/Models/BookRepository.php b/app/Models/BookRepository.php index 12d3b5a4..e6f286c2 100644 --- a/app/Models/BookRepository.php +++ b/app/Models/BookRepository.php @@ -302,6 +302,9 @@ public function createBasic(array $data): int } if ($this->hasColumn('tipo_media')) { $val = $data['tipo_media'] ?? null; + if ($val === null || $val === '') { + $val = \App\Support\MediaLabels::inferTipoMedia($data['formato'] ?? null); + } $addField('tipo_media', 's', $this->normalizeEnumValue($val, 'tipo_media', 'libro')); } if ($this->hasColumn('peso')) { @@ -1054,8 +1057,15 @@ public function updateOptionals(int $bookId, array $data): void if ($this->hasColumn('illustratore') && !isset($cols['illustratore']) && !empty($data['scraped_illustrator'])) { $cols['illustratore'] = \App\Support\AuthorNormalizer::normalize((string) $data['scraped_illustrator']); } - if ($this->hasColumn('tipo_media') && !array_key_exists('tipo_media', $cols) && !empty($data['scraped_tipo_media'])) { - $cols['tipo_media'] = $this->normalizeEnumValue((string) $data['scraped_tipo_media'], 'tipo_media', 'libro'); + if ($this->hasColumn('tipo_media') && !array_key_exists('tipo_media', $cols)) { + $val = $data['scraped_tipo_media'] ?? null; + if ($val === null || $val === '') { + $val = \App\Support\MediaLabels::inferTipoMedia($data['formato'] ?? ($data['scraped_formato'] ?? null)); + } + $normalized = $this->normalizeEnumValue((string) $val, 'tipo_media', 'libro'); + if ($normalized !== '') { + $cols['tipo_media'] = $normalized; + } } if (!$cols) return; diff --git a/app/Views/frontend/book-detail.php b/app/Views/frontend/book-detail.php index 61abc75b..c842a782 100644 --- a/app/Views/frontend/book-detail.php +++ b/app/Views/frontend/book-detail.php @@ -227,69 +227,113 @@ $schemaEditors[] = ["@type" => "Person", "name" => $bookCurator]; } -if (!empty($schemaAuthors)) { - $bookSchema["author"] = count($schemaAuthors) === 1 ? $schemaAuthors[0] : $schemaAuthors; -} -if (!empty($schemaTranslators)) { - $bookSchema["translator"] = count($schemaTranslators) === 1 ? $schemaTranslators[0] : $schemaTranslators; -} -if (!empty($schemaIllustrators)) { - $bookSchema["illustrator"] = count($schemaIllustrators) === 1 ? $schemaIllustrators[0] : $schemaIllustrators; -} -if (!empty($schemaEditors)) { - $bookSchema["editor"] = count($schemaEditors) === 1 ? $schemaEditors[0] : $schemaEditors; -} - if ($bookDescription) { $bookSchema["description"] = strip_tags($bookDescription); } -if ($bookPublisher) { - $bookSchema["publisher"] = [ - "@type" => "Organization", - "name" => $bookPublisher - ]; -} - -if ($bookYear) { - $bookSchema["datePublished"] = (string) $bookYear; -} - -if ($bookISBN) { - $bookSchema["isbn"] = $bookISBN; -} - -if (!empty($book['issn'])) { - $bookSchema["identifier"] = [ - "@type" => "PropertyValue", - "propertyID" => "ISSN", - "value" => $book['issn'], - ]; +if ($bookCover) { + $bookSchema["image"] = $ogImage; } -if ($bookPages) { - $bookSchema["numberOfPages"] = (int)$bookPages; +if ($bookGenre) { + $bookSchema["genre"] = $bookGenre; } if ($bookLanguage) { $bookSchema["inLanguage"] = $bookLanguage; } -if ($bookGenre) { - $bookSchema["genre"] = $bookGenre; +if ($bookYear) { + $bookSchema["datePublished"] = (string) $bookYear; } -if ($bookCover) { - $bookSchema["image"] = $ogImage; // Use the absolute URL -} +// Media-specific Schema.org properties +$schemaType = \App\Support\MediaLabels::schemaOrgType($resolvedTipoMedia); -// Book edition and format -$bookEdition = trim($book['edizione'] ?? ''); -if ($bookEdition !== '') { - $bookSchema["bookEdition"] = $bookEdition; +if ($schemaType === 'MusicAlbum') { + // MusicAlbum: use byArtist, recordLabel, numTracks + if (!empty($schemaAuthors)) { + $bookSchema["byArtist"] = count($schemaAuthors) === 1 ? $schemaAuthors[0] : $schemaAuthors; + } + if ($bookPublisher) { + $bookSchema["recordLabel"] = ["@type" => "Organization", "name" => $bookPublisher]; + } + if ($bookPages) { + $bookSchema["numTracks"] = (int) $bookPages; + } + if (!empty($book['ean'])) { + $bookSchema["identifier"] = [ + "@type" => "PropertyValue", + "propertyID" => "EAN", + "value" => $book['ean'], + ]; + } +} elseif ($schemaType === 'Movie') { + // Movie: use director, productionCompany, duration + if (!empty($schemaAuthors)) { + $bookSchema["director"] = count($schemaAuthors) === 1 ? $schemaAuthors[0] : $schemaAuthors; + } + if ($bookPublisher) { + $bookSchema["productionCompany"] = ["@type" => "Organization", "name" => $bookPublisher]; + } + if (!empty($book['ean'])) { + $bookSchema["identifier"] = [ + "@type" => "PropertyValue", + "propertyID" => "EAN", + "value" => $book['ean'], + ]; + } +} elseif ($schemaType === 'Audiobook') { + // Audiobook: use author, publisher, readBy (translator as narrator) + if (!empty($schemaAuthors)) { + $bookSchema["author"] = count($schemaAuthors) === 1 ? $schemaAuthors[0] : $schemaAuthors; + } + if ($bookPublisher) { + $bookSchema["publisher"] = ["@type" => "Organization", "name" => $bookPublisher]; + } + if (!empty($schemaTranslators)) { + $bookSchema["readBy"] = count($schemaTranslators) === 1 ? $schemaTranslators[0] : $schemaTranslators; + } + if ($bookISBN) { + $bookSchema["isbn"] = $bookISBN; + } +} else { + // Book (default): full book properties + if (!empty($schemaAuthors)) { + $bookSchema["author"] = count($schemaAuthors) === 1 ? $schemaAuthors[0] : $schemaAuthors; + } + if (!empty($schemaTranslators)) { + $bookSchema["translator"] = count($schemaTranslators) === 1 ? $schemaTranslators[0] : $schemaTranslators; + } + if (!empty($schemaIllustrators)) { + $bookSchema["illustrator"] = count($schemaIllustrators) === 1 ? $schemaIllustrators[0] : $schemaIllustrators; + } + if (!empty($schemaEditors)) { + $bookSchema["editor"] = count($schemaEditors) === 1 ? $schemaEditors[0] : $schemaEditors; + } + if ($bookPublisher) { + $bookSchema["publisher"] = ["@type" => "Organization", "name" => $bookPublisher]; + } + if ($bookISBN) { + $bookSchema["isbn"] = $bookISBN; + } + if (!empty($book['issn'])) { + $bookSchema["identifier"] = [ + "@type" => "PropertyValue", + "propertyID" => "ISSN", + "value" => $book['issn'], + ]; + } + if ($bookPages) { + $bookSchema["numberOfPages"] = (int) $bookPages; + } + $bookEdition = trim($book['edizione'] ?? ''); + if ($bookEdition !== '') { + $bookSchema["bookEdition"] = $bookEdition; + } } -// Availability — only include Offer when the book has a price (library lending is not a sale) +// Availability — only include Offer when the item has a price if ($bookPrice) { $appName = (string) ConfigStore::get('app.name', __('Biblioteca')); $bookSchema["offers"] = [ diff --git a/installer/database/migrations/migrate_0.5.4.sql b/installer/database/migrations/migrate_0.5.4.sql index 76cb12f7..9bf9f048 100644 --- a/installer/database/migrations/migrate_0.5.4.sql +++ b/installer/database/migrations/migrate_0.5.4.sql @@ -24,15 +24,17 @@ PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; --- Auto-populate from existing formato values +-- Auto-populate from existing formato values (LIKE for partial matches) UPDATE libri SET tipo_media = 'disco' WHERE tipo_media = 'libro' - AND LOWER(formato) IN ('cd_audio','vinile','lp','cassetta','vinyl','cd','cassette','audiocassetta'); + AND (LOWER(formato) LIKE '%cd%' OR LOWER(formato) LIKE '%vinyl%' OR LOWER(formato) LIKE '%vinile%' + OR LOWER(formato) LIKE '%lp%' OR LOWER(formato) LIKE '%cassett%' OR LOWER(formato) LIKE '%audiocassetta%') + AND LOWER(formato) NOT LIKE '%audiolibro%' AND LOWER(formato) NOT LIKE '%audiobook%'; UPDATE libri SET tipo_media = 'audiolibro' WHERE tipo_media = 'libro' - AND LOWER(formato) IN ('audiolibro','audiobook'); + AND (LOWER(formato) LIKE '%audiolibro%' OR LOWER(formato) LIKE '%audiobook%'); UPDATE libri SET tipo_media = 'dvd' WHERE tipo_media = 'libro' - AND LOWER(formato) IN ('dvd','blu-ray','blu_ray'); + AND (LOWER(formato) LIKE '%dvd%' OR LOWER(formato) LIKE '%blu-ray%' OR LOWER(formato) LIKE '%blu_ray%'); diff --git a/storage/plugins/discogs/DiscogsPlugin.php b/storage/plugins/discogs/DiscogsPlugin.php index 4d496b58..f694409c 100644 --- a/storage/plugins/discogs/DiscogsPlugin.php +++ b/storage/plugins/discogs/DiscogsPlugin.php @@ -278,19 +278,18 @@ public function fetchFromDiscogs($currentResult, array $sources, string $isbn): */ public function enrichWithDiscogsData(array $data, string $isbn, array $source, array $originalPayload): array { - // If data already has an image or didn't come from Discogs, skip + // If data already has an image, skip if (!empty($data['image'])) { return $data; } - // Only enrich if the data was sourced from Discogs - if (($data['source'] ?? '') !== 'discogs') { - return $data; - } - - // Try to fetch cover from Discogs using discogs_id + // Try to fetch cover from Discogs using discogs_id (regardless of source) $discogsId = $data['discogs_id'] ?? null; if ($discogsId === null) { + // No discogs_id — skip to Deezer enrichment below + if ((empty($data['image']) || empty($data['genres'])) && !empty($data['title'])) { + $data = $this->enrichFromDeezer($data); + } return $data; } diff --git a/tests/discogs-advanced.spec.js b/tests/discogs-advanced.spec.js index d7c76dc3..d58b66e8 100644 --- a/tests/discogs-advanced.spec.js +++ b/tests/discogs-advanced.spec.js @@ -65,7 +65,7 @@ test.describe.serial('Discogs Advanced Tests', () => { }); test.afterAll(async () => { - try { dbExec(`DELETE FROM libri WHERE titolo LIKE 'E2E_ADV_%_${RUN_ID}' AND deleted_at IS NULL`); } catch {} + try { dbExec("DELETE FROM libri WHERE (titolo LIKE 'E2E_ADV_%' OR ean = '1234567890123' OR isbn13 = '9781234567897') AND deleted_at IS NULL"); } catch {} await context?.close(); }); diff --git a/tests/discogs-import.spec.js b/tests/discogs-import.spec.js index 8f623024..b358b582 100644 --- a/tests/discogs-import.spec.js +++ b/tests/discogs-import.spec.js @@ -49,7 +49,7 @@ test.describe.serial('Discogs Import: full scraping flow', () => { test.afterAll(async () => { // Cleanup test data - try { dbExec("DELETE FROM libri WHERE ean = '0720642442524' AND deleted_at IS NULL"); } catch {} + try { dbExec("DELETE FROM libri WHERE (ean = '0720642442524' OR isbn13 LIKE '%720642442524%') AND deleted_at IS NULL"); } catch {} await context?.close(); }); From c7a419c1f9b4898538dcc5905ea530d1934a4319 Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Mon, 30 Mar 2026 23:51:36 +0200 Subject: [PATCH 17/28] Fix Discogs review follow-ups and multisource tests --- app/Controllers/CsvImportController.php | 6 +- app/Controllers/FrontendController.php | 28 +- .../LibraryThingImportController.php | 12 +- app/Controllers/LibriApiController.php | 12 +- app/Controllers/PluginController.php | 39 ++ app/Controllers/ScrapeController.php | 34 +- app/Models/BookRepository.php | 16 +- app/Routes/web.php | 6 + app/Support/BundledPlugins.php | 21 + app/Support/MediaLabels.php | 153 +++++-- app/Support/PluginManager.php | 48 +-- app/Support/Updater.php | 42 +- app/Views/admin/plugins.php | 7 + app/Views/frontend/book-detail.php | 22 +- app/Views/libri/scheda_libro.php | 10 +- installer/classes/Installer.php | 2 +- .../database/migrations/migrate_0.5.4.sql | 41 +- installer/database/schema.sql | 3 +- pinakes-v0.5.3.zip.sha256 | 1 - storage/plugins/discogs/DiscogsPlugin.php | 213 +++++----- storage/plugins/discogs/views/settings.php | 36 +- tests/discogs-advanced.spec.js | 48 ++- tests/discogs-import.spec.js | 44 +- tests/discogs-plugin.spec.js | 61 ++- tests/multisource-scraping.spec.js | 377 ++++++++++++++++++ tests/playwright.config.js | 1 + 26 files changed, 955 insertions(+), 328 deletions(-) create mode 100644 app/Support/BundledPlugins.php delete mode 100644 pinakes-v0.5.3.zip.sha256 create mode 100644 tests/multisource-scraping.spec.js diff --git a/app/Controllers/CsvImportController.php b/app/Controllers/CsvImportController.php index c5c37a76..88afdf5d 100644 --- a/app/Controllers/CsvImportController.php +++ b/app/Controllers/CsvImportController.php @@ -771,7 +771,7 @@ private function parseCsvRow(array $row): array 'descrizione' => !empty($row['descrizione']) ? trim($row['descrizione']) : null, 'formato' => !empty($row['formato']) ? trim($row['formato']) : 'cartaceo', 'tipo_media' => array_key_exists('tipo_media', $row) && trim((string) ($row['tipo_media'] ?? '')) !== '' - ? \App\Support\MediaLabels::inferTipoMedia(trim($row['tipo_media'])) + ? \App\Support\MediaLabels::normalizeTipoMedia(trim((string) $row['tipo_media'])) : null, 'prezzo' => $this->validatePrice($row['prezzo'] ?? ''), 'copie_totali' => !empty($row['copie_totali']) ? (int)$row['copie_totali'] : 1, @@ -1266,7 +1266,7 @@ classificazione_dewey = ?, $pagine = !empty($data['numero_pagine']) ? (int) $data['numero_pagine'] : null; $descrizione = !empty($data['descrizione']) ? $data['descrizione'] : null; $formato = !empty($data['formato']) ? $data['formato'] : 'cartaceo'; - $tipoMedia = $data['tipo_media'] ?? null; // null = keep existing (COALESCE in SQL) + $tipoMedia = \App\Support\MediaLabels::normalizeTipoMedia($data['tipo_media'] ?? null); // null = keep existing (COALESCE in SQL) $prezzo = $data['prezzo'] ?? null; $collana = !empty($data['collana']) ? $data['collana'] : null; $numeroSerie = !empty($data['numero_serie']) ? $data['numero_serie'] : null; @@ -1357,7 +1357,7 @@ classificazione_dewey, stato, created_at $pagine = !empty($data['numero_pagine']) ? (int) $data['numero_pagine'] : null; $descrizione = !empty($data['descrizione']) ? $data['descrizione'] : null; $formato = !empty($data['formato']) ? $data['formato'] : 'cartaceo'; - $tipoMedia = $data['tipo_media'] ?? \App\Support\MediaLabels::inferTipoMedia($formato); + $tipoMedia = \App\Support\MediaLabels::resolveTipoMedia($formato, $data['tipo_media'] ?? null); $prezzo = $data['prezzo'] ?? null; $copie = !empty($data['copie_totali']) ? (int) $data['copie_totali'] : 1; // Add bounds checking to prevent DoS attacks diff --git a/app/Controllers/FrontendController.php b/app/Controllers/FrontendController.php index 25e428ea..23a6462c 100644 --- a/app/Controllers/FrontendController.php +++ b/app/Controllers/FrontendController.php @@ -897,18 +897,10 @@ private function buildWhereConditions(array $filters, mysqli $db): array $types .= 'i'; } - if (!empty($filters['tipo_media'])) { - // Check if column exists (may not on pre-0.5.4 databases) - static $hasTipoMedia = null; - if ($hasTipoMedia === null) { - $result = $db->query("SHOW COLUMNS FROM libri LIKE 'tipo_media'"); - $hasTipoMedia = $result !== false && $result->num_rows > 0; - } - if ($hasTipoMedia) { - $conditions[] = "l.tipo_media = ?"; - $params[] = $filters['tipo_media']; - $types .= 's'; - } + if (!empty($filters['tipo_media']) && $this->hasLibriColumn($db, 'tipo_media')) { + $conditions[] = "l.tipo_media = ?"; + $params[] = $filters['tipo_media']; + $types .= 's'; } return [ @@ -918,6 +910,18 @@ private function buildWhereConditions(array $filters, mysqli $db): array ]; } + private function hasLibriColumn(mysqli $db, string $column): bool + { + static $columnCache = []; + + if (!array_key_exists($column, $columnCache)) { + $result = $db->query("SHOW COLUMNS FROM libri LIKE '" . $db->real_escape_string($column) . "'"); + $columnCache[$column] = $result !== false && $result->num_rows > 0; + } + + return $columnCache[$column]; + } + private function buildOrderBy(string $sort): string { switch ($sort) { diff --git a/app/Controllers/LibraryThingImportController.php b/app/Controllers/LibraryThingImportController.php index e8619870..98501426 100644 --- a/app/Controllers/LibraryThingImportController.php +++ b/app/Controllers/LibraryThingImportController.php @@ -1286,7 +1286,7 @@ private function updateBook(\mysqli $db, int $bookId, array $data, ?int $editorI UPDATE libri SET isbn10 = ?, isbn13 = ?, ean = ?, titolo = ?, sottotitolo = ?, anno_pubblicazione = ?, lingua = ?, edizione = ?, numero_pagine = ?, - genere_id = ?, descrizione = ?{$descPlainSet}, formato = ?, tipo_media = ?, prezzo = ?, editore_id = ?, + genere_id = ?, descrizione = ?{$descPlainSet}, formato = ?, tipo_media = COALESCE(?, tipo_media), prezzo = ?, editore_id = ?, collana = ?, numero_serie = ?, traduttore = ?, parole_chiave = ?, classificazione_dewey = ?, peso = ?, dimensioni = ?, data_acquisizione = ?, review = ?, rating = ?, comment = ?, private_comment = ?, @@ -1321,7 +1321,7 @@ classificazione_dewey = ?, peso = ?, dimensioni = ?, data_acquisizione = ?, } $params = array_merge($params, [ !empty($data['formato']) ? $data['formato'] : 'cartaceo', - !empty($data['tipo_media']) ? $data['tipo_media'] : \App\Support\MediaLabels::inferTipoMedia($data['formato'] ?? ''), + \App\Support\MediaLabels::normalizeTipoMedia($data['tipo_media'] ?? null), !empty($data['prezzo']) ? (float) str_replace(',', '.', $data['prezzo']) : null, $editorId, !empty($data['collana']) ? $data['collana'] : null, @@ -1368,7 +1368,7 @@ classificazione_dewey = ?, peso = ?, dimensioni = ?, data_acquisizione = ?, UPDATE libri SET isbn10 = ?, isbn13 = ?, ean = ?, titolo = ?, sottotitolo = ?, anno_pubblicazione = ?, lingua = ?, edizione = ?, numero_pagine = ?, - genere_id = ?, descrizione = ?{$descPlainSet}, formato = ?, tipo_media = ?, prezzo = ?, editore_id = ?, + genere_id = ?, descrizione = ?{$descPlainSet}, formato = ?, tipo_media = COALESCE(?, tipo_media), prezzo = ?, editore_id = ?, collana = ?, numero_serie = ?, traduttore = ?, parole_chiave = ?, classificazione_dewey = ?, updated_at = NOW() WHERE id = ? AND deleted_at IS NULL @@ -1394,7 +1394,7 @@ classificazione_dewey = ?, updated_at = NOW() } $params = array_merge($params, [ !empty($data['formato']) ? $data['formato'] : 'cartaceo', - !empty($data['tipo_media']) ? $data['tipo_media'] : \App\Support\MediaLabels::inferTipoMedia($data['formato'] ?? ''), + \App\Support\MediaLabels::normalizeTipoMedia($data['tipo_media'] ?? null), !empty($data['prezzo']) ? (float) str_replace(',', '.', $data['prezzo']) : null, $editorId, !empty($data['collana']) ? $data['collana'] : null, @@ -1500,7 +1500,7 @@ private function insertBook(\mysqli $db, array $data, ?int $editorId, ?int $genr } $params = array_merge($params, [ !empty($data['formato']) ? $data['formato'] : 'cartaceo', - !empty($data['tipo_media']) ? $data['tipo_media'] : \App\Support\MediaLabels::inferTipoMedia($data['formato'] ?? ''), + \App\Support\MediaLabels::resolveTipoMedia($data['formato'] ?? null, $data['tipo_media'] ?? null), !empty($data['prezzo']) ? (float) str_replace(',', '.', $data['prezzo']) : null, $copie, $copie, @@ -1576,7 +1576,7 @@ private function insertBook(\mysqli $db, array $data, ?int $editorId, ?int $genr } $params = array_merge($params, [ !empty($data['formato']) ? $data['formato'] : 'cartaceo', - !empty($data['tipo_media']) ? $data['tipo_media'] : \App\Support\MediaLabels::inferTipoMedia($data['formato'] ?? ''), + \App\Support\MediaLabels::resolveTipoMedia($data['formato'] ?? null, $data['tipo_media'] ?? null), !empty($data['prezzo']) ? (float) str_replace(',', '.', $data['prezzo']) : null, $copie, $copie, diff --git a/app/Controllers/LibriApiController.php b/app/Controllers/LibriApiController.php index 2c1e119b..19793ff3 100644 --- a/app/Controllers/LibriApiController.php +++ b/app/Controllers/LibriApiController.php @@ -146,16 +146,16 @@ public function list(Request $request, Response $response, mysqli $db): Response // Parse DataTables sorting parameters (with robust null checks to avoid notices) $order = $q['order'][0] ?? null; - $orderColumn = isset($order['column']) ? (int) $order['column'] : 3; // Default to Info column (title) + $orderColumn = isset($order['column']) ? (int) $order['column'] : 4; // Default to Info column (title) $orderDir = (isset($order['dir']) && strtoupper(trim($order['dir'])) === 'DESC') ? 'DESC' : 'ASC'; // Map column indices to database fields - // Columns: 0=checkbox, 1=status, 2=cover, 3=info(title), 4=genre, 5=position, 6=year, 7=actions + // Columns: 0=checkbox, 1=status, 2=media, 3=cover, 4=info(title), 5=genre, 6=position, 7=year, 8=actions $orderByMap = [ - 3 => 'l.titolo', // Info column - sort by title - 4 => 'g.nome', // Genre column - 5 => 's.codice, m.numero_livello, COALESCE(l.posizione_progressiva, p.ordine)', // Position - 6 => 'l.anno_pubblicazione', // Year column + 4 => 'l.titolo', // Info column - sort by title + 5 => 'g.nome', // Genre column + 6 => 's.codice, m.numero_livello, COALESCE(l.posizione_progressiva, p.ordine)', // Position + 7 => 'l.anno_pubblicazione', // Year column ]; $orderByClause = $orderByMap[$orderColumn] ?? 'l.titolo'; diff --git a/app/Controllers/PluginController.php b/app/Controllers/PluginController.php index 688e5f82..19a6482e 100644 --- a/app/Controllers/PluginController.php +++ b/app/Controllers/PluginController.php @@ -214,6 +214,45 @@ public function uninstall(Request $request, Response $response, array $args): Re return $response->withHeader('Content-Type', 'application/json'); } + public function settingsPage(Request $request, Response $response, array $args): Response + { + if (!isset($_SESSION['user']) || $_SESSION['user']['tipo_utente'] !== 'admin') { + return $response->withStatus(403)->withHeader('Location', '/admin/dashboard'); + } + + $pluginId = (int) $args['id']; + $plugin = $this->pluginManager->getPlugin($pluginId); + if (!$plugin) { + return $response->withStatus(404); + } + + $pluginInstance = $this->pluginManager->getPluginInstance($pluginId); + if ($pluginInstance === null || !is_callable([$pluginInstance, 'hasSettingsPage']) || !$pluginInstance->hasSettingsPage()) { + return $response->withStatus(404); + } + + $settingsViewPath = $pluginInstance->getSettingsViewPath(); + if (!is_string($settingsViewPath) || !is_file($settingsViewPath)) { + return $response->withStatus(404); + } + + if (!isset($GLOBALS['plugins'])) { + $GLOBALS['plugins'] = []; + } + $GLOBALS['plugins'][$plugin['name']] = $pluginInstance; + + ob_start(); + require $settingsViewPath; + $content = ob_get_clean(); + + ob_start(); + require __DIR__ . '/../Views/layout.php'; + $html = ob_get_clean(); + + $response->getBody()->write($html); + return $response; + } + /** * Update plugin settings (limited to supported plugins) */ diff --git a/app/Controllers/ScrapeController.php b/app/Controllers/ScrapeController.php index 8f0e5a73..5261b777 100644 --- a/app/Controllers/ScrapeController.php +++ b/app/Controllers/ScrapeController.php @@ -145,14 +145,11 @@ public function byIsbn(Request $request, Response $response): Response $payload = $this->enrichWithSbnData($payload, $cleanIsbn); } + $payload = $this->ensureTipoMedia($payload); + // Normalize ISBN fields (auto-calculate missing isbn10/isbn13) $payload = $this->normalizeIsbnFields($payload, $cleanIsbn); - // Infer tipo_media from formato/source if not already set - if (!isset($payload['tipo_media'])) { - $payload['tipo_media'] = \App\Support\MediaLabels::inferTipoMedia($payload['format'] ?? $payload['formato'] ?? ''); - } - // Hook: scrape.response - Modify final JSON response $payload = \App\Support\Hooks::apply('scrape.response', $payload, [$cleanIsbn, $sources, ['timestamp' => time()]]); @@ -218,14 +215,11 @@ public function byIsbn(Request $request, Response $response): Response $fallbackData = $this->enrichWithSbnData($fallbackData, $cleanIsbn); } + $fallbackData = $this->ensureTipoMedia($fallbackData); + // Normalize ISBN fields (auto-calculate missing isbn10/isbn13) $fallbackData = $this->normalizeIsbnFields($fallbackData, $cleanIsbn); - // Infer tipo_media from formato/source if not already set - if (!isset($fallbackData['tipo_media'])) { - $fallbackData['tipo_media'] = \App\Support\MediaLabels::inferTipoMedia($fallbackData['format'] ?? $fallbackData['formato'] ?? ''); - } - // Ensure plugins can still modify/log the final payload just like regular results $fallbackData = \App\Support\Hooks::apply('scrape.response', $fallbackData, [$cleanIsbn, $sources, ['timestamp' => time()]]); @@ -773,9 +767,15 @@ private function enrichWithSbnData(array $data, string $originalIsbn): array */ private function normalizeIsbnFields(array $data, string $originalIsbn): array { - // Skip ISBN auto-population for non-book sources (e.g., Discogs music). + $resolvedTipoMedia = \App\Support\MediaLabels::resolveTipoMedia( + $data['format'] ?? $data['formato'] ?? null, + $data['tipo_media'] ?? null + ); + $data['tipo_media'] = $resolvedTipoMedia; + + // Skip ISBN auto-population for non-book media. // The barcode is an EAN, not an ISBN — don't stuff it into isbn13/isbn10. - if (($data['source'] ?? '') === 'discogs') { + if ($resolvedTipoMedia !== 'libro') { return $data; } @@ -819,4 +819,14 @@ private function normalizeIsbnFields(array $data, string $originalIsbn): array return $data; } + + private function ensureTipoMedia(array $payload): array + { + $payload['tipo_media'] = \App\Support\MediaLabels::resolveTipoMedia( + $payload['format'] ?? $payload['formato'] ?? null, + $payload['tipo_media'] ?? null + ); + + return $payload; + } } diff --git a/app/Models/BookRepository.php b/app/Models/BookRepository.php index e6f286c2..a5945d14 100644 --- a/app/Models/BookRepository.php +++ b/app/Models/BookRepository.php @@ -301,10 +301,10 @@ public function createBasic(array $data): int $addField('formato', 's', $data['formato'] ?? null); } if ($this->hasColumn('tipo_media')) { - $val = $data['tipo_media'] ?? null; - if ($val === null || $val === '') { - $val = \App\Support\MediaLabels::inferTipoMedia($data['formato'] ?? null); - } + $val = \App\Support\MediaLabels::resolveTipoMedia( + $data['formato'] ?? null, + $data['tipo_media'] ?? null + ); $addField('tipo_media', 's', $this->normalizeEnumValue($val, 'tipo_media', 'libro')); } if ($this->hasColumn('peso')) { @@ -1058,10 +1058,10 @@ public function updateOptionals(int $bookId, array $data): void $cols['illustratore'] = \App\Support\AuthorNormalizer::normalize((string) $data['scraped_illustrator']); } if ($this->hasColumn('tipo_media') && !array_key_exists('tipo_media', $cols)) { - $val = $data['scraped_tipo_media'] ?? null; - if ($val === null || $val === '') { - $val = \App\Support\MediaLabels::inferTipoMedia($data['formato'] ?? ($data['scraped_formato'] ?? null)); - } + $val = \App\Support\MediaLabels::resolveTipoMedia( + $data['formato'] ?? ($data['scraped_formato'] ?? null), + $data['scraped_tipo_media'] ?? null + ); $normalized = $this->normalizeEnumValue((string) $val, 'tipo_media', 'libro'); if ($normalized !== '') { $cols['tipo_media'] = $normalized; diff --git a/app/Routes/web.php b/app/Routes/web.php index df218415..76a4b113 100644 --- a/app/Routes/web.php +++ b/app/Routes/web.php @@ -2867,6 +2867,12 @@ return $controller->uninstall($request, $response, $args); })->add(new CsrfMiddleware())->add(new AdminAuthMiddleware()); + $app->get('/admin/plugins/{id}/settings', function ($request, $response, $args) use ($app) { + $pluginManager = $app->getContainer()->get('pluginManager'); + $controller = new \App\Controllers\PluginController($pluginManager); + return $controller->settingsPage($request, $response, $args); + })->add(new AdminAuthMiddleware()); + // Plugin settings update $app->post('/admin/plugins/{id}/settings', function ($request, $response, $args) use ($app) { $pluginManager = $app->getContainer()->get('pluginManager'); diff --git a/app/Support/BundledPlugins.php b/app/Support/BundledPlugins.php new file mode 100644 index 00000000..039bfe12 --- /dev/null +++ b/app/Support/BundledPlugins.php @@ -0,0 +1,21 @@ + */ - public static function isMusic(?string $formato, ?string $tipoMedia = null): bool + private static function normalizedCandidates(?string $value): array { - if ($tipoMedia !== null && $tipoMedia !== '') { - return $tipoMedia === 'disco'; + if ($value === null) { + return []; } - if ($formato === null || $formato === '') { - return false; + + $trimmed = trim($value); + if ($trimmed === '') { + return []; } - $lower = strtolower(trim($formato)); - // Exact match first - if (in_array($lower, self::MUSIC_FORMATS, true)) { - return true; + + $lower = strtolower($trimmed); + $underscore = preg_replace('/[\s-]+/u', '_', $lower) ?? $lower; + $collapsed = preg_replace('/[\s\-_]+/u', '', $lower) ?? $lower; + + return array_values(array_unique([$lower, $underscore, $collapsed])); + } + + /** + * Normalize explicit tipo_media or common aliases to the canonical enum. + */ + public static function normalizeTipoMedia(?string $tipoMedia): ?string + { + foreach (self::normalizedCandidates($tipoMedia) as $candidate) { + if (isset(self::allTypes()[$candidate])) { + return $candidate; + } + + if (in_array($candidate, ['book', 'books', 'paperback', 'hardcover', 'hardback', 'cartaceo', 'print', 'printed'], true)) { + return 'libro'; + } + + if (in_array($candidate, ['disc', 'record', 'album', 'cd', 'cdaudio', 'compactdisc', 'vinyl', 'vinile', 'lp', 'cassette', 'cassetta', 'audiocassetta'], true)) { + return 'disco'; + } + + if (in_array($candidate, ['audiobook', 'audiobooks', 'audiolibro'], true)) { + return 'audiolibro'; + } + + if (in_array($candidate, ['dvd', 'bluray', 'blu_ray', 'movie', 'film'], true)) { + return 'dvd'; + } + + if (in_array($candidate, ['altro', 'other'], true)) { + return 'altro'; + } + } + + return null; + } + + /** + * Resolve the effective tipo_media, preferring an explicit valid value. + */ + public static function resolveTipoMedia(?string $formato, ?string $tipoMedia = null): string + { + $normalized = self::normalizeTipoMedia($tipoMedia); + if ($normalized !== null) { + return $normalized; } - // Word-boundary match for generic terms - if (preg_match('/\b(?:music|musik)\b/i', $lower) === 1) { + + return self::inferTipoMedia($formato); + } + + /** + * Check if a format string indicates music media. + */ + public static function isMusic(?string $formato, ?string $tipoMedia = null): bool + { + if (self::resolveTipoMedia($formato, $tipoMedia) === 'disco') { return true; } + + foreach (self::normalizedCandidates($formato) as $candidate) { + if (in_array($candidate, self::MUSIC_FORMATS, true)) { + return true; + } + + if (preg_match('/\b(?:music|musik)\b/i', $candidate) === 1) { + return true; + } + } + return false; } @@ -70,10 +139,13 @@ public static function formatDisplayName(?string $formato): string if ($formato === null || $formato === '') { return ''; } - $lower = strtolower(trim($formato)); - if (isset(self::$formatDisplayNames[$lower])) { - return __(self::$formatDisplayNames[$lower]); + + foreach (self::normalizedCandidates($formato) as $candidate) { + if (isset(self::$formatDisplayNames[$candidate])) { + return __(self::$formatDisplayNames[$candidate]); + } } + // Return the original value with first letter uppercase return ucfirst($formato); } @@ -143,19 +215,22 @@ public static function allTypes(): array public static function icon(?string $tipoMedia): string { $types = self::allTypes(); - return $types[$tipoMedia ?? 'libro']['icon'] ?? 'fa-book'; + $resolved = self::normalizeTipoMedia($tipoMedia) ?? 'libro'; + return $types[$resolved]['icon'] ?? 'fa-book'; } public static function schemaOrgType(?string $tipoMedia): string { $types = self::allTypes(); - return $types[$tipoMedia ?? 'libro']['schema'] ?? 'Book'; + $resolved = self::normalizeTipoMedia($tipoMedia) ?? 'libro'; + return $types[$resolved]['schema'] ?? 'Book'; } public static function tipoMediaDisplayName(?string $tipoMedia): string { $types = self::allTypes(); - $label = $types[$tipoMedia ?? 'libro']['label'] ?? 'Libro'; + $resolved = self::normalizeTipoMedia($tipoMedia) ?? 'libro'; + $label = $types[$resolved]['label'] ?? 'Libro'; return __($label); } @@ -167,18 +242,42 @@ public static function inferTipoMedia(?string $formato): string if ($formato === null || $formato === '') { return 'libro'; } - $lower = strtolower(trim($formato)); - foreach (['cd_audio', 'vinile', 'lp', 'cd', 'vinyl', 'cassetta', 'cassette', 'audiocassetta'] as $m) { - if (str_contains($lower, $m)) { - return 'disco'; - } + + $normalized = self::normalizeTipoMedia($formato); + if ($normalized !== null) { + return $normalized; } - if (str_contains($lower, 'audiolibro') || str_contains($lower, 'audiobook')) { - return 'audiolibro'; + + foreach (self::normalizedCandidates($formato) as $candidate) { + foreach (['cdaudio', 'compactdisc', 'vinile', 'vinyl', 'lp', 'cd', 'cassetta', 'cassette', 'audiocassetta'] as $musicToken) { + if (str_contains($candidate, $musicToken)) { + return 'disco'; + } + } + + if (str_contains($candidate, 'audiolibro') || str_contains($candidate, 'audiobook')) { + return 'audiolibro'; + } + + if (str_contains($candidate, 'dvd') || str_contains($candidate, 'bluray') || str_contains($candidate, 'blu_ray')) { + return 'dvd'; + } + + if (str_contains($candidate, 'other') || str_contains($candidate, 'altro')) { + return 'altro'; + } + + if (str_contains($candidate, 'book') || str_contains($candidate, 'paperback') || str_contains($candidate, 'hardcover') || str_contains($candidate, 'hardback')) { + return 'libro'; + } } - if (str_contains($lower, 'dvd') || str_contains($lower, 'blu-ray') || str_contains($lower, 'blu_ray')) { - return 'dvd'; + + foreach (self::normalizedCandidates($formato) as $candidate) { + if (preg_match('/\b(?:music|musik)\b/i', $candidate) === 1) { + return 'disco'; + } } + return 'libro'; } diff --git a/app/Support/PluginManager.php b/app/Support/PluginManager.php index dd08a9e4..9af75b25 100644 --- a/app/Support/PluginManager.php +++ b/app/Support/PluginManager.php @@ -38,20 +38,6 @@ public function __construct(mysqli $db, HookManager $hookManager) } } - /** - * Bundled plugins that ship with Pinakes - * These are auto-registered and activated if their folders exist - */ - private const BUNDLED_PLUGINS = [ - 'open-library', - 'z39-server', - 'api-book-scraper', - 'digital-library', - 'dewey-editor', - 'goodlib', - 'discogs', - ]; - /** * Auto-register bundled plugins that exist on disk but not in database * This ensures bundled plugins survive updates even if DB entries were lost @@ -62,7 +48,7 @@ public function autoRegisterBundledPlugins(): int { $registered = 0; - foreach (self::BUNDLED_PLUGINS as $pluginName) { + foreach (BundledPlugins::LIST as $pluginName) { $pluginPath = $this->pluginsDir . '/' . $pluginName; $jsonPath = $pluginPath . '/plugin.json'; @@ -367,6 +353,16 @@ public function getPluginByName(string $name): ?array return $plugin ?: null; } + public function getPluginInstance(int $pluginId): ?object + { + $plugin = $this->getPlugin($pluginId); + if ($plugin === null) { + return null; + } + + return $this->instantiatePlugin($plugin); + } + /** * Install plugin from uploaded ZIP file * @@ -1185,10 +1181,21 @@ public function loadActivePlugins(): void * @return void */ private function loadPlugin(array $plugin): void + { + $instance = $this->instantiatePlugin($plugin); + if ($instance === null) { + throw new \Exception("Plugin instance could not be created for {$plugin['name']}"); + } + + // Load and register hooks for this plugin + $this->registerPluginHooks((int) $plugin['id'], $instance); + } + + private function instantiatePlugin(array $plugin): ?object { // Save plugin data to prefixed variables before require_once // This prevents plugin files from overwriting $plugin variable (which some do) - $_pluginId = (int)$plugin['id']; + $_pluginId = (int) $plugin['id']; $_pluginName = $plugin['name']; $_pluginPath = $this->pluginsDir . '/' . $plugin['path']; $_mainFile = $_pluginPath . '/' . $plugin['main_file']; @@ -1197,21 +1204,15 @@ private function loadPlugin(array $plugin): void throw new \Exception("Main file not found: {$_mainFile}"); } - // Load plugin main file - // NOTE: Plugin files may define variables that collide with local scope require_once $_mainFile; - // Get plugin class name $className = $this->getPluginClassName($_pluginName); - if (!class_exists($className)) { throw new \Exception("Plugin class not found: {$className}"); } - // Instantiate plugin $instance = new $className($this->db, $this->hookManager); - // Pass plugin ID to the instance when supported (needed for plugin settings) if (is_callable([$instance, 'setPluginId'])) { try { $instance->setPluginId($_pluginId); @@ -1222,8 +1223,7 @@ private function loadPlugin(array $plugin): void } } - // Load and register hooks for this plugin - $this->registerPluginHooks($_pluginId, $instance); + return is_object($instance) ? $instance : null; } /** diff --git a/app/Support/Updater.php b/app/Support/Updater.php index 6bc3d24a..cb08324b 100644 --- a/app/Support/Updater.php +++ b/app/Support/Updater.php @@ -31,21 +31,6 @@ class Updater private string $tempPath; private string $githubToken = ''; - /** - * Bundled plugins that are updated during app updates. - * scraping-pro is NOT bundled — it's a premium add-on managed separately. - * @var array - */ - private const BUNDLED_PLUGINS = [ - 'api-book-scraper', - 'dewey-editor', - 'digital-library', - 'discogs', - 'goodlib', - 'open-library', - 'z39-server', - ]; - /** @var array Files/directories to preserve during update */ private array $preservePaths = [ '.env', @@ -2218,7 +2203,7 @@ private function copyDirectoryRecursive(string $source, string $dest): void /** * Update bundled plugins from the release package. * copyDirectory() skips storage/plugins (preservePaths), so bundled plugins - * must be updated separately. Only plugins listed in BUNDLED_PLUGINS are + * must be updated separately. Only plugins listed in BundledPlugins::LIST are * updated — user-installed and premium plugins (scraping-pro) are untouched. */ private function updateBundledPlugins(string $sourcePath): void @@ -2239,7 +2224,7 @@ private function updateBundledPlugins(string $sourcePath): void } $updated = 0; - foreach (self::BUNDLED_PLUGINS as $pluginName) { + foreach (BundledPlugins::LIST as $pluginName) { $sourcePluginPath = $sourcePluginsDir . '/' . $pluginName; if (!is_dir($sourcePluginPath)) { $this->debugLog('DEBUG', 'Plugin bundled non presente nel pacchetto', ['plugin' => $pluginName]); @@ -2248,6 +2233,7 @@ private function updateBundledPlugins(string $sourcePath): void $targetPluginPath = $targetPluginsDir . '/' . $pluginName; $this->debugLog('INFO', 'Aggiornamento plugin bundled', ['plugin' => $pluginName]); + $this->removeDirectoryTree($targetPluginPath); $this->copyDirectoryRecursive($sourcePluginPath, $targetPluginPath); $updated++; } @@ -2255,6 +2241,28 @@ private function updateBundledPlugins(string $sourcePath): void $this->debugLog('INFO', 'Plugin bundled aggiornati', ['count' => $updated]); } + private function removeDirectoryTree(string $path): void + { + if (!is_dir($path)) { + return; + } + + $iterator = new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($path, \RecursiveDirectoryIterator::SKIP_DOTS), + \RecursiveIteratorIterator::CHILD_FIRST + ); + + foreach ($iterator as $item) { + if ($item->isDir()) { + @rmdir($item->getPathname()); + } else { + @unlink($item->getPathname()); + } + } + + @rmdir($path); + } + /** * Clean up orphan files */ diff --git a/app/Views/admin/plugins.php b/app/Views/admin/plugins.php index 4326a050..2d976646 100644 --- a/app/Views/admin/plugins.php +++ b/app/Views/admin/plugins.php @@ -296,6 +296,13 @@ class="px-4 py-2 bg-purple-100 text-purple-700 rounded-lg hover:bg-purple-200 tr + + + + + + - + + + + diff --git a/tests/discogs-advanced.spec.js b/tests/discogs-advanced.spec.js index d58b66e8..665fb822 100644 --- a/tests/discogs-advanced.spec.js +++ b/tests/discogs-advanced.spec.js @@ -15,6 +15,8 @@ const DB_PASS = process.env.E2E_DB_PASS || ''; const DB_NAME = process.env.E2E_DB_NAME || ''; const DB_SOCKET = process.env.E2E_DB_SOCKET || ''; const RUN_ID = Date.now(); +const SEEDED_MUSIC_EAN = '1234567890123'; +const SEEDED_BOOK_ISBN = '9781234567897'; function dbQuery(sql) { const args = ['-u', DB_USER, `-p${DB_PASS}`, DB_NAME, '-N', '-B', '-e', sql]; @@ -51,12 +53,12 @@ test.describe.serial('Discogs Advanced Tests', () => { // Seed a music record and a book for comparison dbExec( "INSERT INTO libri (titolo, formato, tipo_media, ean, copie_totali, copie_disponibili, descrizione, note_varie, created_at, updated_at) " + - "VALUES ('E2E_ADV_CD_" + RUN_ID + "', 'cd_audio', 'disco', '1234567890123', 1, 1, " + + "VALUES ('E2E_ADV_CD_" + RUN_ID + "', 'cd_audio', 'disco', '" + SEEDED_MUSIC_EAN + "', 1, 1, " + "'Track One - Track Two', 'Cat: TEST-001', NOW(), NOW())" ); dbExec( "INSERT INTO libri (titolo, formato, tipo_media, isbn13, copie_totali, copie_disponibili, descrizione, created_at, updated_at) " + - "VALUES ('E2E_ADV_Book_" + RUN_ID + "', 'cartaceo', 'libro', '9781234567897', 1, 1, " + + "VALUES ('E2E_ADV_Book_" + RUN_ID + "', 'cartaceo', 'libro', '" + SEEDED_BOOK_ISBN + "', 1, 1, " + "'A test book description', NOW(), NOW())" ); @@ -65,7 +67,14 @@ test.describe.serial('Discogs Advanced Tests', () => { }); test.afterAll(async () => { - try { dbExec("DELETE FROM libri WHERE (titolo LIKE 'E2E_ADV_%' OR ean = '1234567890123' OR isbn13 = '9781234567897') AND deleted_at IS NULL"); } catch {} + try { + dbExec( + `DELETE FROM libri + WHERE id IN (${Number(musicBookId) || 0}, ${Number(bookBookId) || 0}) + OR ean = '${SEEDED_MUSIC_EAN}' + OR isbn13 = '${SEEDED_BOOK_ISBN}'` + ); + } catch {} await context?.close(); }); @@ -114,23 +123,26 @@ test.describe.serial('Discogs Advanced Tests', () => { // Test 3: Schema.org uses MusicAlbum for disco, Book for libro // ═══════════════════════════════════════════════════════════════════ test('3. Schema.org JSON-LD type is MusicAlbum for disco', async () => { - // We need the public URL for the music book — get it from sitemap or construct - // The book might not have an author, so book_path may not work - // Instead, check the admin detail for the Schema.org type (admin also renders it? No, only frontend) - // Use the public API to check tipo_media is returned - const apiResp = await page.request.get(`${BASE}/api/books?q=E2E_ADV_CD_${RUN_ID}`); - - if (apiResp.status() === 200) { - const apiData = await apiResp.json(); - const books = Array.isArray(apiData) ? apiData : (apiData.results || apiData.data || []); - const musicBook = books.find((b) => b.titolo?.includes(`E2E_ADV_CD_${RUN_ID}`) || b.title?.includes(`E2E_ADV_CD_${RUN_ID}`)); - - if (musicBook) { - expect(musicBook.tipo_media).toBe('disco'); + const musicResp = await page.request.get(`${BASE}/libro/${musicBookId}`); + expect(musicResp.status()).toBe(200); + const musicHtml = await musicResp.text(); + + const jsonLdBlocks = Array.from( + musicHtml.matchAll(/]*type=["']application\/ld\+json["'][^>]*>([\s\S]*?)<\/script>/gi), + (match) => match[1] + ); + const schemas = jsonLdBlocks.flatMap((block) => { + try { + const parsed = JSON.parse(block.trim()); + return Array.isArray(parsed) ? parsed : [parsed]; + } catch { + return []; } - } + }); + + const musicSchema = schemas.find((schema) => schema && schema['@type'] === 'MusicAlbum'); + expect(musicSchema, 'Frontend JSON-LD is missing MusicAlbum for disco').toBeTruthy(); - // Also verify via direct DB that tipo_media is stored correctly const tipoMedia = dbQuery(`SELECT tipo_media FROM libri WHERE id = ${musicBookId}`); expect(tipoMedia).toBe('disco'); diff --git a/tests/discogs-import.spec.js b/tests/discogs-import.spec.js index b358b582..bfefa4f2 100644 --- a/tests/discogs-import.spec.js +++ b/tests/discogs-import.spec.js @@ -49,7 +49,7 @@ test.describe.serial('Discogs Import: full scraping flow', () => { test.afterAll(async () => { // Cleanup test data - try { dbExec("DELETE FROM libri WHERE (ean = '0720642442524' OR isbn13 LIKE '%720642442524%') AND deleted_at IS NULL"); } catch {} + try { dbExec("DELETE FROM libri WHERE (ean = '0720642442524' OR isbn13 = '0720642442524') AND deleted_at IS NULL"); } catch {} await context?.close(); }); @@ -62,7 +62,7 @@ test.describe.serial('Discogs Import: full scraping flow', () => { // The plugin is bundled, so it should auto-register on page visit await page.waitForTimeout(2000); const isActiveNow = dbQuery("SELECT COUNT(*) FROM plugins WHERE name = 'discogs' AND is_active = 1"); - test.skip(parseInt(isActiveNow) === 0, 'Discogs plugin could not be activated'); + expect(parseInt(isActiveNow, 10), 'Discogs plugin could not be activated').toBeGreaterThan(0); } }); @@ -74,10 +74,7 @@ test.describe.serial('Discogs Import: full scraping flow', () => { const importField = page.locator('#importIsbn'); const importBtn = page.locator('#btnImportIsbn'); - if (!await importBtn.isVisible({ timeout: 5000 }).catch(() => false)) { - test.skip(true, 'Import button not visible — no scraping plugin active'); - return; - } + await expect(importBtn, 'Import button not visible — scraping flow unavailable').toBeVisible({ timeout: 5000 }); // Enter barcode and trigger import await importField.fill(TEST_BARCODE); @@ -91,11 +88,7 @@ test.describe.serial('Discogs Import: full scraping flow', () => { const titleField = page.locator('input[name="titolo"]'); const titleValue = await titleField.inputValue(); - if (titleValue === '') { - // Scraping may have failed (rate limit, network). Check if any source populated data - test.skip(true, 'Scraping did not return data (possibly rate limited)'); - return; - } + expect(titleValue.trim().length, 'Scraping did not return a title for the Discogs barcode').toBeGreaterThan(0); // Title should contain "Nevermind" (the album name) expect(titleValue.toLowerCase()).toContain('nevermind'); @@ -104,7 +97,7 @@ test.describe.serial('Discogs Import: full scraping flow', () => { test('3. Verify scraped fields are populated', async () => { // After successful scraping, check multiple fields const titleValue = await page.locator('input[name="titolo"]').inputValue(); - test.skip(titleValue === '', 'No scraped data available'); + expect(titleValue.trim().length, 'No scraped data available after Discogs import').toBeGreaterThan(0); // Author/Artist should be populated // Choices.js creates items — check if any author is selected @@ -124,7 +117,7 @@ test.describe.serial('Discogs Import: full scraping flow', () => { test('4. Save the imported CD', async () => { const titleValue = await page.locator('input[name="titolo"]').inputValue(); - test.skip(titleValue === '', 'No scraped data to save'); + expect(titleValue.trim().length, 'No scraped data to save').toBeGreaterThan(0); // Set copies (required field) const copieInput = page.locator('input[name="copie_totali"]'); @@ -155,12 +148,10 @@ test.describe.serial('Discogs Import: full scraping flow', () => { if (book === '') { // Try isbn13 const bookByIsbn = dbQuery( - `SELECT titolo, isbn13, formato FROM libri WHERE isbn13 LIKE '%720642442524%' AND deleted_at IS NULL LIMIT 1` + `SELECT titolo, isbn13, formato FROM libri WHERE isbn13 = '${TEST_BARCODE}' AND deleted_at IS NULL LIMIT 1` ); - test.skip(bookByIsbn === '', 'CD not found in database'); - if (bookByIsbn) { - expect(bookByIsbn.toLowerCase()).toContain('nevermind'); - } + expect(bookByIsbn, 'CD not found in database after import/save flow').not.toBe(''); + expect(bookByIsbn.toLowerCase()).toContain('nevermind'); return; } @@ -169,22 +160,19 @@ test.describe.serial('Discogs Import: full scraping flow', () => { test('6. Verify music labels on saved CD detail page', async () => { const bookId = dbQuery( - `SELECT id FROM libri WHERE (ean = '${TEST_BARCODE}' OR isbn13 LIKE '%720642442524%') AND deleted_at IS NULL LIMIT 1` + `SELECT id FROM libri WHERE (ean = '${TEST_BARCODE}' OR isbn13 = '${TEST_BARCODE}') AND deleted_at IS NULL LIMIT 1` ); - test.skip(bookId === '', 'CD not found for label check'); + expect(bookId, 'CD not found for label check').not.toBe(''); await page.goto(`${BASE}/admin/libri/${bookId}`); await page.waitForLoadState('domcontentloaded'); const content = await page.content(); - // Check format was set to a music format by the scraper - const formato = dbQuery(`SELECT formato FROM libri WHERE id = ${bookId}`); + const tipoMedia = dbQuery(`SELECT tipo_media FROM libri WHERE id = ${bookId}`); + expect(tipoMedia).toBe('disco'); - if (formato && ['cd_audio', 'vinile', 'cd', 'vinyl'].some(f => formato.toLowerCase().includes(f))) { - // Music labels should be active - const hasMusicLabel = content.includes('Etichetta') || content.includes('Label') || - content.includes('Anno di Uscita') || content.includes('Release Year'); - expect(hasMusicLabel).toBe(true); - } + const hasMusicLabel = content.includes('Etichetta') || content.includes('Label') || + content.includes('Anno di Uscita') || content.includes('Release Year'); + expect(hasMusicLabel).toBe(true); }); }); diff --git a/tests/discogs-plugin.spec.js b/tests/discogs-plugin.spec.js index 302817fd..f802891a 100644 --- a/tests/discogs-plugin.spec.js +++ b/tests/discogs-plugin.spec.js @@ -32,6 +32,7 @@ test.describe.serial('Discogs Plugin (#87)', () => { /** @type {import('@playwright/test').Page} */ let page; let pluginActivated = false; + let discogsPluginId = ''; test.beforeAll(async ({ browser }) => { test.skip( @@ -68,6 +69,11 @@ test.describe.serial('Discogs Plugin (#87)', () => { await page.goto(`${BASE}/admin/plugins`); await page.waitForLoadState('domcontentloaded'); const pageContent = await page.content(); + const discogsCard = page.locator('div[data-plugin-id]').filter({ + has: page.getByRole('heading', { name: /discogs/i }), + }).first(); + await expect(discogsCard).toBeVisible({ timeout: 5000 }); + // Plugin should appear in the list (installed or available) expect( pageContent.toLowerCase().includes('discogs') || parseInt(pluginExists) > 0 @@ -87,22 +93,15 @@ test.describe.serial('Discogs Plugin (#87)', () => { return; } - // Look for the discogs card and activate button - const discogsCard = page.locator('[data-plugin="discogs"], :text("Discogs")').first(); - if (!await discogsCard.isVisible({ timeout: 3000 }).catch(() => false)) { - // Try to install first - const installBtn = page.locator('button:has-text("Installa")').first(); - if (await installBtn.isVisible({ timeout: 2000 }).catch(() => false)) { - await installBtn.click(); - await page.waitForLoadState('domcontentloaded'); - await page.waitForTimeout(2000); - } - } + discogsPluginId = dbQuery("SELECT id FROM plugins WHERE name = 'discogs' LIMIT 1"); + expect(discogsPluginId).not.toBe(''); - // Now activate - await page.goto(`${BASE}/admin/plugins`); - await page.waitForLoadState('domcontentloaded'); - const activateBtn = page.locator('[data-plugin="discogs"] button:has-text("Attiva"), button[data-action="activate"][data-plugin="discogs"]').first(); + const discogsCard = page.locator('div[data-plugin-id]').filter({ + has: page.getByRole('heading', { name: /discogs/i }), + }).first(); + await expect(discogsCard, 'Discogs card not found on the plugins page').toBeVisible({ timeout: 5000 }); + + const activateBtn = discogsCard.getByRole('button', { name: /^Attiva$/ }).first(); if (await activateBtn.isVisible({ timeout: 3000 }).catch(() => false)) { await activateBtn.click(); await page.waitForLoadState('domcontentloaded'); @@ -113,28 +112,22 @@ test.describe.serial('Discogs Plugin (#87)', () => { const activeNow = dbQuery( "SELECT COUNT(*) FROM plugins WHERE name = 'discogs' AND is_active = 1" ); - if (parseInt(activeNow) > 0) { - pluginActivated = true; - } + expect(parseInt(activeNow, 10), 'Discogs plugin failed to activate').toBeGreaterThan(0); + pluginActivated = true; }); test('3. Plugin settings page loads', async () => { test.skip(!pluginActivated, 'Discogs plugin not activated'); + if (!discogsPluginId) { + discogsPluginId = dbQuery("SELECT id FROM plugins WHERE name = 'discogs' LIMIT 1"); + } + expect(discogsPluginId).not.toBe(''); - // Navigate to plugin settings - await page.goto(`${BASE}/admin/plugins`); + await page.goto(`${BASE}/admin/plugins/${discogsPluginId}/settings`); await page.waitForLoadState('domcontentloaded'); - // Look for settings button/link for discogs - const settingsLink = page.locator('[data-plugin="discogs"] a:has-text("Impostazioni"), a[href*="discogs"][href*="settings"]').first(); - if (await settingsLink.isVisible({ timeout: 3000 }).catch(() => false)) { - await settingsLink.click(); - await page.waitForLoadState('domcontentloaded'); - - // Verify settings form has API token field - const tokenField = page.locator('input[name="api_token"]'); - expect(await tokenField.isVisible({ timeout: 3000 }).catch(() => false)).toBe(true); - } + const tokenField = page.locator('input[name="api_token"]'); + await expect(tokenField).toBeVisible({ timeout: 3000 }); }); test('4. MediaLabels: book with music format shows adapted labels', async () => { @@ -190,16 +183,16 @@ test.describe.serial('Discogs Plugin (#87)', () => { "SELECT id FROM libri WHERE titolo = 'E2E_DISCOGS_Frontend_CD' AND deleted_at IS NULL LIMIT 1" ); - // Get the frontend URL for this book - const resp = await page.request.get(`${BASE}/admin/libri/${bookId}`); + const resp = await page.request.get(`${BASE}/libro/${bookId}`); expect(resp.status()).toBe(200); - // Check that on the admin page with vinyl format, labels are music-aware + // Check that the frontend music page uses the barcode label path const html = await resp.text(); const hasBarcode = html.includes('Barcode'); const hasMusicLabel = html.includes('Etichetta') || html.includes('Label') || html.includes('Anno di Uscita') || html.includes('Release Year'); - expect(hasBarcode || hasMusicLabel).toBe(true); + expect(hasBarcode).toBe(true); + expect(hasMusicLabel).toBe(true); }); test('7. Discogs scraping via ISBN import (if plugin active)', async () => { diff --git a/tests/multisource-scraping.spec.js b/tests/multisource-scraping.spec.js new file mode 100644 index 00000000..583b3ed1 --- /dev/null +++ b/tests/multisource-scraping.spec.js @@ -0,0 +1,377 @@ +// @ts-check +const { test, expect } = require('@playwright/test'); +const { execFileSync } = require('child_process'); + +const BASE = process.env.E2E_BASE_URL || 'http://localhost:8081'; +const ADMIN_EMAIL = process.env.E2E_ADMIN_EMAIL || ''; +const ADMIN_PASS = process.env.E2E_ADMIN_PASS || ''; +const DB_USER = process.env.E2E_DB_USER || ''; +const DB_PASS = process.env.E2E_DB_PASS || ''; +const DB_NAME = process.env.E2E_DB_NAME || ''; +const DB_SOCKET = process.env.E2E_DB_SOCKET || ''; +const RUN_ID = Date.now().toString(); +const RUN_TAG = `E2E_MULTI_${RUN_ID}`; + +const OPEN_LIBRARY_ISBN = '9780140328721'; +const ITALIAN_ISBN = '9788804671664'; +const NEVERMIND_BARCODE = '0720642442524'; +const MEDDLE_BARCODE = '5099902894225'; + +const MANUAL_BOOK_TITLE = `${RUN_TAG} BOOK MANUAL`; +const IMPORTED_BOOK_TITLE = `${RUN_TAG} BOOK IMPORT`; +const MANUAL_DISC_TITLE = `${RUN_TAG} DISC MANUAL`; +const IMPORTED_DISC_1_TITLE = `${RUN_TAG} DISC NEVERMIND`; +const IMPORTED_DISC_2_TITLE = `${RUN_TAG} DISC MEDDLE`; + +const MANUAL_BOOK_ISBN13 = `9781234${RUN_ID.slice(-6)}`; +const MANUAL_DISC_EAN = `999${RUN_ID.slice(-10)}`; +const IMPORTED_BOOK_ISBN13 = `9782234${RUN_ID.slice(-6)}`; +const IMPORTED_DISC_1_EAN = `888${RUN_ID.slice(-10)}`; +const IMPORTED_DISC_2_EAN = `777${RUN_ID.slice(-10)}`; + +function mysqlArgs(sql) { + const args = ['-u', DB_USER, `-p${DB_PASS}`, DB_NAME, '-N', '-B', '-e', sql]; + if (DB_SOCKET) args.splice(3, 0, '-S', DB_SOCKET); + return args; +} + +function dbQuery(sql) { + return execFileSync('mysql', mysqlArgs(sql), { + encoding: 'utf-8', + timeout: 10000, + }).trim(); +} + +function sqlEscape(value) { + return String(value).replace(/\\/g, '\\\\').replace(/'/g, "\\'"); +} + +async function loginAsAdmin(page) { + await page.goto(`${BASE}/accedi`); + await page.fill('input[name="email"]', ADMIN_EMAIL); + await page.fill('input[name="password"]', ADMIN_PASS); + await page.click('button[type="submit"]'); + await page.waitForURL(/\/admin\//, { timeout: 15000 }); +} + +async function openCreateForm(page) { + await page.goto(`${BASE}/admin/libri/crea`); + await page.waitForLoadState('domcontentloaded'); +} + +async function importIdentifier(page, identifier) { + await page.locator('#importIsbn').fill(identifier); + await page.locator('#btnImportIsbn').click(); + await expect(page.locator('input[name="titolo"]')).not.toHaveValue('', { timeout: 20000 }); + + const sourceNameLocator = page.locator('#scrapeSourceName'); + await expect.poll( + async () => ((await sourceNameLocator.textContent().catch(() => '')) || '').trim(), + { timeout: 5000 } + ).not.toBe(''); + const sourceName = await sourceNameLocator.textContent().catch(() => ''); + return (sourceName || '').trim(); +} + +async function clearImportedEan(page) { + const scrapedEan = page.locator('#scraped_ean'); + if (await scrapedEan.count()) { + await scrapedEan.evaluate((node) => { + node.value = ''; + }); + } +} + +async function saveCurrentForm(page) { + await page.locator('button[type="submit"]').first().click(); + + const swalConfirm = page.locator('.swal2-confirm'); + if (await swalConfirm.isVisible({ timeout: 5000 }).catch(() => false)) { + await swalConfirm.click(); + } + + await page.waitForURL(/\/admin\/libri\/\d+/, { timeout: 15000 }); + const match = page.url().match(/\/admin\/libri\/(\d+)/); + if (!match) { + throw new Error(`Could not resolve saved book id from URL: ${page.url()}`); + } + + return Number(match[1]); +} + +async function getScrapePayload(page, identifier) { + const response = await page.request.get(`${BASE}/api/scrape/isbn?isbn=${encodeURIComponent(identifier)}`); + expect(response.status(), `Unexpected scrape status for ${identifier}`).toBe(200); + return response.json(); +} + +test.describe.serial('Multi-source scraping and creation flows', () => { + /** @type {import('@playwright/test').BrowserContext} */ + let context; + /** @type {import('@playwright/test').Page} */ + let page; + + let manualBookId = 0; + let importedBookId = 0; + let manualDiscId = 0; + let importedDisc1Id = 0; + let importedDisc2Id = 0; + + test.beforeAll(async ({ browser }) => { + test.skip( + !ADMIN_EMAIL || !ADMIN_PASS || !DB_USER || !DB_PASS || !DB_NAME, + 'Missing E2E env vars' + ); + + context = await browser.newContext(); + page = await context.newPage(); + await loginAsAdmin(page); + }); + + test.afterAll(async () => { + await context?.close(); + }); + + test('1. Scraping plugins are active with the expected priority order', async () => { + const activePlugins = dbQuery( + "SELECT GROUP_CONCAT(name ORDER BY name SEPARATOR ',') FROM plugins WHERE name IN ('discogs','open-library','z39-server') AND is_active = 1" + ); + expect(activePlugins).toContain('discogs'); + expect(activePlugins).toContain('open-library'); + expect(activePlugins).toContain('z39-server'); + + const hookOrder = dbQuery( + "SELECT GROUP_CONCAT(CONCAT(p.name, ':', ph.priority) ORDER BY ph.priority SEPARATOR ',') " + + "FROM plugin_hooks ph JOIN plugins p ON p.id = ph.plugin_id " + + "WHERE ph.hook_name = 'scrape.fetch.custom' AND ph.is_active = 1 AND p.name IN ('z39-server','open-library','discogs')" + ); + expect(hookOrder).toBe('z39-server:3,open-library:5,discogs:8'); + }); + + test('2. Scrape API returns Open Library book data for a known ISBN', async () => { + const payload = await getScrapePayload(page, OPEN_LIBRARY_ISBN); + + expect(payload.title).toContain('Fantastic Mr. Fox'); + expect(payload.tipo_media).toBe('libro'); + expect(payload.source).toContain('openlibrary.org'); + expect(Array.isArray(payload.authors) ? payload.authors.length : 0).toBeGreaterThan(0); + expect(payload.image).toBeTruthy(); + }); + + test('3. Scrape API returns enriched Italian metadata for a second book ISBN', async () => { + const payload = await getScrapePayload(page, ITALIAN_ISBN); + + expect(payload.title).toBeTruthy(); + expect(payload.tipo_media).toBe('libro'); + expect(payload.classificazione_dewey).toBe('188'); + expect(payload.isbn13).toBe(ITALIAN_ISBN); + expect((payload.collana || payload.series || '').length).toBeGreaterThan(0); + }); + + test('4. Scrape API returns Discogs music data for Nevermind barcode', async () => { + const payload = await getScrapePayload(page, NEVERMIND_BARCODE); + + expect(payload.source).toBe('discogs'); + expect(payload.title).toContain('Nevermind'); + expect(payload.tipo_media).toBe('disco'); + expect(payload.ean).toBe(NEVERMIND_BARCODE); + expect(payload.publisher).toBeTruthy(); + }); + + test('5. Scrape API returns Discogs music data for Meddle barcode', async () => { + const payload = await getScrapePayload(page, MEDDLE_BARCODE); + + expect(payload.source).toBe('discogs'); + expect(payload.title).toContain('Meddle'); + expect(payload.tipo_media).toBe('disco'); + expect(payload.ean).toBe(MEDDLE_BARCODE); + expect(payload.image).toBeTruthy(); + }); + + test('6. Admin can create a manual book from the create form', async () => { + await openCreateForm(page); + + await page.locator('input[name="titolo"]').fill(MANUAL_BOOK_TITLE); + await page.locator('input[name="isbn13"]').fill(MANUAL_BOOK_ISBN13); + await page.locator('input[name="copie_totali"]').fill('1'); + await page.locator('#tipo_media').selectOption('libro'); + await page.locator('input[name="formato"]').fill('cartaceo'); + + manualBookId = await saveCurrentForm(page); + expect(manualBookId).toBeGreaterThan(0); + }); + + test('7. The manual book is persisted as a book record', async () => { + const row = dbQuery( + `SELECT CONCAT(id, '|', titolo, '|', COALESCE(tipo_media, ''), '|', COALESCE(isbn13, '')) FROM libri WHERE titolo = '${sqlEscape(MANUAL_BOOK_TITLE)}' AND deleted_at IS NULL ORDER BY id DESC LIMIT 1` + ); + + expect(row).toContain(MANUAL_BOOK_TITLE); + expect(row).toContain('|libro|'); + expect(row).toContain(MANUAL_BOOK_ISBN13); + }); + + test('8. Admin can import and save a book from Open Library', async () => { + await openCreateForm(page); + + const sourceName = await importIdentifier(page, OPEN_LIBRARY_ISBN); + expect(sourceName).toContain('Open Library'); + + await expect(page.locator('input[name="isbn13"]')).toHaveValue(OPEN_LIBRARY_ISBN); + await page.locator('input[name="titolo"]').fill(IMPORTED_BOOK_TITLE); + await page.locator('input[name="isbn10"]').fill(''); + await page.locator('input[name="isbn13"]').fill(IMPORTED_BOOK_ISBN13); + await page.locator('input[name="ean"]').fill(''); + await clearImportedEan(page); + await page.locator('input[name="copie_totali"]').fill('1'); + await expect(page.locator('#tipo_media')).toHaveValue('libro'); + + importedBookId = await saveCurrentForm(page); + expect(importedBookId).toBeGreaterThan(0); + }); + + test('9. The imported book detail keeps book labels and ISBN metadata', async () => { + const row = dbQuery( + `SELECT CONCAT(COALESCE(tipo_media, ''), '|', COALESCE(isbn13, ''), '|', COALESCE(ean, '')) FROM libri WHERE id = ${importedBookId}` + ); + expect(row).toContain('libro'); + expect(row).toContain(IMPORTED_BOOK_ISBN13); + + await page.goto(`${BASE}/admin/libri/${importedBookId}`); + await page.waitForLoadState('domcontentloaded'); + const html = await page.content(); + + const hasBookLabel = html.includes('Editore') || html.includes('Publisher'); + const hasIsbnLabel = html.includes('ISBN-13') || html.includes(IMPORTED_BOOK_ISBN13); + expect(hasBookLabel).toBe(true); + expect(hasIsbnLabel).toBe(true); + }); + + test('10. Admin can create a manual disc from the create form', async () => { + await openCreateForm(page); + + await page.locator('input[name="titolo"]').fill(MANUAL_DISC_TITLE); + await page.locator('input[name="ean"]').fill(MANUAL_DISC_EAN); + await page.locator('input[name="copie_totali"]').fill('1'); + await page.locator('#tipo_media').selectOption('disco'); + await page.locator('input[name="formato"]').fill('cd_audio'); + await page.locator('textarea[name="descrizione"]').fill('Manual test tracklist'); + + manualDiscId = await saveCurrentForm(page); + expect(manualDiscId).toBeGreaterThan(0); + }); + + test('11. The manual disc is persisted with music-specific metadata', async () => { + const row = dbQuery( + `SELECT CONCAT(COALESCE(tipo_media, ''), '|', COALESCE(ean, ''), '|', COALESCE(formato, '')) FROM libri WHERE id = ${manualDiscId}` + ); + expect(row).toContain('disco'); + expect(row).toContain(MANUAL_DISC_EAN); + expect(row).toContain('cd_audio'); + + await page.goto(`${BASE}/admin/libri/${manualDiscId}`); + await page.waitForLoadState('domcontentloaded'); + const html = await page.content(); + + const hasMusicBadge = html.includes('fa-compact-disc') || html.includes('Barcode'); + expect(hasMusicBadge).toBe(true); + }); + + test('12. Admin can import and save a Discogs music release from Nevermind barcode', async () => { + await openCreateForm(page); + + const sourceName = await importIdentifier(page, NEVERMIND_BARCODE); + expect(sourceName.toLowerCase()).toContain('discogs'); + + await expect(page.locator('#tipo_media')).toHaveValue('disco'); + await expect(page.locator('input[name="ean"]')).toHaveValue(NEVERMIND_BARCODE); + await page.locator('input[name="titolo"]').fill(IMPORTED_DISC_1_TITLE); + await page.locator('input[name="ean"]').fill(IMPORTED_DISC_1_EAN); + await page.locator('input[name="isbn10"]').fill(''); + await page.locator('input[name="isbn13"]').fill(''); + await page.locator('input[name="copie_totali"]').fill('1'); + + importedDisc1Id = await saveCurrentForm(page); + expect(importedDisc1Id).toBeGreaterThan(0); + }); + + test('13. The first imported disc exposes music labels and Discogs metadata', async () => { + const row = dbQuery( + `SELECT CONCAT(COALESCE(tipo_media, ''), '|', COALESCE(ean, ''), '|', COALESCE(editore_id, 0), '|', COALESCE(anno_pubblicazione, '')) FROM libri WHERE id = ${importedDisc1Id}` + ); + expect(row).toContain('disco'); + expect(row).toContain(IMPORTED_DISC_1_EAN); + + await page.goto(`${BASE}/admin/libri/${importedDisc1Id}`); + await page.waitForLoadState('domcontentloaded'); + const html = await page.content(); + + const hasMusicLabel = html.includes('Etichetta') || html.includes('Label'); + const hasBarcode = html.includes('Barcode') || html.includes(NEVERMIND_BARCODE); + expect(hasMusicLabel || hasBarcode).toBe(true); + }); + + test('14. Admin can import and save a second Discogs release from Meddle barcode', async () => { + await openCreateForm(page); + + const sourceName = await importIdentifier(page, MEDDLE_BARCODE); + expect(sourceName.toLowerCase()).toContain('discogs'); + + await expect(page.locator('#tipo_media')).toHaveValue('disco'); + await expect(page.locator('input[name="ean"]')).toHaveValue(MEDDLE_BARCODE); + await page.locator('input[name="titolo"]').fill(IMPORTED_DISC_2_TITLE); + await page.locator('input[name="ean"]').fill(IMPORTED_DISC_2_EAN); + await page.locator('input[name="isbn10"]').fill(''); + await page.locator('input[name="isbn13"]').fill(''); + await page.locator('input[name="copie_totali"]').fill('1'); + + importedDisc2Id = await saveCurrentForm(page); + expect(importedDisc2Id).toBeGreaterThan(0); + + const row = dbQuery( + `SELECT CONCAT(COALESCE(tipo_media, ''), '|', COALESCE(ean, ''), '|', COALESCE(titolo, '')) FROM libri WHERE id = ${importedDisc2Id}` + ); + expect(row).toContain('disco'); + expect(row).toContain(IMPORTED_DISC_2_EAN); + expect(row).toContain(IMPORTED_DISC_2_TITLE); + }); + + test('15. Admin filters and public search distinguish the new books and discs', async () => { + const adminResponse = await page.request.get( + `${BASE}/api/libri?tipo_media=disco&start=0&length=200&search_text=${encodeURIComponent(RUN_TAG)}` + ); + expect(adminResponse.status()).toBe(200); + const adminData = await adminResponse.json(); + const adminText = JSON.stringify(adminData.data || []); + + expect(adminText).toContain(MANUAL_DISC_TITLE); + expect(adminText).toContain(IMPORTED_DISC_1_TITLE); + expect(adminText).toContain(IMPORTED_DISC_2_TITLE); + expect(adminText).not.toContain(MANUAL_BOOK_TITLE); + expect(adminText).not.toContain(IMPORTED_BOOK_TITLE); + + const publicResponse = await page.request.get(`${BASE}/api/catalog?q=${encodeURIComponent(RUN_TAG)}`); + expect(publicResponse.status()).toBe(200); + const publicData = await publicResponse.json(); + const publicHtml = publicData.html || ''; + + expect(publicHtml).toContain(MANUAL_BOOK_TITLE); + expect(publicHtml).toContain(IMPORTED_BOOK_TITLE); + expect(publicHtml).toContain(MANUAL_DISC_TITLE); + expect(publicHtml).toContain(IMPORTED_DISC_1_TITLE); + expect(publicHtml).toContain(IMPORTED_DISC_2_TITLE); + + const publicDiscResponse = await page.request.get( + `${BASE}/api/catalog?q=${encodeURIComponent(RUN_TAG)}&tipo_media=disco` + ); + expect(publicDiscResponse.status()).toBe(200); + const publicDiscData = await publicDiscResponse.json(); + const publicDiscHtml = publicDiscData.html || ''; + + expect(publicDiscHtml).toContain(MANUAL_DISC_TITLE); + expect(publicDiscHtml).toContain(IMPORTED_DISC_1_TITLE); + expect(publicDiscHtml).toContain(IMPORTED_DISC_2_TITLE); + expect(publicDiscHtml).not.toContain(MANUAL_BOOK_TITLE); + expect(publicDiscHtml).not.toContain(IMPORTED_BOOK_TITLE); + }); +}); diff --git a/tests/playwright.config.js b/tests/playwright.config.js index 987e830b..6a37cb7c 100644 --- a/tests/playwright.config.js +++ b/tests/playwright.config.js @@ -6,6 +6,7 @@ module.exports = defineConfig({ timeout: 120_000, expect: { timeout: 15_000 }, reporter: 'list', + workers: 1, use: { baseURL: process.env.APP_URL || 'http://localhost:8081', headless: true, From b5a247de4c681a3fd188ab96ad16796dacba5a9c Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Tue, 31 Mar 2026 07:38:23 +0200 Subject: [PATCH 18/28] Address follow-up CodeRabbit review fixes --- app/Controllers/FrontendController.php | 6 +- app/Controllers/PluginController.php | 2 +- app/Models/BookRepository.php | 20 ++- app/Support/MediaLabels.php | 17 +-- app/Support/RouteTranslator.php | 1 + app/Support/Updater.php | 75 ++++++++-- app/Views/admin/plugins.php | 4 +- installer/classes/Installer.php | 2 +- .../database/migrations/migrate_0.5.4.sql | 19 ++- installer/database/schema.sql | 2 +- storage/plugins/discogs/DiscogsPlugin.php | 138 ++++++++++++++---- tests/discogs-advanced.spec.js | 4 +- tests/discogs-import.spec.js | 29 ++-- 13 files changed, 232 insertions(+), 87 deletions(-) diff --git a/app/Controllers/FrontendController.php b/app/Controllers/FrontendController.php index 23a6462c..2da82cc5 100644 --- a/app/Controllers/FrontendController.php +++ b/app/Controllers/FrontendController.php @@ -734,6 +734,10 @@ private function getFilters(array $params): array { // Support both 'q' (header form) and 'search' (hero form) parameters $searchTerm = $params['q'] ?? $params['search'] ?? ''; + $rawTipoMedia = $params['tipo_media'] ?? ''; + if (is_array($rawTipoMedia)) { + $rawTipoMedia = $rawTipoMedia[0] ?? ''; + } return [ 'search' => $searchTerm, @@ -742,7 +746,7 @@ private function getFilters(array $params): array 'editore' => $params['editore'] ?? '', 'anno_min' => $params['anno_min'] ?? '', 'anno_max' => $params['anno_max'] ?? '', - 'tipo_media' => $params['tipo_media'] ?? '', + 'tipo_media' => trim((string) $rawTipoMedia), 'sort' => $params['sort'] ?? 'newest' ]; } diff --git a/app/Controllers/PluginController.php b/app/Controllers/PluginController.php index 19a6482e..43a28b66 100644 --- a/app/Controllers/PluginController.php +++ b/app/Controllers/PluginController.php @@ -217,7 +217,7 @@ public function uninstall(Request $request, Response $response, array $args): Re public function settingsPage(Request $request, Response $response, array $args): Response { if (!isset($_SESSION['user']) || $_SESSION['user']['tipo_utente'] !== 'admin') { - return $response->withStatus(403)->withHeader('Location', '/admin/dashboard'); + return $response->withStatus(403); } $pluginId = (int) $args['id']; diff --git a/app/Models/BookRepository.php b/app/Models/BookRepository.php index a5945d14..e5383c8c 100644 --- a/app/Models/BookRepository.php +++ b/app/Models/BookRepository.php @@ -1058,13 +1058,19 @@ public function updateOptionals(int $bookId, array $data): void $cols['illustratore'] = \App\Support\AuthorNormalizer::normalize((string) $data['scraped_illustrator']); } if ($this->hasColumn('tipo_media') && !array_key_exists('tipo_media', $cols)) { - $val = \App\Support\MediaLabels::resolveTipoMedia( - $data['formato'] ?? ($data['scraped_formato'] ?? null), - $data['scraped_tipo_media'] ?? null - ); - $normalized = $this->normalizeEnumValue((string) $val, 'tipo_media', 'libro'); - if ($normalized !== '') { - $cols['tipo_media'] = $normalized; + $hasMediaSignal = array_key_exists('formato', $data) + || array_key_exists('scraped_formato', $data) + || array_key_exists('scraped_tipo_media', $data); + + if ($hasMediaSignal) { + $val = \App\Support\MediaLabels::resolveTipoMedia( + $data['formato'] ?? ($data['scraped_formato'] ?? null), + $data['scraped_tipo_media'] ?? null + ); + $normalized = $this->normalizeEnumValue((string) $val, 'tipo_media', 'libro'); + if ($normalized !== '') { + $cols['tipo_media'] = $normalized; + } } } if (!$cols) diff --git a/app/Support/MediaLabels.php b/app/Support/MediaLabels.php index a8f85ab8..1bb39bda 100644 --- a/app/Support/MediaLabels.php +++ b/app/Support/MediaLabels.php @@ -90,21 +90,12 @@ public static function resolveTipoMedia(?string $formato, ?string $tipoMedia = n */ public static function isMusic(?string $formato, ?string $tipoMedia = null): bool { - if (self::resolveTipoMedia($formato, $tipoMedia) === 'disco') { - return true; + $normalizedTipoMedia = self::normalizeTipoMedia($tipoMedia); + if ($normalizedTipoMedia !== null) { + return $normalizedTipoMedia === 'disco'; } - foreach (self::normalizedCandidates($formato) as $candidate) { - if (in_array($candidate, self::MUSIC_FORMATS, true)) { - return true; - } - - if (preg_match('/\b(?:music|musik)\b/i', $candidate) === 1) { - return true; - } - } - - return false; + return self::inferTipoMedia($formato) === 'disco'; } /** diff --git a/app/Support/RouteTranslator.php b/app/Support/RouteTranslator.php index 4a9dc4d4..d95587b8 100644 --- a/app/Support/RouteTranslator.php +++ b/app/Support/RouteTranslator.php @@ -46,6 +46,7 @@ class RouteTranslator 'catalog_legacy' => '/catalog.php', 'book' => '/book', 'book_legacy' => '/book-detail.php', + 'plugins' => '/admin/plugins', 'author' => '/author', 'publisher' => '/publisher', 'genre' => '/genre', diff --git a/app/Support/Updater.php b/app/Support/Updater.php index cb08324b..2965cea1 100644 --- a/app/Support/Updater.php +++ b/app/Support/Updater.php @@ -2224,28 +2224,77 @@ private function updateBundledPlugins(string $sourcePath): void } $updated = 0; + $targetPluginsDirReal = realpath($targetPluginsDir); + if ($targetPluginsDirReal === false) { + throw new Exception(__('Impossibile risolvere il percorso della directory plugins.')); + } + foreach (BundledPlugins::LIST as $pluginName) { - $sourcePluginPath = $sourcePluginsDir . '/' . $pluginName; + $pluginSlug = $this->normalizeBundledPluginSlug($pluginName); + $sourcePluginPath = $sourcePluginsDir . '/' . $pluginSlug; if (!is_dir($sourcePluginPath)) { - $this->debugLog('DEBUG', 'Plugin bundled non presente nel pacchetto', ['plugin' => $pluginName]); + $this->debugLog('DEBUG', 'Plugin bundled non presente nel pacchetto', ['plugin' => $pluginSlug]); continue; } - $targetPluginPath = $targetPluginsDir . '/' . $pluginName; - $this->debugLog('INFO', 'Aggiornamento plugin bundled', ['plugin' => $pluginName]); - $this->removeDirectoryTree($targetPluginPath); - $this->copyDirectoryRecursive($sourcePluginPath, $targetPluginPath); + $targetPluginPath = $targetPluginsDirReal . '/' . $pluginSlug; + $stagingPath = $targetPluginsDirReal . '/.' . $pluginSlug . '.tmp-' . bin2hex(random_bytes(4)); + $backupPath = $targetPluginsDirReal . '/.' . $pluginSlug . '.bak-' . bin2hex(random_bytes(4)); + + $this->debugLog('INFO', 'Aggiornamento plugin bundled', ['plugin' => $pluginSlug]); + + try { + $this->copyDirectoryRecursive($sourcePluginPath, $stagingPath); + + if (is_dir($targetPluginPath) && !rename($targetPluginPath, $backupPath)) { + $this->removeDirectoryTree($stagingPath); + throw new Exception(sprintf(__('Impossibile creare il backup del plugin: %s'), $pluginSlug)); + } + + if (!rename($stagingPath, $targetPluginPath)) { + if (is_dir($backupPath) && !rename($backupPath, $targetPluginPath)) { + throw new Exception(sprintf(__('Impossibile ripristinare il plugin precedente: %s'), $pluginSlug)); + } + throw new Exception(sprintf(__('Impossibile attivare la nuova versione del plugin: %s'), $pluginSlug)); + } + + if (is_dir($backupPath)) { + $this->removeDirectoryTree($backupPath); + } + } catch (\Throwable $e) { + if (is_dir($stagingPath)) { + $this->removeDirectoryTree($stagingPath); + } + if (is_dir($backupPath) && !is_dir($targetPluginPath)) { + rename($backupPath, $targetPluginPath); + } + throw $e; + } + $updated++; } $this->debugLog('INFO', 'Plugin bundled aggiornati', ['count' => $updated]); } + private function normalizeBundledPluginSlug(string $pluginName): string + { + $pluginSlug = trim($pluginName); + if ($pluginSlug === '' || preg_match('/^[a-z0-9][a-z0-9-]*$/', $pluginSlug) !== 1) { + throw new Exception(sprintf(__('Slug plugin bundled non valido: %s'), $pluginName)); + } + + return $pluginSlug; + } + private function removeDirectoryTree(string $path): void { - if (!is_dir($path)) { + if (!file_exists($path)) { return; } + if (!is_dir($path)) { + throw new Exception(sprintf(__('Percorso plugin non valido: %s'), $path)); + } $iterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($path, \RecursiveDirectoryIterator::SKIP_DOTS), @@ -2254,13 +2303,19 @@ private function removeDirectoryTree(string $path): void foreach ($iterator as $item) { if ($item->isDir()) { - @rmdir($item->getPathname()); + if (!rmdir($item->getPathname())) { + throw new Exception(sprintf(__('Impossibile rimuovere directory: %s'), $item->getPathname())); + } } else { - @unlink($item->getPathname()); + if (!unlink($item->getPathname())) { + throw new Exception(sprintf(__('Impossibile rimuovere file: %s'), $item->getPathname())); + } } } - @rmdir($path); + if (!rmdir($path)) { + throw new Exception(sprintf(__('Impossibile rimuovere directory: %s'), $path)); + } } /** diff --git a/app/Views/admin/plugins.php b/app/Views/admin/plugins.php index 2d976646..238173b0 100644 --- a/app/Views/admin/plugins.php +++ b/app/Views/admin/plugins.php @@ -241,7 +241,7 @@ class="px-4 py-2 " data-plugin-name="" data-plugin-type="api-book-scraper" data-has-config="" - data-settings-url="" + data-settings-url="" data-api-endpoint="" data-timeout="" data-enabled="" onclick="openApiBookScraperModal(this)"> @@ -297,7 +297,7 @@ class="px-4 py-2 bg-purple-100 text-purple-700 rounded-lg hover:bg-purple-200 tr - diff --git a/installer/classes/Installer.php b/installer/classes/Installer.php index e3566f22..69c6eebb 100755 --- a/installer/classes/Installer.php +++ b/installer/classes/Installer.php @@ -646,7 +646,7 @@ public function importOptimizationIndexes(): bool 'idx_isbn10' => 'isbn10', 'idx_genere_scaffale' => 'genere_id, scaffale_id', 'idx_sottogenere_scaffale' => 'sottogenere_id, scaffale_id', - 'idx_libri_tipo_media_deleted_at' => 'tipo_media, deleted_at', + 'idx_libri_tipo_media_deleted_at' => 'deleted_at, tipo_media', ], 'libri_autori' => [ 'idx_libro_autore' => 'libro_id, autore_id', diff --git a/installer/database/migrations/migrate_0.5.4.sql b/installer/database/migrations/migrate_0.5.4.sql index d5bed53d..f2b21ddb 100644 --- a/installer/database/migrations/migrate_0.5.4.sql +++ b/installer/database/migrations/migrate_0.5.4.sql @@ -13,12 +13,29 @@ EXECUTE stmt; DEALLOCATE PREPARE stmt; -- Composite index for media filtering + soft delete +SET @idx_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'libri' + AND INDEX_NAME = 'idx_libri_tipo_media_deleted_at'); +SET @idx_order_ok = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'libri' + AND INDEX_NAME = 'idx_libri_tipo_media_deleted_at' + AND ((SEQ_IN_INDEX = 1 AND COLUMN_NAME = 'deleted_at') + OR (SEQ_IN_INDEX = 2 AND COLUMN_NAME = 'tipo_media'))); +SET @sql = IF(@idx_exists > 0 AND @idx_order_ok <> 2, + 'ALTER TABLE libri DROP INDEX idx_libri_tipo_media_deleted_at', + 'SELECT 1'); +PREPARE stmt FROM @sql; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + SET @idx_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'libri' AND INDEX_NAME = 'idx_libri_tipo_media_deleted_at'); SET @sql = IF(@idx_exists = 0, - 'ALTER TABLE libri ADD INDEX idx_libri_tipo_media_deleted_at (tipo_media, deleted_at)', + 'ALTER TABLE libri ADD INDEX idx_libri_tipo_media_deleted_at (deleted_at, tipo_media)', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; diff --git a/installer/database/schema.sql b/installer/database/schema.sql index fa54dc8a..a47e21f6 100755 --- a/installer/database/schema.sql +++ b/installer/database/schema.sql @@ -418,7 +418,7 @@ CREATE TABLE `libri` ( KEY `idx_libri_titolo_sottotitolo` (`titolo`,`sottotitolo`), KEY `editore_id` (`editore_id`), KEY `idx_libri_stato` (`stato`), - KEY `idx_libri_tipo_media_deleted_at` (`tipo_media`,`deleted_at`), + KEY `idx_libri_tipo_media_deleted_at` (`deleted_at`,`tipo_media`), KEY `fk_libri_mensola` (`mensola_id`), KEY `idx_libri_scaffale_mensola` (`scaffale_id`,`mensola_id`), KEY `idx_libri_posizione_progressiva` (`posizione_progressiva`), diff --git a/storage/plugins/discogs/DiscogsPlugin.php b/storage/plugins/discogs/DiscogsPlugin.php index 8ce08ed2..6525e039 100644 --- a/storage/plugins/discogs/DiscogsPlugin.php +++ b/storage/plugins/discogs/DiscogsPlugin.php @@ -109,31 +109,53 @@ private function registerHooks(): void ['scrape.data.modify', 'enrichWithDiscogsData', 15], ]; - // Delete existing hooks for this plugin - $this->deleteHooks(); - - foreach ($hooks as [$hookName, $method, $priority]) { - $stmt = $this->db->prepare( - "INSERT INTO plugin_hooks (plugin_id, hook_name, callback_class, callback_method, priority, is_active, created_at) - VALUES (?, ?, ?, ?, ?, 1, NOW())" - ); + $stmt = null; + try { + $this->db->begin_transaction(); - if ($stmt === false) { - \App\Support\SecureLogger::error("[Discogs] Failed to prepare statement: " . $this->db->error); - continue; + $deleteStmt = $this->db->prepare("DELETE FROM plugin_hooks WHERE plugin_id = ?"); + if ($deleteStmt === false) { + throw new \RuntimeException('[Discogs] Failed to prepare hook cleanup: ' . $this->db->error); + } + $deleteStmt->bind_param('i', $this->pluginId); + if (!$deleteStmt->execute()) { + throw new \RuntimeException('[Discogs] Failed to delete existing hooks: ' . $deleteStmt->error); } + $deleteStmt->close(); - $callbackClass = 'DiscogsPlugin'; - $stmt->bind_param('isssi', $this->pluginId, $hookName, $callbackClass, $method, $priority); + foreach ($hooks as [$hookName, $method, $priority]) { + $stmt = $this->db->prepare( + "INSERT INTO plugin_hooks (plugin_id, hook_name, callback_class, callback_method, priority, is_active, created_at) + VALUES (?, ?, ?, ?, ?, 1, NOW())" + ); - if (!$stmt->execute()) { - \App\Support\SecureLogger::error("[Discogs] Failed to register hook {$hookName}: " . $stmt->error); + if ($stmt === false) { + throw new \RuntimeException('[Discogs] Failed to prepare statement: ' . $this->db->error); + } + + $callbackClass = 'DiscogsPlugin'; + $stmt->bind_param('isssi', $this->pluginId, $hookName, $callbackClass, $method, $priority); + + if (!$stmt->execute()) { + throw new \RuntimeException("[Discogs] Failed to register hook {$hookName}: " . $stmt->error); + } + + $stmt->close(); + $stmt = null; } - $stmt->close(); + $this->db->commit(); + \App\Support\SecureLogger::debug('[Discogs] Hooks registered'); + } catch (\Throwable $e) { + if ($stmt instanceof \mysqli_stmt) { + $stmt->close(); + } + try { + $this->db->rollback(); + } catch (\Throwable) { + } + \App\Support\SecureLogger::error($e->getMessage()); } - - \App\Support\SecureLogger::debug('[Discogs] Hooks registered'); } /** @@ -233,13 +255,13 @@ public function fetchFromDiscogs($currentResult, array $sources, string $isbn): $searchResult = $this->apiRequest($searchUrl, $token); if (empty($searchResult['results'][0])) { - $discogsFallback = $this->searchDiscogsByTitleArtist($currentResult, $token, $isbn); + $discogsFallback = $this->searchDiscogsByTitleArtist($currentResult, $token); if ($discogsFallback !== null) { return $this->mergeBookData($currentResult, $discogsFallback); } // Discogs found nothing — try MusicBrainz as fallback - $mbResult = $this->searchMusicBrainz($isbn, $token); + $mbResult = $this->searchMusicBrainz($isbn, $token, null); if ($mbResult !== null) { return $this->mergeBookData($currentResult, $mbResult); } @@ -260,7 +282,7 @@ public function fetchFromDiscogs($currentResult, array $sources, string $isbn): } } - private function searchDiscogsByTitleArtist($currentResult, ?string $token, string $isbn): ?array + private function searchDiscogsByTitleArtist($currentResult, ?string $token): ?array { if (!is_array($currentResult)) { return null; @@ -302,10 +324,10 @@ private function searchDiscogsByTitleArtist($currentResult, ?string $token, stri return null; } - return $this->fetchDiscogsReleaseFromSearchResult($searchResult['results'][0], $token, $isbn); + return $this->fetchDiscogsReleaseFromSearchResult($searchResult['results'][0], $token, null); } - private function fetchDiscogsReleaseFromSearchResult(array $searchResult, ?string $token, string $isbn): ?array + private function fetchDiscogsReleaseFromSearchResult(array $searchResult, ?string $token, ?string $fallbackBarcode): ?array { $releaseId = $searchResult['id'] ?? null; if ($releaseId === null) { @@ -319,7 +341,7 @@ private function fetchDiscogsReleaseFromSearchResult(array $searchResult, ?strin return null; } - return $this->mapReleaseToPinakes($release, $searchResult, $isbn); + return $this->mapReleaseToPinakes($release, $searchResult, $fallbackBarcode); } /** @@ -379,10 +401,10 @@ public function enrichWithDiscogsData(array $data, string $isbn, array $source, * * @param array $release Full release data from /releases/{id} * @param array $searchResult Search result entry (has thumb/cover_image) - * @param string $isbn Original barcode/EAN used for search + * @param string|null $fallbackBarcode Original barcode/EAN used for a validated barcode search * @return array Pinakes-formatted data */ - private function mapReleaseToPinakes(array $release, array $searchResult, string $isbn): array + private function mapReleaseToPinakes(array $release, array $searchResult, ?string $fallbackBarcode): array { // Extract album title — Discogs format is "Artist - Album Title" $title = $this->extractAlbumTitle($release['title'] ?? ''); @@ -501,6 +523,8 @@ private function mapReleaseToPinakes(array $release, array $searchResult, string $physicalDesc = implode(', ', array_filter($parts)); } + $releaseBarcode = $fallbackBarcode ?? $this->extractBarcodeFromRelease($release, $searchResult); + return [ 'title' => $title, 'author' => $firstArtist, @@ -516,7 +540,7 @@ private function mapReleaseToPinakes(array $release, array $searchResult, string 'parole_chiave' => $keywords, 'isbn10' => null, 'isbn13' => null, - 'ean' => $isbn, + 'ean' => $releaseBarcode, 'country' => $release['country'] ?? null, 'tipo_media' => 'disco', 'source' => 'discogs', @@ -931,9 +955,10 @@ private function mergeBookData(?array $existing, ?array $new): ?array * * @param string $barcode EAN/UPC barcode * @param string|null $discogsToken Discogs token (unused, kept for signature consistency) + * @param string|null $fallbackBarcode Persist this barcode only when it was validated by the search path * @return array|null Pinakes-formatted data or null if not found */ - private function searchMusicBrainz(string $barcode, ?string $discogsToken): ?array + private function searchMusicBrainz(string $barcode, ?string $discogsToken, ?string $fallbackBarcode): ?array { // Search by barcode $url = 'https://musicbrainz.org/ws/2/release?query=barcode:' . urlencode($barcode) . '&fmt=json&limit=1'; @@ -959,18 +984,18 @@ private function searchMusicBrainz(string $barcode, ?string $discogsToken): ?arr // Get cover from Cover Art Archive $coverUrl = $this->fetchCoverArtArchive($mbid); - return $this->mapMusicBrainzToPinakes($detail, $barcode, $coverUrl); + return $this->mapMusicBrainzToPinakes($detail, $fallbackBarcode, $coverUrl); } /** * Map MusicBrainz release data to Pinakes book data format * * @param array $release Full release data from MusicBrainz - * @param string $barcode Original barcode used for search + * @param string|null $fallbackBarcode Original barcode used for search * @param string|null $coverUrl Cover URL from Cover Art Archive * @return array Pinakes-formatted data */ - private function mapMusicBrainzToPinakes(array $release, string $barcode, ?string $coverUrl): array + private function mapMusicBrainzToPinakes(array $release, ?string $fallbackBarcode, ?string $coverUrl): array { $title = trim($release['title'] ?? ''); @@ -1055,6 +1080,8 @@ private function mapMusicBrainzToPinakes(array $release, string $barcode, ?strin $trackCount = count($release['media'][0]['tracks']); } + $releaseBarcode = $fallbackBarcode ?? $this->extractBarcodeFromRelease($release); + return [ 'title' => $title, 'author' => $firstArtist, @@ -1070,7 +1097,7 @@ private function mapMusicBrainzToPinakes(array $release, string $barcode, ?strin 'parole_chiave' => '', 'isbn10' => null, 'isbn13' => null, - 'ean' => $barcode, + 'ean' => $releaseBarcode, 'country' => $release['country'] ?? null, 'tipo_media' => 'disco', 'source' => 'musicbrainz', @@ -1079,6 +1106,53 @@ private function mapMusicBrainzToPinakes(array $release, string $barcode, ?strin ]; } + private function extractBarcodeFromRelease(array $release, array $searchResult = []): ?string + { + $candidates = []; + + $this->appendBarcodeCandidates($candidates, $release['barcode'] ?? null); + $this->appendBarcodeCandidates($candidates, $searchResult['barcode'] ?? null); + foreach ($release['identifiers'] ?? [] as $identifier) { + if (!is_array($identifier)) { + continue; + } + $type = strtolower(trim((string) ($identifier['type'] ?? ''))); + if ($type !== '' && !str_contains($type, 'barcode')) { + continue; + } + $candidates[] = (string) ($identifier['value'] ?? ''); + } + + foreach ($candidates as $candidate) { + $normalized = preg_replace('/\D+/', '', $candidate) ?? ''; + if ($normalized !== '' && (strlen($normalized) === 12 || strlen($normalized) === 13)) { + return $normalized; + } + } + + return null; + } + + /** + * @param array $candidates + * @param mixed $value + */ + private function appendBarcodeCandidates(array &$candidates, $value): void + { + if (is_array($value)) { + foreach ($value as $nestedValue) { + $this->appendBarcodeCandidates($candidates, $nestedValue); + } + return; + } + + if ($value === null || $value === '') { + return; + } + + $candidates[] = (string) $value; + } + /** * Fetch cover art URL from the Cover Art Archive * diff --git a/tests/discogs-advanced.spec.js b/tests/discogs-advanced.spec.js index 665fb822..1d787afa 100644 --- a/tests/discogs-advanced.spec.js +++ b/tests/discogs-advanced.spec.js @@ -15,8 +15,8 @@ const DB_PASS = process.env.E2E_DB_PASS || ''; const DB_NAME = process.env.E2E_DB_NAME || ''; const DB_SOCKET = process.env.E2E_DB_SOCKET || ''; const RUN_ID = Date.now(); -const SEEDED_MUSIC_EAN = '1234567890123'; -const SEEDED_BOOK_ISBN = '9781234567897'; +const SEEDED_MUSIC_EAN = `2${String(RUN_ID).slice(-12)}`; +const SEEDED_BOOK_ISBN = `978${String(RUN_ID).slice(-10)}`; function dbQuery(sql) { const args = ['-u', DB_USER, `-p${DB_PASS}`, DB_NAME, '-N', '-B', '-e', sql]; diff --git a/tests/discogs-import.spec.js b/tests/discogs-import.spec.js index bfefa4f2..5a5acd6c 100644 --- a/tests/discogs-import.spec.js +++ b/tests/discogs-import.spec.js @@ -30,6 +30,7 @@ test.describe.serial('Discogs Import: full scraping flow', () => { let page; /** @type {import('@playwright/test').BrowserContext} */ let context; + let createdId = ''; test.beforeAll(async ({ browser }) => { test.skip( @@ -49,7 +50,11 @@ test.describe.serial('Discogs Import: full scraping flow', () => { test.afterAll(async () => { // Cleanup test data - try { dbExec("DELETE FROM libri WHERE (ean = '0720642442524' OR isbn13 = '0720642442524') AND deleted_at IS NULL"); } catch {} + try { + if (createdId !== '') { + dbExec(`DELETE FROM libri WHERE id = ${Number(createdId)} AND deleted_at IS NULL`); + } + } catch {} await context?.close(); }); @@ -138,30 +143,22 @@ test.describe.serial('Discogs Import: full scraping flow', () => { await page.waitForURL(/\/admin\/libri\/\d+/, { timeout: 15000 }); const finalUrl = page.url(); expect(/\/admin\/libri\/\d+/.test(finalUrl)).toBe(true); + const createdIdMatch = finalUrl.match(/\/admin\/libri\/(\d+)/); + expect(createdIdMatch, 'Could not resolve created record id from save redirect').not.toBeNull(); + createdId = createdIdMatch?.[1] ?? ''; }); test('5. Verify saved CD in database', async () => { + expect(createdId, 'Created record id not captured during save').not.toBe(''); const book = dbQuery( - `SELECT titolo, ean, formato FROM libri WHERE ean = '${TEST_BARCODE}' AND deleted_at IS NULL LIMIT 1` + `SELECT titolo, COALESCE(ean, ''), COALESCE(isbn13, ''), formato FROM libri WHERE id = ${Number(createdId)} AND deleted_at IS NULL LIMIT 1` ); - - if (book === '') { - // Try isbn13 - const bookByIsbn = dbQuery( - `SELECT titolo, isbn13, formato FROM libri WHERE isbn13 = '${TEST_BARCODE}' AND deleted_at IS NULL LIMIT 1` - ); - expect(bookByIsbn, 'CD not found in database after import/save flow').not.toBe(''); - expect(bookByIsbn.toLowerCase()).toContain('nevermind'); - return; - } - + expect(book, 'CD not found in database after import/save flow').not.toBe(''); expect(book.toLowerCase()).toContain('nevermind'); }); test('6. Verify music labels on saved CD detail page', async () => { - const bookId = dbQuery( - `SELECT id FROM libri WHERE (ean = '${TEST_BARCODE}' OR isbn13 = '${TEST_BARCODE}') AND deleted_at IS NULL LIMIT 1` - ); + const bookId = createdId; expect(bookId, 'CD not found for label check').not.toBe(''); await page.goto(`${BASE}/admin/libri/${bookId}`); From 63df3aa15d9b318de2304508b1a2695a054b1067 Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Tue, 31 Mar 2026 08:04:21 +0200 Subject: [PATCH 19/28] fix: 4 logic bugs from code review 1. LibriController: add tipo_media to store/update field defaults so form POST value flows through createBasic/updateBasic directly 2. CsvImportController: hasColumn guard on tipo_media in raw SQL prevents 'Unknown column' on pre-0.5.4 databases 3. LibraryThingImportController: same hasColumn guard on all 4 SQL blocks 4. DiscogsPlugin: Deezer enrichment gated to music sources only prevents attaching music album covers to books --- app/Controllers/CsvImportController.php | 138 ++++++++++-------- .../LibraryThingImportController.php | 69 +++++++-- app/Controllers/LibriController.php | 2 + storage/plugins/discogs/DiscogsPlugin.php | 15 +- 4 files changed, 149 insertions(+), 75 deletions(-) diff --git a/app/Controllers/CsvImportController.php b/app/Controllers/CsvImportController.php index 88afdf5d..89b221a9 100644 --- a/app/Controllers/CsvImportController.php +++ b/app/Controllers/CsvImportController.php @@ -17,6 +17,28 @@ class CsvImportController */ private const CHUNK_SIZE = 10; + /** @var bool|null Cached result of tipo_media column existence check */ + private ?bool $cachedHasTipoMedia = null; + + /** + * Check if tipo_media column exists (cached per controller instance). + */ + private function hasTipoMediaColumn(\mysqli $db): bool + { + if ($this->cachedHasTipoMedia === null) { + try { + $checkCol = $db->query("SHOW COLUMNS FROM libri LIKE 'tipo_media'"); + $this->cachedHasTipoMedia = $checkCol !== false && $checkCol->num_rows > 0; + if ($checkCol instanceof \mysqli_result) { + $checkCol->free(); + } + } catch (\Throwable $e) { + $this->cachedHasTipoMedia = false; + } + } + return $this->cachedHasTipoMedia; + } + /** * Write log message to import log file */ @@ -1228,6 +1250,9 @@ private function findExistingBook(\mysqli $db, array $data): ?int */ private function updateBook(\mysqli $db, int $bookId, array $data, ?int $editorId, ?int $genreId): void { + $hasTipoMedia = $this->hasTipoMediaColumn($db); + $tipoMediaSet = $hasTipoMedia ? ', tipo_media = COALESCE(?, tipo_media)' : ''; + $stmt = $db->prepare(" UPDATE libri SET isbn10 = ?, @@ -1241,8 +1266,7 @@ private function updateBook(\mysqli $db, int $bookId, array $data, ?int $editorI numero_pagine = ?, genere_id = ?, descrizione = ?, - formato = ?, - tipo_media = COALESCE(?, tipo_media), + formato = ?{$tipoMediaSet}, prezzo = ?, editore_id = ?, collana = ?, @@ -1266,7 +1290,6 @@ classificazione_dewey = ?, $pagine = !empty($data['numero_pagine']) ? (int) $data['numero_pagine'] : null; $descrizione = !empty($data['descrizione']) ? $data['descrizione'] : null; $formato = !empty($data['formato']) ? $data['formato'] : 'cartaceo'; - $tipoMedia = \App\Support\MediaLabels::normalizeTipoMedia($data['tipo_media'] ?? null); // null = keep existing (COALESCE in SQL) $prezzo = $data['prezzo'] ?? null; $collana = !empty($data['collana']) ? $data['collana'] : null; $numeroSerie = !empty($data['numero_serie']) ? $data['numero_serie'] : null; @@ -1275,31 +1298,30 @@ classificazione_dewey = ?, $paroleChiave = !empty($data['parole_chiave'] ?? null) ? $data['parole_chiave'] : null; $dewey = !empty($data['classificazione_dewey'] ?? null) ? $data['classificazione_dewey'] : null; - $stmt->bind_param( - 'sssssissiisssdissssssi', - $isbn10, - $isbn13, - $ean, - $titolo, - $sottotitolo, - $anno, - $lingua, - $edizione, - $pagine, - $genreId, - $descrizione, - $formato, - $tipoMedia, - $prezzo, - $editorId, - $collana, - $numeroSerie, - $traduttore, - $illustratore, - $paroleChiave, - $dewey, - $bookId - ); + $params = [ + $isbn10, $isbn13, $ean, $titolo, $sottotitolo, + $anno, $lingua, $edizione, $pagine, $genreId, + $descrizione, $formato, + ]; + if ($hasTipoMedia) { + $params[] = \App\Support\MediaLabels::normalizeTipoMedia($data['tipo_media'] ?? null); + } + $params = array_merge($params, [ + $prezzo, $editorId, $collana, $numeroSerie, + $traduttore, $illustratore, $paroleChiave, $dewey, $bookId, + ]); + + $types = ''; + foreach ($params as $p) { + if (is_int($p)) { + $types .= 'i'; + } elseif (is_float($p)) { + $types .= 'd'; + } else { + $types .= 's'; + } + } + $stmt->bind_param($types, ...$params); $stmt->execute(); $stmt->close(); @@ -1330,17 +1352,21 @@ private function upsertBook(\mysqli $db, array $data, ?int $editorId, ?int $genr */ private function insertBook(\mysqli $db, array $data, ?int $editorId, ?int $genreId): int { + $hasTipoMedia = $this->hasTipoMediaColumn($db); + $tipoMediaCol = $hasTipoMedia ? ', tipo_media' : ''; + $tipoMediaVal = $hasTipoMedia ? ', ?' : ''; + $stmt = $db->prepare(" INSERT INTO libri ( isbn10, isbn13, ean, titolo, sottotitolo, anno_pubblicazione, lingua, edizione, numero_pagine, genere_id, - descrizione, formato, tipo_media, prezzo, copie_totali, copie_disponibili, + descrizione, formato{$tipoMediaCol}, prezzo, copie_totali, copie_disponibili, editore_id, collana, numero_serie, traduttore, illustratore, parole_chiave, classificazione_dewey, stato, created_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, - ?, ?, ?, ?, ?, ?, + ?, ?{$tipoMediaVal}, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'disponibile', NOW() ) @@ -1357,7 +1383,6 @@ classificazione_dewey, stato, created_at $pagine = !empty($data['numero_pagine']) ? (int) $data['numero_pagine'] : null; $descrizione = !empty($data['descrizione']) ? $data['descrizione'] : null; $formato = !empty($data['formato']) ? $data['formato'] : 'cartaceo'; - $tipoMedia = \App\Support\MediaLabels::resolveTipoMedia($formato, $data['tipo_media'] ?? null); $prezzo = $data['prezzo'] ?? null; $copie = !empty($data['copie_totali']) ? (int) $data['copie_totali'] : 1; // Add bounds checking to prevent DoS attacks @@ -1373,32 +1398,31 @@ classificazione_dewey, stato, created_at $paroleChiave = !empty($data['parole_chiave'] ?? null) ? $data['parole_chiave'] : null; $dewey = !empty($data['classificazione_dewey'] ?? null) ? $data['classificazione_dewey'] : null; - $stmt->bind_param( - 'sssssissiisssdiiissssss', - $isbn10, - $isbn13, - $ean, - $titolo, - $sottotitolo, - $anno, - $lingua, - $edizione, - $pagine, - $genreId, - $descrizione, - $formato, - $tipoMedia, - $prezzo, - $copie, - $copie, - $editorId, - $collana, - $numeroSerie, - $traduttore, - $illustratore, - $paroleChiave, - $dewey - ); + $params = [ + $isbn10, $isbn13, $ean, $titolo, $sottotitolo, $anno, + $lingua, $edizione, $pagine, $genreId, + $descrizione, $formato, + ]; + if ($hasTipoMedia) { + $params[] = \App\Support\MediaLabels::resolveTipoMedia($formato, $data['tipo_media'] ?? null); + } + $params = array_merge($params, [ + $prezzo, $copie, $copie, + $editorId, $collana, $numeroSerie, $traduttore, $illustratore, $paroleChiave, + $dewey, + ]); + + $types = ''; + foreach ($params as $p) { + if (is_int($p)) { + $types .= 'i'; + } elseif (is_float($p)) { + $types .= 'd'; + } else { + $types .= 's'; + } + } + $stmt->bind_param($types, ...$params); $stmt->execute(); $bookId = $db->insert_id; diff --git a/app/Controllers/LibraryThingImportController.php b/app/Controllers/LibraryThingImportController.php index 98501426..792ef14d 100644 --- a/app/Controllers/LibraryThingImportController.php +++ b/app/Controllers/LibraryThingImportController.php @@ -35,6 +35,28 @@ class LibraryThingImportController /** @var bool|null Cached result of descrizione_plain column existence check */ private ?bool $cachedHasDescPlain = null; + /** @var bool|null Cached result of tipo_media column existence check */ + private ?bool $cachedHasTipoMedia = null; + + /** + * Check if tipo_media column exists (cached per controller instance). + */ + private function hasTipoMediaColumn(\mysqli $db): bool + { + if ($this->cachedHasTipoMedia === null) { + try { + $checkCol = $db->query("SHOW COLUMNS FROM libri LIKE 'tipo_media'"); + $this->cachedHasTipoMedia = $checkCol !== false && $checkCol->num_rows > 0; + if ($checkCol instanceof \mysqli_result) { + $checkCol->free(); + } + } catch (\Throwable $e) { + $this->cachedHasTipoMedia = false; + } + } + return $this->cachedHasTipoMedia; + } + /** * Check if descrizione_plain column exists (cached per controller instance). */ @@ -1280,13 +1302,17 @@ private function updateBook(\mysqli $db, int $bookId, array $data, ?int $editorI $hasDescPlain = $this->hasDescrizionePlainColumn($db); $descPlainSet = $hasDescPlain ? ', descrizione_plain = ?' : ''; + // Check if tipo_media column exists (cached per controller instance) + $hasTipoMedia = $this->hasTipoMediaColumn($db); + $tipoMediaSet = $hasTipoMedia ? ', tipo_media = COALESCE(?, tipo_media)' : ''; + if ($hasLTFields) { // Full update with all LibraryThing fields $stmt = $db->prepare(" UPDATE libri SET isbn10 = ?, isbn13 = ?, ean = ?, titolo = ?, sottotitolo = ?, anno_pubblicazione = ?, lingua = ?, edizione = ?, numero_pagine = ?, - genere_id = ?, descrizione = ?{$descPlainSet}, formato = ?, tipo_media = COALESCE(?, tipo_media), prezzo = ?, editore_id = ?, + genere_id = ?, descrizione = ?{$descPlainSet}, formato = ?{$tipoMediaSet}, prezzo = ?, editore_id = ?, collana = ?, numero_serie = ?, traduttore = ?, parole_chiave = ?, classificazione_dewey = ?, peso = ?, dimensioni = ?, data_acquisizione = ?, review = ?, rating = ?, comment = ?, private_comment = ?, @@ -1319,9 +1345,11 @@ classificazione_dewey = ?, peso = ?, dimensioni = ?, data_acquisizione = ?, if ($hasDescPlain) { $params[] = !empty($data['descrizione_plain']) ? $data['descrizione_plain'] : null; } + $params[] = !empty($data['formato']) ? $data['formato'] : 'cartaceo'; + if ($hasTipoMedia) { + $params[] = \App\Support\MediaLabels::normalizeTipoMedia($data['tipo_media'] ?? null); + } $params = array_merge($params, [ - !empty($data['formato']) ? $data['formato'] : 'cartaceo', - \App\Support\MediaLabels::normalizeTipoMedia($data['tipo_media'] ?? null), !empty($data['prezzo']) ? (float) str_replace(',', '.', $data['prezzo']) : null, $editorId, !empty($data['collana']) ? $data['collana'] : null, @@ -1368,7 +1396,7 @@ classificazione_dewey = ?, peso = ?, dimensioni = ?, data_acquisizione = ?, UPDATE libri SET isbn10 = ?, isbn13 = ?, ean = ?, titolo = ?, sottotitolo = ?, anno_pubblicazione = ?, lingua = ?, edizione = ?, numero_pagine = ?, - genere_id = ?, descrizione = ?{$descPlainSet}, formato = ?, tipo_media = COALESCE(?, tipo_media), prezzo = ?, editore_id = ?, + genere_id = ?, descrizione = ?{$descPlainSet}, formato = ?{$tipoMediaSet}, prezzo = ?, editore_id = ?, collana = ?, numero_serie = ?, traduttore = ?, parole_chiave = ?, classificazione_dewey = ?, updated_at = NOW() WHERE id = ? AND deleted_at IS NULL @@ -1392,9 +1420,11 @@ classificazione_dewey = ?, updated_at = NOW() if ($hasDescPlain) { $params[] = !empty($data['descrizione_plain']) ? $data['descrizione_plain'] : null; } + $params[] = !empty($data['formato']) ? $data['formato'] : 'cartaceo'; + if ($hasTipoMedia) { + $params[] = \App\Support\MediaLabels::normalizeTipoMedia($data['tipo_media'] ?? null); + } $params = array_merge($params, [ - !empty($data['formato']) ? $data['formato'] : 'cartaceo', - \App\Support\MediaLabels::normalizeTipoMedia($data['tipo_media'] ?? null), !empty($data['prezzo']) ? (float) str_replace(',', '.', $data['prezzo']) : null, $editorId, !empty($data['collana']) ? $data['collana'] : null, @@ -1440,6 +1470,11 @@ private function insertBook(\mysqli $db, array $data, ?int $editorId, ?int $genr $descPlainCol = $hasDescPlain ? ', descrizione_plain' : ''; $descPlainVal = $hasDescPlain ? ', ?' : ''; + // Check if tipo_media column exists (cached per controller instance) + $hasTipoMedia = $this->hasTipoMediaColumn($db); + $tipoMediaCol = $hasTipoMedia ? ', tipo_media' : ''; + $tipoMediaVal = $hasTipoMedia ? ', ?' : ''; + $copie = !empty($data['copie_totali']) ? (int) $data['copie_totali'] : 1; if ($copie < 1) { $copie = 1; @@ -1452,7 +1487,7 @@ private function insertBook(\mysqli $db, array $data, ?int $editorId, ?int $genr $stmt = $db->prepare(" INSERT INTO libri ( isbn10, isbn13, ean, titolo, sottotitolo, anno_pubblicazione, - lingua, edizione, numero_pagine, genere_id, descrizione{$descPlainCol}, formato, tipo_media, + lingua, edizione, numero_pagine, genere_id, descrizione{$descPlainCol}, formato{$tipoMediaCol}, prezzo, copie_totali, copie_disponibili, editore_id, collana, numero_serie, traduttore, parole_chiave, classificazione_dewey, peso, dimensioni, data_acquisizione, @@ -1466,7 +1501,7 @@ private function insertBook(\mysqli $db, array $data, ?int $editorId, ?int $genr value, condition_lt, entry_date, stato, created_at ) VALUES ( - ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?{$descPlainVal}, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, + ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?{$descPlainVal}, ?{$tipoMediaVal}, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, @@ -1498,9 +1533,12 @@ private function insertBook(\mysqli $db, array $data, ?int $editorId, ?int $genr if ($hasDescPlain) { $params[] = !empty($data['descrizione_plain']) ? $data['descrizione_plain'] : null; } + $formato = !empty($data['formato']) ? $data['formato'] : 'cartaceo'; + $params[] = $formato; + if ($hasTipoMedia) { + $params[] = \App\Support\MediaLabels::resolveTipoMedia($data['formato'] ?? null, $data['tipo_media'] ?? null); + } $params = array_merge($params, [ - !empty($data['formato']) ? $data['formato'] : 'cartaceo', - \App\Support\MediaLabels::resolveTipoMedia($data['formato'] ?? null, $data['tipo_media'] ?? null), !empty($data['prezzo']) ? (float) str_replace(',', '.', $data['prezzo']) : null, $copie, $copie, @@ -1547,12 +1585,12 @@ private function insertBook(\mysqli $db, array $data, ?int $editorId, ?int $genr $stmt = $db->prepare(" INSERT INTO libri ( isbn10, isbn13, ean, titolo, sottotitolo, anno_pubblicazione, - lingua, edizione, numero_pagine, genere_id, descrizione{$descPlainCol}, formato, tipo_media, + lingua, edizione, numero_pagine, genere_id, descrizione{$descPlainCol}, formato{$tipoMediaCol}, prezzo, copie_totali, copie_disponibili, editore_id, collana, numero_serie, traduttore, parole_chiave, classificazione_dewey, stato, created_at ) VALUES ( - ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?{$descPlainVal}, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'disponibile', NOW() + ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?{$descPlainVal}, ?{$tipoMediaVal}, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'disponibile', NOW() ) "); @@ -1574,9 +1612,12 @@ private function insertBook(\mysqli $db, array $data, ?int $editorId, ?int $genr if ($hasDescPlain) { $params[] = !empty($data['descrizione_plain']) ? $data['descrizione_plain'] : null; } + $formato = !empty($data['formato']) ? $data['formato'] : 'cartaceo'; + $params[] = $formato; + if ($hasTipoMedia) { + $params[] = \App\Support\MediaLabels::resolveTipoMedia($data['formato'] ?? null, $data['tipo_media'] ?? null); + } $params = array_merge($params, [ - !empty($data['formato']) ? $data['formato'] : 'cartaceo', - \App\Support\MediaLabels::resolveTipoMedia($data['formato'] ?? null, $data['tipo_media'] ?? null), !empty($data['prezzo']) ? (float) str_replace(',', '.', $data['prezzo']) : null, $copie, $copie, diff --git a/app/Controllers/LibriController.php b/app/Controllers/LibriController.php index 925ce41c..e7b1cdb7 100644 --- a/app/Controllers/LibriController.php +++ b/app/Controllers/LibriController.php @@ -676,6 +676,7 @@ public function store(Request $request, Response $response, mysqli $db): Respons 'illustratore' => '', 'curatore' => '', 'numero_pagine' => null, + 'tipo_media' => '', ]; // Merge LibraryThing fields defaults only if plugin installed @@ -1216,6 +1217,7 @@ public function update(Request $request, Response $response, mysqli $db, int $id 'illustratore' => '', 'curatore' => '', 'numero_pagine' => null, + 'tipo_media' => '', ]; // Merge LibraryThing fields defaults only if plugin installed diff --git a/storage/plugins/discogs/DiscogsPlugin.php b/storage/plugins/discogs/DiscogsPlugin.php index 6525e039..c0cde10d 100644 --- a/storage/plugins/discogs/DiscogsPlugin.php +++ b/storage/plugins/discogs/DiscogsPlugin.php @@ -360,11 +360,18 @@ public function enrichWithDiscogsData(array $data, string $isbn, array $source, return $data; } + // Only enrich from Deezer for music sources (avoid attaching music covers to books) + $resolvedType = \App\Support\MediaLabels::inferTipoMedia($data['format'] ?? $data['formato'] ?? ''); + $isMusicSource = ($data['tipo_media'] ?? '') === 'disco' + || $resolvedType === 'disco' + || ($data['source'] ?? '') === 'discogs' + || ($data['source'] ?? '') === 'musicbrainz'; + // Try to fetch cover from Discogs using discogs_id (regardless of source) $discogsId = $data['discogs_id'] ?? null; if ($discogsId === null) { - // No discogs_id — skip to Deezer enrichment below - if ((empty($data['image']) || empty($data['genres'])) && !empty($data['title'])) { + // No discogs_id — skip to Deezer enrichment below (only for music) + if ($isMusicSource && (empty($data['image']) || empty($data['genres'])) && !empty($data['title'])) { $data = $this->enrichFromDeezer($data); } return $data; @@ -386,8 +393,8 @@ public function enrichWithDiscogsData(array $data, string $isbn, array $source, \App\Support\SecureLogger::warning('[Discogs] Cover enrichment error: ' . $e->getMessage()); } - // If still missing cover or genre, try Deezer enrichment - if ((empty($data['image']) || empty($data['genres'])) && !empty($data['title'])) { + // If still missing cover or genre, try Deezer enrichment (only for music) + if ($isMusicSource && (empty($data['image']) || empty($data['genres'])) && !empty($data['title'])) { $data = $this->enrichFromDeezer($data); } From ff03d069bdac30a6dd8250ff991a34e63027c6f3 Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Tue, 31 Mar 2026 08:06:06 +0200 Subject: [PATCH 20/28] chore: bump version to 0.5.4 (matches migration filename) --- version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.json b/version.json index a552f390..c1ce972d 100644 --- a/version.json +++ b/version.json @@ -1,5 +1,5 @@ { "name": "Pinakes", - "version": "0.5.3", + "version": "0.5.4", "description": "Library Management System - Sistema di Gestione Bibliotecaria" } From 610c29c0c26cef9ca1e79c505854113f3a77947a Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Tue, 31 Mar 2026 12:07:09 +0200 Subject: [PATCH 21/28] =?UTF-8?q?fix:=20CodeRabbit=20round=206=20=E2=80=94?= =?UTF-8?q?=20logic=20hardening?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - inferTipoMedia: check audiobook BEFORE music tokens (prevents "Audiobook CD" → disco misclassification) - updateOptionals: non-empty string check instead of array_key_exists (prevents '' from downgrading disco→libro) - DiscogsPlugin: rethrow on hook registration failure - DiscogsPlugin: null guard on title fallback (no title = skip) - PluginController: is_callable guard for getSettingsViewPath - Updater: log rename failure in plugin recovery path - Migration: REGEXP for whole-word music/musik → disco --- app/Controllers/PluginController.php | 4 ++++ app/Models/BookRepository.php | 10 +++++----- app/Support/MediaLabels.php | 14 +++++--------- app/Support/Updater.php | 8 +++++++- installer/database/migrations/migrate_0.5.4.sql | 4 +++- storage/plugins/discogs/DiscogsPlugin.php | 12 +++++++++--- 6 files changed, 33 insertions(+), 19 deletions(-) diff --git a/app/Controllers/PluginController.php b/app/Controllers/PluginController.php index 43a28b66..e6ca921f 100644 --- a/app/Controllers/PluginController.php +++ b/app/Controllers/PluginController.php @@ -231,6 +231,10 @@ public function settingsPage(Request $request, Response $response, array $args): return $response->withStatus(404); } + if (!is_callable([$pluginInstance, 'getSettingsViewPath'])) { + return $response->withStatus(404); + } + $settingsViewPath = $pluginInstance->getSettingsViewPath(); if (!is_string($settingsViewPath) || !is_file($settingsViewPath)) { return $response->withStatus(404); diff --git a/app/Models/BookRepository.php b/app/Models/BookRepository.php index e5383c8c..39d0bf09 100644 --- a/app/Models/BookRepository.php +++ b/app/Models/BookRepository.php @@ -1058,14 +1058,14 @@ public function updateOptionals(int $bookId, array $data): void $cols['illustratore'] = \App\Support\AuthorNormalizer::normalize((string) $data['scraped_illustrator']); } if ($this->hasColumn('tipo_media') && !array_key_exists('tipo_media', $cols)) { - $hasMediaSignal = array_key_exists('formato', $data) - || array_key_exists('scraped_formato', $data) - || array_key_exists('scraped_tipo_media', $data); + $formato = trim((string) ($data['formato'] ?? ($data['scraped_formato'] ?? ''))); + $scrapedTipoMedia = trim((string) ($data['scraped_tipo_media'] ?? '')); + $hasMediaSignal = $formato !== '' || $scrapedTipoMedia !== ''; if ($hasMediaSignal) { $val = \App\Support\MediaLabels::resolveTipoMedia( - $data['formato'] ?? ($data['scraped_formato'] ?? null), - $data['scraped_tipo_media'] ?? null + $formato !== '' ? $formato : null, + $scrapedTipoMedia !== '' ? $scrapedTipoMedia : null ); $normalized = $this->normalizeEnumValue((string) $val, 'tipo_media', 'libro'); if ($normalized !== '') { diff --git a/app/Support/MediaLabels.php b/app/Support/MediaLabels.php index 1bb39bda..1a232e0e 100644 --- a/app/Support/MediaLabels.php +++ b/app/Support/MediaLabels.php @@ -10,11 +10,6 @@ */ class MediaLabels { - /** Exact music format tokens (no substring matching to avoid 'audiolibro' false positive) */ - private const MUSIC_FORMATS = [ - 'cd_audio', 'vinile', 'cassetta', 'vinyl', 'lp', 'cd', 'cassette', 'audiocassetta', - ]; - /** * Build normalized lookup candidates for format/media values. * @@ -240,16 +235,17 @@ public static function inferTipoMedia(?string $formato): string } foreach (self::normalizedCandidates($formato) as $candidate) { + // Check audiobook BEFORE music tokens to prevent "Audiobook CD" matching as disco + if (str_contains($candidate, 'audiolibro') || str_contains($candidate, 'audiobook')) { + return 'audiolibro'; + } + foreach (['cdaudio', 'compactdisc', 'vinile', 'vinyl', 'lp', 'cd', 'cassetta', 'cassette', 'audiocassetta'] as $musicToken) { if (str_contains($candidate, $musicToken)) { return 'disco'; } } - if (str_contains($candidate, 'audiolibro') || str_contains($candidate, 'audiobook')) { - return 'audiolibro'; - } - if (str_contains($candidate, 'dvd') || str_contains($candidate, 'bluray') || str_contains($candidate, 'blu_ray')) { return 'dvd'; } diff --git a/app/Support/Updater.php b/app/Support/Updater.php index 2965cea1..6145a132 100644 --- a/app/Support/Updater.php +++ b/app/Support/Updater.php @@ -2266,7 +2266,13 @@ private function updateBundledPlugins(string $sourcePath): void $this->removeDirectoryTree($stagingPath); } if (is_dir($backupPath) && !is_dir($targetPluginPath)) { - rename($backupPath, $targetPluginPath); + if (!rename($backupPath, $targetPluginPath)) { + $this->debugLog('ERROR', 'Impossibile ripristinare il plugin dal backup', [ + 'plugin' => $pluginSlug, + 'backup' => $backupPath, + 'target' => $targetPluginPath, + ]); + } } throw $e; } diff --git a/installer/database/migrations/migrate_0.5.4.sql b/installer/database/migrations/migrate_0.5.4.sql index f2b21ddb..96923506 100644 --- a/installer/database/migrations/migrate_0.5.4.sql +++ b/installer/database/migrations/migrate_0.5.4.sql @@ -70,7 +70,9 @@ WHERE tipo_media = 'libro' OR LOWER(formato) LIKE '%vinyl%' OR LOWER(formato) LIKE '%vinile%' OR LOWER(formato) LIKE '%lp%' OR LOWER(formato) LIKE '%cassett%' OR LOWER(formato) LIKE '%audio cassetta%' OR LOWER(formato) LIKE '%audio-cassetta%' - OR LOWER(formato) LIKE '%audiocassetta%') + OR LOWER(formato) LIKE '%audiocassetta%' + OR LOWER(formato) REGEXP '[[:<:]]music[[:>:]]' + OR LOWER(formato) REGEXP '[[:<:]]musik[[:>:]]') AND LOWER(formato) NOT LIKE '%audiolibro%' AND LOWER(formato) NOT LIKE '%audiobook%'; UPDATE libri SET tipo_media = 'audiolibro' diff --git a/storage/plugins/discogs/DiscogsPlugin.php b/storage/plugins/discogs/DiscogsPlugin.php index c0cde10d..6ecd4b2c 100644 --- a/storage/plugins/discogs/DiscogsPlugin.php +++ b/storage/plugins/discogs/DiscogsPlugin.php @@ -155,6 +155,7 @@ private function registerHooks(): void } catch (\Throwable) { } \App\Support\SecureLogger::error($e->getMessage()); + throw $e; } } @@ -255,9 +256,14 @@ public function fetchFromDiscogs($currentResult, array $sources, string $isbn): $searchResult = $this->apiRequest($searchUrl, $token); if (empty($searchResult['results'][0])) { - $discogsFallback = $this->searchDiscogsByTitleArtist($currentResult, $token); - if ($discogsFallback !== null) { - return $this->mergeBookData($currentResult, $discogsFallback); + // Title/artist fallback only works when a previous scraper already + // provided partial data (title + artist). When $currentResult is + // null (first scraper in the chain), there is nothing to search for. + if ($currentResult !== null && is_array($currentResult) && !empty($currentResult['title'])) { + $discogsFallback = $this->searchDiscogsByTitleArtist($currentResult, $token); + if ($discogsFallback !== null) { + return $this->mergeBookData($currentResult, $discogsFallback); + } } // Discogs found nothing — try MusicBrainz as fallback From a12f4d4d6db75672ca67d8cdc02713cb497538de Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Tue, 31 Mar 2026 13:07:51 +0200 Subject: [PATCH 22/28] =?UTF-8?q?fix:=20CodeRabbit=20round=207=20=E2=80=94?= =?UTF-8?q?=203=20quick=20fixes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - MusicBrainz fallback: pass $isbn (validated barcode) instead of null - PluginController index: redact Discogs api_token before template - CSV export: don't fabricate 'libro' for empty tipo_media --- app/Controllers/LibriController.php | 2 +- app/Controllers/PluginController.php | 6 ++++++ storage/plugins/discogs/DiscogsPlugin.php | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/Controllers/LibriController.php b/app/Controllers/LibriController.php index e7b1cdb7..a6927aca 100644 --- a/app/Controllers/LibriController.php +++ b/app/Controllers/LibriController.php @@ -3038,7 +3038,7 @@ public function exportCsv(Request $request, Response $response, mysqli $db): Res $libro['numero_pagine'] ?? '', $libro['genere_nome'] ?? '', $libro['formato'] ?? '', - $libro['tipo_media'] ?? 'libro', + $libro['tipo_media'] ?? '', $libro['prezzo'] ?? '', $libro['copie_totali'] ?? '1', $libro['collana'] ?? '', diff --git a/app/Controllers/PluginController.php b/app/Controllers/PluginController.php index e6ca921f..e173ce33 100644 --- a/app/Controllers/PluginController.php +++ b/app/Controllers/PluginController.php @@ -53,6 +53,12 @@ public function index(Request $request, Response $response): Response $settings['api_key'] = $settings['api_key_exists'] ? '••••••••' : ''; } + // Redact Discogs token — never expose to template + if ($plugin['name'] === 'discogs' && array_key_exists('api_token', $settings)) { + $settings['api_token_exists'] = $settings['api_token'] !== ''; + $settings['api_token'] = ''; + } + $pluginSettings[$plugin['id']] = $settings; } diff --git a/storage/plugins/discogs/DiscogsPlugin.php b/storage/plugins/discogs/DiscogsPlugin.php index 6ecd4b2c..1d707c3e 100644 --- a/storage/plugins/discogs/DiscogsPlugin.php +++ b/storage/plugins/discogs/DiscogsPlugin.php @@ -267,7 +267,7 @@ public function fetchFromDiscogs($currentResult, array $sources, string $isbn): } // Discogs found nothing — try MusicBrainz as fallback - $mbResult = $this->searchMusicBrainz($isbn, $token, null); + $mbResult = $this->searchMusicBrainz($isbn, $token, $isbn); if ($mbResult !== null) { return $this->mergeBookData($currentResult, $mbResult); } From 6dfd7e58e870913e0bf3467b385f3587c16af9f9 Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Tue, 31 Mar 2026 13:20:06 +0200 Subject: [PATCH 23/28] test: add 10 reusable PR #100 feature tests + fix PHPStan level 5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tests: 1. tipo_media ENUM column exists with all values 2. Book form has tipo_media dropdown 3. Admin list has media type icon column 4. API filters by tipo_media=disco 5. CD shows music-specific labels 6. Book shows standard labels 7. Edit CD preserves tipo_media=disco 8. CSV export includes tipo_media 9. Format display name (cd_audio → CD Audio) 10. Discogs plugin registered as bundled PHPStan level 5 fixes: - instantiatePlugin() returns object (not ?object) - Remove redundant is_object() and null checks --- app/Support/PluginManager.php | 7 +- tests/pr100-media-types.spec.js | 239 ++++++++++++++++++++++++++ vendor/composer/autoload_classmap.php | 2 + vendor/composer/autoload_static.php | 2 + vendor/composer/installed.php | 4 +- 5 files changed, 247 insertions(+), 7 deletions(-) create mode 100644 tests/pr100-media-types.spec.js diff --git a/app/Support/PluginManager.php b/app/Support/PluginManager.php index 9af75b25..0f1d1786 100644 --- a/app/Support/PluginManager.php +++ b/app/Support/PluginManager.php @@ -1183,15 +1183,12 @@ public function loadActivePlugins(): void private function loadPlugin(array $plugin): void { $instance = $this->instantiatePlugin($plugin); - if ($instance === null) { - throw new \Exception("Plugin instance could not be created for {$plugin['name']}"); - } // Load and register hooks for this plugin $this->registerPluginHooks((int) $plugin['id'], $instance); } - private function instantiatePlugin(array $plugin): ?object + private function instantiatePlugin(array $plugin): object { // Save plugin data to prefixed variables before require_once // This prevents plugin files from overwriting $plugin variable (which some do) @@ -1223,7 +1220,7 @@ private function instantiatePlugin(array $plugin): ?object } } - return is_object($instance) ? $instance : null; + return $instance; } /** diff --git a/tests/pr100-media-types.spec.js b/tests/pr100-media-types.spec.js new file mode 100644 index 00000000..ad3c2b12 --- /dev/null +++ b/tests/pr100-media-types.spec.js @@ -0,0 +1,239 @@ +// @ts-check +/** + * PR #100 Feature Tests: Media Types, Discogs Plugin, Dynamic Labels + * 10 reusable tests covering the tipo_media system end-to-end. + * Requires: app installed, admin user, tipo_media column in DB. + */ +const { test, expect } = require('@playwright/test'); +const { execFileSync } = require('child_process'); + +const BASE = process.env.E2E_BASE_URL || 'http://localhost:8081'; +const ADMIN_EMAIL = process.env.E2E_ADMIN_EMAIL || ''; +const ADMIN_PASS = process.env.E2E_ADMIN_PASS || ''; +const DB_USER = process.env.E2E_DB_USER || ''; +const DB_PASS = process.env.E2E_DB_PASS || ''; +const DB_NAME = process.env.E2E_DB_NAME || ''; +const DB_SOCKET = process.env.E2E_DB_SOCKET || ''; +const RUN_ID = Date.now(); + +function dbQuery(sql) { + const args = ['-u', DB_USER, `-p${DB_PASS}`, DB_NAME, '-N', '-B', '-e', sql]; + if (DB_SOCKET) args.splice(3, 0, '-S', DB_SOCKET); + return execFileSync('mysql', args, { encoding: 'utf-8', timeout: 10000 }).trim(); +} + +function dbExec(sql) { + const args = ['-u', DB_USER, `-p${DB_PASS}`, DB_NAME, '-e', sql]; + if (DB_SOCKET) args.splice(3, 0, '-S', DB_SOCKET); + execFileSync('mysql', args, { encoding: 'utf-8', timeout: 10000 }); +} + +test.describe.serial('PR #100: Media Types System', () => { + /** @type {import('@playwright/test').Page} */ + let page; + /** @type {import('@playwright/test').BrowserContext} */ + let context; + let cdId = '', bookId = '', audiobookId = '', dvdId = ''; + + test.beforeAll(async ({ browser }) => { + test.skip(!ADMIN_EMAIL || !ADMIN_PASS || !DB_USER || !DB_PASS || !DB_NAME, 'Missing env vars'); + context = await browser.newContext(); + page = await context.newPage(); + + // Login + await page.goto(`${BASE}/accedi`); + await page.fill('input[name="email"]', ADMIN_EMAIL); + await page.fill('input[name="password"]', ADMIN_PASS); + await page.click('button[type="submit"]'); + await page.waitForURL(/\/admin\//, { timeout: 15000 }); + + // Seed 4 media types + dbExec( + "INSERT INTO libri (titolo, formato, tipo_media, ean, copie_totali, copie_disponibili, created_at, updated_at) " + + "VALUES ('PR100_CD_" + RUN_ID + "', 'cd_audio', 'disco', '9990000000001', 1, 1, NOW(), NOW())" + ); + dbExec( + "INSERT INTO libri (titolo, formato, tipo_media, isbn13, copie_totali, copie_disponibili, created_at, updated_at) " + + "VALUES ('PR100_Book_" + RUN_ID + "', 'cartaceo', 'libro', '9789990000002', 1, 1, NOW(), NOW())" + ); + dbExec( + "INSERT INTO libri (titolo, formato, tipo_media, copie_totali, copie_disponibili, created_at, updated_at) " + + "VALUES ('PR100_Audiobook_" + RUN_ID + "', 'audiolibro', 'audiolibro', 1, 1, NOW(), NOW())" + ); + dbExec( + "INSERT INTO libri (titolo, formato, tipo_media, copie_totali, copie_disponibili, created_at, updated_at) " + + "VALUES ('PR100_DVD_" + RUN_ID + "', 'dvd', 'dvd', 1, 1, NOW(), NOW())" + ); + + cdId = dbQuery("SELECT id FROM libri WHERE titolo = 'PR100_CD_" + RUN_ID + "' LIMIT 1"); + bookId = dbQuery("SELECT id FROM libri WHERE titolo = 'PR100_Book_" + RUN_ID + "' LIMIT 1"); + audiobookId = dbQuery("SELECT id FROM libri WHERE titolo = 'PR100_Audiobook_" + RUN_ID + "' LIMIT 1"); + dvdId = dbQuery("SELECT id FROM libri WHERE titolo = 'PR100_DVD_" + RUN_ID + "' LIMIT 1"); + }); + + test.afterAll(async () => { + try { dbExec("DELETE FROM libri WHERE (titolo LIKE 'PR100_%_" + RUN_ID + "' OR ean = '9990000000001' OR isbn13 = '9789990000002') AND deleted_at IS NULL"); } catch {} + await context?.close(); + }); + + // ═══════════════════════════════════════════════════════ + // 1. tipo_media column exists in DB + // ═══════════════════════════════════════════════════════ + test('1. tipo_media column exists with correct ENUM values', async () => { + const colType = dbQuery("SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='libri' AND COLUMN_NAME='tipo_media'"); + expect(colType).toContain('libro'); + expect(colType).toContain('disco'); + expect(colType).toContain('audiolibro'); + expect(colType).toContain('dvd'); + expect(colType).toContain('altro'); + }); + + // ═══════════════════════════════════════════════════════ + // 2. Admin book form has tipo_media dropdown + // ═══════════════════════════════════════════════════════ + test('2. Book form has tipo_media dropdown with all options', async () => { + await page.goto(`${BASE}/admin/libri/crea`); + await page.waitForLoadState('domcontentloaded'); + + const select = page.locator('#tipo_media'); + await expect(select).toBeVisible(); + + const options = await select.locator('option').allTextContents(); + expect(options.length).toBeGreaterThanOrEqual(5); + }); + + // ═══════════════════════════════════════════════════════ + // 3. Admin list shows tipo_media icon column + // ═══════════════════════════════════════════════════════ + test('3. Admin list has media type icon column', async () => { + await page.goto(`${BASE}/admin/libri`); + await page.waitForLoadState('domcontentloaded'); + await page.waitForTimeout(2000); + + const content = await page.content(); + // Should have the icon column header + expect(content).toContain('fa-compact-disc'); + }); + + // ═══════════════════════════════════════════════════════ + // 4. Admin list filters by tipo_media + // ═══════════════════════════════════════════════════════ + test('4. API filters by tipo_media=disco', async () => { + const resp = await page.request.get(`${BASE}/api/libri?tipo_media=disco&start=0&length=100&search_text=PR100`); + expect(resp.status()).toBe(200); + const data = await resp.json(); + const records = data.data || []; + + // Should find CD but not book/audiobook/dvd + const titles = records.map((r) => r.titolo || '').join(' '); + expect(titles).toContain('PR100_CD_'); + expect(titles).not.toContain('PR100_Book_'); + }); + + // ═══════════════════════════════════════════════════════ + // 5. CD shows music labels (Etichetta, Anno di Uscita) + // ═══════════════════════════════════════════════════════ + test('5. CD admin detail shows music-specific labels', async () => { + await page.goto(`${BASE}/admin/libri/${cdId}`); + await page.waitForLoadState('domcontentloaded'); + const content = await page.content(); + + const hasEtichetta = content.includes('Etichetta') || content.includes('Label'); + const hasAnnoUscita = content.includes('Anno di Uscita') || content.includes('Release Year'); + expect(hasEtichetta || hasAnnoUscita).toBe(true); + expect(content).toContain('fa-compact-disc'); + }); + + // ═══════════════════════════════════════════════════════ + // 6. Book shows standard labels (Editore, Anno Pubblicazione) + // ═══════════════════════════════════════════════════════ + test('6. Book admin detail shows standard labels', async () => { + await page.goto(`${BASE}/admin/libri/${bookId}`); + await page.waitForLoadState('domcontentloaded'); + const content = await page.content(); + + const hasEditore = content.includes('Editore') || content.includes('Publisher'); + expect(hasEditore).toBe(true); + expect(content).toContain('fa-book'); + }); + + // ═══════════════════════════════════════════════════════ + // 7. Edit CD — tipo_media persists as 'disco' + // ═══════════════════════════════════════════════════════ + test('7. Edit CD preserves tipo_media=disco', async () => { + await page.goto(`${BASE}/admin/libri/modifica/${cdId}`); + await page.waitForLoadState('domcontentloaded'); + + const select = page.locator('#tipo_media'); + if (await select.isVisible({ timeout: 3000 }).catch(() => false)) { + expect(await select.inputValue()).toBe('disco'); + + // Change title, save + await page.locator('input[name="titolo"]').fill('PR100_CD_' + RUN_ID + '_edited'); + await page.locator('button[type="submit"]').first().click(); + const swal = page.locator('.swal2-confirm'); + if (await swal.isVisible({ timeout: 3000 }).catch(() => false)) await swal.click(); + await page.waitForURL(/\/admin\/libri\/\d+/, { timeout: 15000 }).catch(() => {}); + + // Verify DB + const tipo = dbQuery(`SELECT tipo_media FROM libri WHERE id = ${cdId}`); + expect(tipo).toBe('disco'); + + // Restore title + dbExec("UPDATE libri SET titolo = 'PR100_CD_" + RUN_ID + "' WHERE id = " + cdId); + } + }); + + // ═══════════════════════════════════════════════════════ + // 8. CSV export includes tipo_media column + // ═══════════════════════════════════════════════════════ + test('8. CSV export includes tipo_media', async () => { + const resp = await page.request.get(`${BASE}/admin/libri/export/csv?ids=${cdId},${bookId}`); + expect(resp.status()).toBe(200); + const body = await resp.text(); + const header = body.split('\n')[0].replace(/^\uFEFF/, ''); + + expect(header).toContain('tipo_media'); + + const fields = header.split(';'); + const idx = fields.indexOf('tipo_media'); + expect(idx).toBeGreaterThan(-1); + + // Data rows + const lines = body.split('\n').filter(l => l.trim()); + if (lines.length > 1) { + const row1 = lines[1].split(';'); + // One should be disco, one empty/libro + const tipos = lines.slice(1).map(l => l.split(';')[idx]); + expect(tipos.some(t => t === 'disco')).toBe(true); + } + }); + + // ═══════════════════════════════════════════════════════ + // 9. Format display name: "cd_audio" → "CD Audio" + // ═══════════════════════════════════════════════════════ + test('9. Format shows human-readable name, not raw key', async () => { + await page.goto(`${BASE}/admin/libri/${cdId}`); + await page.waitForLoadState('domcontentloaded'); + const content = await page.content(); + + // Should NOT show raw "cd_audio" + // Should show "CD Audio" (or translated equivalent) + const hasRaw = content.includes('>cd_audio<'); + const hasFormatted = content.includes('CD Audio') || content.includes('Audio CD') || content.includes('Audio-CD'); + expect(hasRaw).toBe(false); + expect(hasFormatted).toBe(true); + }); + + // ═══════════════════════════════════════════════════════ + // 10. Discogs plugin is bundled and registered + // ═══════════════════════════════════════════════════════ + test('10. Discogs plugin registered as bundled', async () => { + const exists = dbQuery("SELECT COUNT(*) FROM plugins WHERE name = 'discogs'"); + expect(parseInt(exists)).toBeGreaterThan(0); + + // Plugin display name should be updated + const displayName = dbQuery("SELECT display_name FROM plugins WHERE name = 'discogs' LIMIT 1"); + expect(displayName.toLowerCase()).toContain('music'); + }); +}); diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index cde03fac..a529c0e5 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -89,6 +89,7 @@ 'App\\Support\\AuthorizationHelper' => $baseDir . '/app/Support/AuthorizationHelper.php', 'App\\Support\\BookDataMerger' => $baseDir . '/app/Support/BookDataMerger.php', 'App\\Support\\Branding' => $baseDir . '/app/Support/Branding.php', + 'App\\Support\\BundledPlugins' => $baseDir . '/app/Support/BundledPlugins.php', 'App\\Support\\CmsHelper' => $baseDir . '/app/Support/CmsHelper.php', 'App\\Support\\ConfigStore' => $baseDir . '/app/Support/ConfigStore.php', 'App\\Support\\ContentSanitizer' => $baseDir . '/app/Support/ContentSanitizer.php', @@ -113,6 +114,7 @@ 'App\\Support\\Log' => $baseDir . '/app/Support/Log.php', 'App\\Support\\Mailer' => $baseDir . '/app/Support/Mailer.php', 'App\\Support\\MaintenanceService' => $baseDir . '/app/Support/MaintenanceService.php', + 'App\\Support\\MediaLabels' => $baseDir . '/app/Support/MediaLabels.php', 'App\\Support\\MergeHelper' => $baseDir . '/app/Support/MergeHelper.php', 'App\\Support\\NotificationService' => $baseDir . '/app/Support/NotificationService.php', 'App\\Support\\PluginManager' => $baseDir . '/app/Support/PluginManager.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 7ca1db85..cf6abf84 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -264,6 +264,7 @@ class ComposerStaticInite58358eec498b7b6927cfe671382554c 'App\\Support\\AuthorizationHelper' => __DIR__ . '/../..' . '/app/Support/AuthorizationHelper.php', 'App\\Support\\BookDataMerger' => __DIR__ . '/../..' . '/app/Support/BookDataMerger.php', 'App\\Support\\Branding' => __DIR__ . '/../..' . '/app/Support/Branding.php', + 'App\\Support\\BundledPlugins' => __DIR__ . '/../..' . '/app/Support/BundledPlugins.php', 'App\\Support\\CmsHelper' => __DIR__ . '/../..' . '/app/Support/CmsHelper.php', 'App\\Support\\ConfigStore' => __DIR__ . '/../..' . '/app/Support/ConfigStore.php', 'App\\Support\\ContentSanitizer' => __DIR__ . '/../..' . '/app/Support/ContentSanitizer.php', @@ -288,6 +289,7 @@ class ComposerStaticInite58358eec498b7b6927cfe671382554c 'App\\Support\\Log' => __DIR__ . '/../..' . '/app/Support/Log.php', 'App\\Support\\Mailer' => __DIR__ . '/../..' . '/app/Support/Mailer.php', 'App\\Support\\MaintenanceService' => __DIR__ . '/../..' . '/app/Support/MaintenanceService.php', + 'App\\Support\\MediaLabels' => __DIR__ . '/../..' . '/app/Support/MediaLabels.php', 'App\\Support\\MergeHelper' => __DIR__ . '/../..' . '/app/Support/MergeHelper.php', 'App\\Support\\NotificationService' => __DIR__ . '/../..' . '/app/Support/NotificationService.php', 'App\\Support\\PluginManager' => __DIR__ . '/../..' . '/app/Support/PluginManager.php', diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 6e60c67b..988c2fde 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -3,7 +3,7 @@ 'name' => 'pinakes/slim-app', 'pretty_version' => 'dev-main', 'version' => 'dev-main', - 'reference' => '3e18155a994a148e24be8633ce7a4f6f0ab35abd', + 'reference' => 'a12f4d4d6db75672ca67d8cdc02713cb497538de', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -112,7 +112,7 @@ 'pinakes/slim-app' => array( 'pretty_version' => 'dev-main', 'version' => 'dev-main', - 'reference' => '3e18155a994a148e24be8633ce7a4f6f0ab35abd', + 'reference' => 'a12f4d4d6db75672ca67d8cdc02713cb497538de', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), From 328a9cb14f2fb12e13ab019252e8b5f08ea35609 Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Tue, 31 Mar 2026 15:15:44 +0200 Subject: [PATCH 24/28] =?UTF-8?q?fix:=20bulk=20cover=20download=20message?= =?UTF-8?q?=20=E2=80=94=20'senza=20ISBN/barcode'=20instead=20of=20'libro?= =?UTF-8?q?=20senza=20ISBN'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Views/libri/index.php | 2 +- locale/de_DE.json | 8389 +++++++++++++++++++------------------ locale/en_US.json | 8389 +++++++++++++++++++------------------ locale/it_IT.json | 297 +- 4 files changed, 8540 insertions(+), 8537 deletions(-) diff --git a/app/Views/libri/index.php b/app/Views/libri/index.php index a8a0edcf..4a33405f 100644 --- a/app/Views/libri/index.php +++ b/app/Views/libri/index.php @@ -1113,7 +1113,7 @@ function updateBulkActionsBar() { let message = ''; if (fetched > 0) message += `${} ${fetched}\n`; if (alreadyHasCover > 0) message += `${} ${alreadyHasCover}\n`; - if (noIsbn > 0) message += `${} ${noIsbn}\n`; + if (noIsbn > 0) message += `${} ${noIsbn}\n`; if (notFound > 0) message += `${} ${notFound}\n`; if (errors > 0) message += `${} ${errors}`; diff --git a/locale/de_DE.json b/locale/de_DE.json index 0b270c91..f286cdb1 100644 --- a/locale/de_DE.json +++ b/locale/de_DE.json @@ -1,4196 +1,4197 @@ { - "\"%s\" prestato a %s è in ritardo di %d giorni": "\"%s\" ausgeliehen an %s ist %d Tage überfällig", - "$1": "$1", - "$2": "$2", - "%d Indici Mancanti": "%d fehlende Indizes", - "%d Problemi": "%d Probleme", - "%d Tabelle Mancanti": "%d fehlende Tabellen", - "%d autori eliminati": "%d Autoren gelöscht", - "%d copie disponibili su %d": "%d Exemplare von %d verfügbar", - "%d editori eliminati": "%d Verlage gelöscht", - "%d file sensibili protetti": "%d sensible Dateien geschützt", - "%d giorni": "%d Tage", - "%d import logs eliminati (più vecchi di %d giorni)": "%d Importprotokolle gelöscht (älter als %d Tage)", - "%d import registrati": "%d Importe aufgezeichnet", - "%d import registrato": "%d Import aufgezeichnet", - "%d indici creati con successo": "%d Indizes erfolgreich erstellt", - "%d indici mancanti trovati": "%d fehlende Indizes gefunden", - "%d libri eliminati": "%d Bücher gelöscht", - "%d minuti fa": "vor %d Minuten", - "%d minuto fa": "vor %d Minute", - "%d notifica non letta": "%d ungelesene Benachrichtigung", - "%d notifiche non lette": "%d ungelesene Benachrichtigungen", - "%d ora fa": "vor %d Stunde", - "%d ore fa": "vor %d Stunden", - "%d prenotazione attiva": "%d aktive Vormerkung", - "%d prenotazioni attive": "%d aktive Vormerkungen", - "%d prestiti attivi": "%d aktive Ausleihen", - "%d prestiti in ritardo": "%d überfällige Ausleihen", - "%d prestiti passati": "%d vergangene Ausleihen", - "%d prestito attivo": "%d aktive Ausleihe", - "%d prestito in ritardo": "%d überfällige Ausleihe", - "%d prestito passato": "%d vergangene Ausleihe", - "%d problemi rilevati": "%d Probleme erkannt", - "%d recensione": "%d Rezension", - "%d recensioni": "%d Rezensionen", - "%d richiesta in sospeso": "%d ausstehende Anfrage", - "%d richieste in sospeso": "%d ausstehende Anfragen", - "%d tabelle create con successo": "%d Tabellen erfolgreich erstellt", - "%d titoli": "%d Titel", - "%s ha prenotato \"%s\"": "%s hat \"%s\" vorgemerkt", - "%s non è valido": "%s ist ungültig", - "%s è richiesto": "%s ist erforderlich", - "%s è richiesta": "%s ist erforderlich", - "%s deve essere di almeno 8 caratteri": "%s muss mindestens 8 Zeichen lang sein", - "%s non può superare i 72 caratteri": "%s darf nicht länger als 72 Zeichen sein", - "(codici ISO e nomi inglesi accettati)": "(ISO-Codes und englische Namen akzeptiert)", - "(filtrati da _MAX_ libri totali)": "(gefiltert von insgesamt _MAX_ Büchern)", - "(opzionale - URL completo)": "(optional – vollständige URL)", - "(opzionale - max 160 caratteri)": "(optional – max. 160 Zeichen)", - "(opzionale - max 200 caratteri)": "(optional - max. 200 Zeichen)", - "(opzionale - max 60 caratteri)": "(optional – max. 60 Zeichen)", - "(opzionale - max 70 caratteri)": "(optional - max. 70 Zeichen)", - "(opzionale - separate da virgola)": "(optional – kommagetrennt)", - "(opzionale)": "(optional)", - "(percorso legacy)": "(Legacy-Pfad)", - "+ 15 campi aggiuntivi disponibili (vedi CSV di esempio)": "+ 15 zusätzliche Felder verfügbar (siehe Beispiel-CSV)", - "+ Aggiungi da preset...": "+ Aus Vorlage hinzufügen...", - "+39 02 1234567": "+49 30 1234567", - "+39 123 456 7890": "+49 123 456 7890", - ", %d errori": ", %d Fehler", - ", %d libri arricchiti con scraping": ", %d Bücher per Scraping angereichert", - "-- Seleziona --": "-- Auswählen --", - "-- Seleziona un template --": "-- Vorlage auswählen --", - "... e altri %d errori": "... und %d weitere Fehler", - ".env caricato OK": ".env erfolgreich geladen", - "/* Inserisci il tuo codice CSS qui */\n/* Esempio: */\n/* body { font-size: 16px; } */": "/* Geben Sie hier Ihren CSS-Code ein */\n/* Beispiel: */\n/* body { font-size: 16px; } */", - "// Script analytics (es. Google Analytics)\n// Esempio Google Analytics 4:\n// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n// ga('create', 'UA-XXXXX-Y', 'auto');\n// ga('send', 'pageview');": "// Analytics-Skripte (z. B. Google Analytics)\n// Google Analytics 4 Beispiel:\n// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n// ga('create', 'UA-XXXXX-Y', 'auto');\n// ga('send', 'pageview');", - "// Script essenziali (es. chat, accessibility)\n// Esempio:\n// console.log('Essential JS loaded');": "// Essentielle Skripte (z. B. Chat, Barrierefreiheit)\n// Beispiel:\n// console.log('Essential JS loaded');", - "// Script marketing (es. Facebook Pixel)\n// Esempio Facebook Pixel:\n// !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n// n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n// n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n// t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n// document,'script','https://connect.facebook.net/en_US/fbevents.js');\n// fbq('init', 'YOUR_PIXEL_ID');\n// fbq('track', 'PageView');": "// Marketing-Skripte (z. B. Facebook Pixel)\n// Facebook Pixel Beispiel:\n// !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n// n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n// n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n// t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n// document,'script','https://connect.facebook.net/en_US/fbevents.js');\n// fbq('init', 'YOUR_PIXEL_ID');\n// fbq('track', 'PageView');", - "/catalogo": "/catalog", - "0-10 libri": "0–10 Bücher", - "1 copia disponibile su %d": "1 Exemplar von %d verfügbar", - "1 evento": "1 Veranstaltung", - "1. Accesso al server": "1. Serverzugang", - "1. Collegati al server via SSH:": "1. Verbinden Sie sich per SSH mit dem Server:", - "101-500 libri": "101–500 Bücher", - "11-50 libri": "11–50 Bücher", - "2. Aggiungi una delle configurazioni seguenti:": "2. Fügen Sie eine der folgenden Konfigurationen hinzu:", - "2. Vai nella directory dell'applicazione:": "2. Wechseln Sie in das Anwendungsverzeichnis:", - "3. Installa le dipendenze con Composer:": "3. Installieren Sie die Abhängigkeiten mit Composer:", - "4. Verifica che le dipendenze siano state installate:": "4. Überprüfen Sie, ob die Abhängigkeiten installiert wurden:", - "51-100 libri": "51–100 Bücher", - ": attiva per ordinare la colonna in ordine crescente": ": aktivieren, um die Spalte aufsteigend zu sortieren", - ": attiva per ordinare la colonna in ordine decrescente": ": aktivieren, um die Spalte absteigend zu sortieren", - "A": "A", - "AA Testo Grande": "AA Großer Text", - "API": "API", - "API Key": "API-Schlüssel", - "API Key già configurata": "API-Schlüssel bereits konfiguriert", - "API Keys": "API-Schlüssel", - "API Pubblica": "Öffentliche API", - "API abilitata con successo.": "API erfolgreich aktiviert.", - "API configurata": "API konfiguriert", - "API disabilitata con successo.": "API erfolgreich deaktiviert.", - "API key creata con successo.": "API-Schlüssel erfolgreich erstellt.", - "API key eliminata con successo.": "API-Schlüssel erfolgreich gelöscht.", - "APP_CANONICAL_URL configurato con valore non valido: '%s'. Link nelle email potrebbero non funzionare. Valore suggerito: %s": "APP_CANONICAL_URL mit ungültigem Wert konfiguriert: '%s'. E-Mail-Links funktionieren möglicherweise nicht. Empfohlener Wert: %s", - "APP_CANONICAL_URL configurato ma vuoto nel file .env. Link nelle email useranno fallback a HTTP_HOST. Valore suggerito: %s": "APP_CANONICAL_URL konfiguriert, aber leer in der .env-Datei. E-Mail-Links verwenden HTTP_HOST als Fallback. Empfohlener Wert: %s", - "APP_CANONICAL_URL non configurato nel file .env. Link nelle email potrebbero non funzionare correttamente. Valore suggerito: %s": "APP_CANONICAL_URL nicht in der .env-Datei konfiguriert. Links in E-Mails funktionieren möglicherweise nicht korrekt. Empfohlener Wert: %s", - "ATTENZIONE: Disinstallazione Irreversibile": "ACHTUNG: Unwiderrufliche Deinstallation", - "AVVISO Trigger:": "Trigger-WARNUNG:", - "Abilita": "Aktivieren", - "Abilita Client SRU": "SRU-Client aktivieren", - "Abilita Cookie Banner": "Cookie-Banner aktivieren", - "Abilita HSTS": "HSTS aktivieren", - "Abilita Modalità Catalogo": "Katalogmodus aktivieren", - "Abilita Modalità Solo Catalogo": "Reinen Katalogmodus aktivieren", - "Abilita Plugin": "Plugin aktivieren", - "Abilita Server SRU": "SRU-Server aktivieren", - "Abilita o disabilita l'accesso all'API pubblica": "Öffentlichen API-Zugang aktivieren oder deaktivieren", - "Abilitata": "Aktiviert", - "Abilitata - Visibile nel frontend": "Aktiviert – Im Frontend sichtbar", - "Abilitato": "Aktiviert", - "Accedi": "Anmelden", - "Accedi a /installer/?force=1 per forzare una reinstallazione": "Rufen Sie /installer/?force=1 auf, um eine Neuinstallation zu erzwingen", - "Accedi al server tramite SSH e modifica il crontab:": "Greifen Sie per SSH auf den Server zu und bearbeiten Sie den Crontab:", - "Accedi al tuo account": "Melden Sie sich bei Ihrem Konto an", - "Accedi all'area admin con le credenziali sopra indicate": "Melden Sie sich mit den oben angegebenen Zugangsdaten im Adminbereich an", - "Accedi e Procedi": "Anmelden und fortfahren", - "Accedi per Prenotare": "Anmelden zum Vormerken", - "Accedi per aggiungere ai Preferiti": "Melden Sie sich an, um zu den Favoriten hinzuzufügen", - "Accento": "Akzent", - "Accesso": "Anmeldung", - "Accesso Richiesto": "Anmeldung erforderlich", - "Accesso in corso...": "Anmeldung läuft...", - "Accesso negato. Permessi insufficienti.": "Zugriff verweigert. Unzureichende Berechtigungen.", - "Accesso non autorizzato": "Unbefugter Zugriff", - "Accetta selezionati": "Ausgewählte akzeptieren", - "Accetta tutti": "Alle akzeptieren", - "Accetto la": "Ich akzeptiere die", - "Account": "Konto", - "Account In Attesa": "Konto ausstehend", - "Account Sospeso": "Konto gesperrt", - "Account attivato": "Konto aktiviert", - "Account creato con successo! Verifica la tua email.": "Konto erfolgreich erstellt! Überprüfen Sie Ihre E-Mail.", - "Account creato! In attesa di approvazione da parte dell'amministratore.": "Konto erstellt! Warten auf Genehmigung durch den Administrator.", - "Acquisito a": "Erworben um", - "Acquisito da": "Erworben von", - "Acquisto": "Kauf", - "Adesso": "Gerade eben", - "Admin": "Admin", - "Admin Dewey": "Dewey-Verwaltung", - "Aggiorna": "Aktualisieren", - "Aggiorna Dati": "Daten aktualisieren", - "Aggiorna Evento": "Veranstaltung aktualisieren", - "Aggiorna Ora": "Jetzt aktualisieren", - "Aggiorna Statistiche": "Statistiken aktualisieren", - "Aggiorna da ISBN": "Von ISBN aktualisieren", - "Aggiorna i dettagli del libro:": "Buchdetails aktualisieren:", - "Aggiorna i dettagli dell'autore: %s": "Autorendetails aktualisieren: %s", - "Aggiorna i dettagli dell'editore:": "Verlagsdetails aktualisieren:", - "Aggiorna il conteggio delle copie disponibili": "Anzahl der verfügbaren Exemplare aktualisieren", - "Aggiorna le informazioni del profilo selezionato.": "Ausgewählte Profilinformationen aktualisieren.", - "Aggiorna password": "Passwort aktualisieren", - "Aggiornamenti": "Aktualisierungen", - "Aggiornamento alla versione %s completato": "Aktualisierung auf Version %s abgeschlossen", - "Aggiornamento completato con successo": "Aktualisierung erfolgreich abgeschlossen", - "Aggiornamento completato!": "Aktualisierung abgeschlossen!", - "Aggiornamento disponibile!": "Aktualisierung verfügbar!", - "Aggiornamento fallito": "Aktualisierung fehlgeschlagen", - "Aggiornamento già in corso": "Aktualisierung läuft bereits", - "Aggiornamento in corso. Riprova tra qualche minuto.": "Aktualisierung läuft. Bitte versuchen Sie es in einigen Minuten erneut.", - "Aggiornamento in corso...": "Aktualisierung läuft...", - "Aggiornamento...": "Aktualisierung...", - "Aggiornata in base a scaffale, mensola e posizione.": "Aktualisiert basierend auf Regal, Regalboden und Position.", - "Aggiornate %d righe": "%d Zeilen aktualisiert", - "Aggiornati": "Aktualisiert", - "Aggiungere una Nuova Lingua": "Eine neue Sprache hinzufügen", - "Aggiungi": "Hinzufügen", - "Aggiungi Genere Rapido": "Genre schnell hinzufügen", - "Aggiungi Lingua": "Sprache hinzufügen", - "Aggiungi Nuova Lingua": "Neue Sprache hinzufügen", - "Aggiungi Nuovo Autore": "Neuen Autor hinzufügen", - "Aggiungi Nuovo Editore": "Neuen Verlag hinzufügen", - "Aggiungi Nuovo Libro": "Neues Buch hinzufügen", - "Aggiungi Prima Lingua": "Erste Sprache hinzufügen", - "Aggiungi Sottogenere": "Untergenre hinzufügen", - "Aggiungi ai Preferiti": "Zu Favoriten hinzufügen", - "Aggiungi al file .env: APP_CANONICAL_URL=%s": "In der .env-Datei hinzufügen: APP_CANONICAL_URL=%s", - "Aggiungi alla collezione": "Zur Sammlung hinzufügen", - "Aggiungi decimale": "Dezimalstelle hinzufügen", - "Aggiungi eventuali note sul prestito": "Fügen Sie eventuelle Anmerkungen zur Ausleihe hinzu", - "Aggiungi eventuali note...": "Anmerkungen hinzufügen...", - "Aggiungi i libri che ti interessano dalla scheda di dettaglio per ricevere un promemoria quando tornano disponibili.": "Fügen Sie Bücher, die Sie interessieren, über die Detailseite hinzu, um eine Erinnerung zu erhalten, wenn sie wieder verfügbar sind.", - "Aggiungi la tua API key per interrogare Google Books quando importi un ISBN. Google viene utilizzato prima di Open Library, ma dopo Scraping Pro.": "Fügen Sie Ihren API-Schlüssel hinzu, um Google Books bei ISBN-Importen abzufragen. Google wird vor Open Library, aber nach Scraping Pro verwendet.", - "Aggiungi le mensole (livelli) a ogni scaffale": "Fügen Sie jedem Regal Regalböden (Ebenen) hinzu", - "Aggiungi nuovo libro": "Neues Buch hinzufügen", - "Aggiungi primo libro": "Erstes Buch hinzufügen", - "Aggiungi scaffali e mensole per la tua biblioteca": "Fügen Sie Regale und Regalböden für Ihre Bibliothek hinzu", - "Aggiungi un motivo (opzionale)": "Grund hinzufügen (optional)", - "Aggiungi un nuovo titolo per arricchire il catalogo di questo editore.": "Fügen Sie einen neuen Titel hinzu, um den Katalog dieses Verlags zu erweitern.", - "Aggiunti di recente al catalogo": "Kürzlich zum Katalog hinzugefügt", - "Aggiunto il": "Hinzugefügt am", - "Aiuto": "Hilfe", - "Al": "Bis", - "Al momento non ci sono eventi attivi. Continua a seguirci per restare aggiornato sui prossimi appuntamenti.": "Derzeit gibt es keine aktiven Veranstaltungen. Folgen Sie uns weiterhin, um über kommende Termine informiert zu bleiben.", - "Al momento non ci sono eventi programmati. Torna a visitare questa pagina per scoprire i prossimi appuntamenti.": "Derzeit sind keine Veranstaltungen geplant. Besuchen Sie diese Seite erneut, um kommende Termine zu entdecken.", - "Al:": "Bis:", - "Alcune date richieste non sono disponibili": "Einige angeforderte Termine sind nicht verfügbar", - "Alcuni mancanti": "Einige fehlen", - "Alcuni requisiti non sono soddisfatti. Risolvi i problemi prima di continuare.": "Einige Anforderungen sind nicht erfüllt. Beheben Sie die Probleme, bevor Sie fortfahren.", - "Alert prestito in ritardo (Admin)": "Überfällige Ausleihe – Warnung (Admin)", - "Allegato": "Anhang", - "Almeno uno dei seguenti parametri è richiesto:": "Mindestens einer der folgenden Parameter ist erforderlich:", - "Altri eventi in programma": "Weitere geplante Veranstaltungen", - "Altri filtri": "Weitere Filter", - "Altro": "Sonstiges", - "Amministratore": "Administrator", - "Analitici:": "Analyse:", - "Anni di Vita": "Lebensjahre", - "Anno": "Jahr", - "Anno (YYYY)": "Jahr (JJJJ)", - "Anno a": "Jahr bis", - "Anno da": "Jahr von", - "Anno di Pubblicazione": "Erscheinungsjahr", - "Anno di pubblicazione": "Erscheinungsjahr", - "Anno di Uscita": "Erscheinungsjahr", - "Anno max": "Jahr max.", - "Anno min": "Jahr min.", - "Anno numerico (usato per filtri e ordinamento)": "Numerisches Jahr (wird für Filter und Sortierung verwendet)", - "Anno pubblicazione": "Erscheinungsjahr", - "Anno pubblicazione a": "Erscheinungsjahr bis", - "Anno pubblicazione da": "Erscheinungsjahr von", - "Anno:": "Jahr:", - "Annulla": "Abbrechen", - "Annulla Prestito": "Ausleihe stornieren", - "Annulla Prestito Scaduto": "Überfällige Ausleihe stornieren", - "Annulla prenotazione": "Vormerkung stornieren", - "Annullare il prestito scaduto?": "Die überfällige Ausleihe stornieren?", - "Annullare questa prenotazione?": "Diese Vormerkung stornieren?", - "Annullata": "Storniert", - "Annullato": "Storniert", - "Anteprima": "Vorschau", - "Anteprima Banner": "Banner-Vorschau", - "Anteprima copertina": "Covervorschau", - "Anteprima immagine caricata": "Vorschau des hochgeladenen Bildes", - "Anteprima logo": "Logo-Vorschau", - "Anteprima non disponibile": "Vorschau nicht verfügbar", - "Anteprima:": "Vorschau:", - "Apparirà nei risultati di ricerca Google. Se vuoto, usa il titolo hero o il nome dell'app.": "Erscheint in den Google-Suchergebnissen. Wenn leer, wird der Hero-Titel oder der App-Name verwendet.", - "Apparirà sotto il titolo nei risultati di ricerca. Se vuoto, usa il sottotitolo hero o una descrizione generica.": "Erscheint unter dem Titel in den Suchergebnissen. Wenn leer, wird der Hero-Untertitel oder eine allgemeine Beschreibung verwendet.", - "Applica": "Anwenden", - "Applica Filtri": "Filter anwenden", - "Applica Fix": "Fix anwenden", - "Applicazione Già Installata": "Anwendung bereits installiert", - "Applicazione configurata:": "Anwendung konfiguriert:", - "Applicazione del fix...": "Fix wird angewendet...", - "Applicazione già installata": "Anwendung bereits installiert", - "Approva": "Genehmigen", - "Approva Prestiti": "Ausleihen genehmigen", - "Approva Prestito?": "Ausleihe genehmigen?", - "Approva e Invia Email Attivazione": "Genehmigen und Aktivierungs-E-Mail senden", - "Approva o rifiuta le recensioni degli utenti": "Benutzerrezensionen genehmigen oder ablehnen", - "Approva o rifiuta le richieste degli utenti": "Benutzeranfragen genehmigen oder ablehnen", - "Approva prestito?": "Ausleihe genehmigen?", - "Approva recensione": "Rezension genehmigen", - "Approvata": "Genehmigt", - "Approvata il": "Genehmigt am", - "Approvato": "Genehmigt", - "Approvato il %s": "Genehmigt am %s", - "Approvato!": "Genehmigt!", - "Approverai questa richiesta di prestito?": "Möchten Sie diese Ausleihanfrage genehmigen?", - "Apri": "Öffnen", - "Apri Editor": "Editor öffnen", - "Apri Google Cloud Console": "Google Cloud Console öffnen", - "Apri file": "Datei öffnen", - "Apri menu": "Menü öffnen", - "Archivia": "Archivieren", - "Archiviato": "Archiviert", - "Archivio": "Archiv", - "Arricchimento automatico dati": "Automatische Datenanreicherung", - "Arricchisci dati con scraping web (copertine, descrizioni, etc.)": "Daten mit Web-Scraping anreichern (Cover, Beschreibungen usw.)", - "Article (Articolo/Blog)": "Article (Artikel/Blog)", - "Articolo": "Artikel", - "Artista": "Künstler", - "Artista sconosciuto": "Unbekannter Künstler", - "Artisti": "Künstler", - "Ascolta Audiobook": "Hörbuch anhören", - "Ascolta l'audiobook": "Hörbuch anhören", - "Assicurati che corrisponda al tipo di carta per etichette che utilizzi.": "Stellen Sie sicher, dass es mit dem von Ihnen verwendeten Etikettenpapier übereinstimmt.", - "Assicurati che il path assoluto dello script sia corretto": "Stellen Sie sicher, dass der absolute Pfad zum Skript korrekt ist", - "Assicurati che sia configurato correttamente per evitare URL duplicati.": "Stellen Sie sicher, dass die Konfiguration korrekt ist, um doppelte URLs zu vermeiden.", - "At least one search parameter is required (ean, isbn13, isbn10, or author)": "At least one search parameter is required (ean, isbn13, isbn10, or author)", - "Attendere prego": "Bitte warten", - "Attendere prego...": "Bitte warten...", - "Attenzione": "Achtung", - "Attenzione!": "Achtung!", - "Attenzione:": "Achtung:", - "Attenzione: %d prestiti in ritardo": "Achtung: %d überfällige Ausleihen", - "Attenzione: %d prestito in ritardo": "Achtung: %d überfällige Ausleihe", - "Attenzione: Azione Manuale Richiesta": "Achtung: Manueller Eingriff erforderlich", - "Attenzione: Non è stato possibile rimuovere tutte le copie richieste. Alcune copie sono attualmente in prestito.": "Achtung: Es konnten nicht alle angeforderten Exemplare entfernt werden. Einige Exemplare sind derzeit ausgeliehen.", - "Attiva": "Aktiv", - "Attiva Direttamente": "Direkt aktivieren", - "Attiva HTTP Strict Transport Security (max-age: 1 anno, include sottodomini)": "HTTP Strict Transport Security aktivieren (max-age: 1 Jahr, einschließlich Subdomains)", - "Attiva HTTPS solo se hai un certificato SSL valido installato. Attivare HSTS rende permanente il reindirizzamento HTTPS nel browser.": "Aktivieren Sie HTTPS nur, wenn ein gültiges SSL-Zertifikat installiert ist. Die Aktivierung von HSTS macht die HTTPS-Weiterleitung im Browser dauerhaft.", - "Attiva questa opzione solo se il tuo server supporta HTTPS. Se il tuo hosting forza già HTTPS automaticamente, non è necessario abilitarla (potrebbe causare redirect loop).": "Aktivieren Sie diese Option nur, wenn Ihr Server HTTPS unterstützt. Falls Ihr Hosting bereits automatisch HTTPS erzwingt, müssen Sie sie nicht aktivieren (könnte eine Weiterleitungsschleife verursachen).", - "Attivando questa modalità verranno disabilitati completamente i prestiti, le prenotazioni e la wishlist. Gli utenti potranno solo consultare il catalogo.": "Durch Aktivierung dieses Modus werden Ausleihen, Vormerkungen und Wunschliste vollständig deaktiviert. Benutzer können nur den Katalog einsehen.", - "Attivare questo tema?": "Dieses Theme aktivieren?", - "Attivato:": "Aktiviert:", - "Attivi": "Aktiv", - "Attività": "Aktivität", - "Attivo": "Aktiv", - "Attivo:": "Aktiv:", - "Attuale": "Aktuell", - "Attualmente prestati": "Derzeit ausgeliehen", - "Audio": "Audio", - "Audio URL": "Audio-URL", - "Audiobook": "Hörbuch", - "Audiobook (MP3/M4A/OGG)": "Hörbuch (MP3/M4A/OGG)", - "Audiobook caricato!": "Hörbuch hochgeladen!", - "Audiobook disponibile": "Hörbuch verfügbar", - "Aumenta Copie": "Exemplare erhöhen", - "Autenticazione": "Authentifizierung", - "Autenticazione Admin Richiesta": "Admin-Authentifizierung erforderlich", - "Autenticazione Richiesta": "Authentifizierung erforderlich", - "Autenticazione richiesta.": "Authentifizierung erforderlich.", - "Auto": "Auto", - "Auto-attivazione:": "Auto-Aktivierung:", - "Auto-attivazione: Se compili questo campo, il toggle \"Mostra Cookie Analitici\" in Privacy verrà attivato automaticamente.": "Automatische Aktivierung: Wenn Sie dieses Feld ausfüllen, wird der Schalter \"Analyse-Cookies anzeigen\" unter Datenschutz automatisch aktiviert.", - "Auto-attivazione: Se compili questo campo, il toggle \"Mostra Cookie Marketing\" in Privacy verrà attivato automaticamente.": "Automatische Aktivierung: Wenn Sie dieses Feld ausfüllen, wird der Schalter \"Marketing-Cookies anzeigen\" unter Datenschutz automatisch aktiviert.", - "Auto-detect se vuoto": "Automatische Erkennung wenn leer", - "Automatismi": "Automatisierungen", - "Autore": "Autor", - "Autore \"${normalizedLabel}\" pronto per essere creato": "Autor \"${normalizedLabel}\" bereit zur Erstellung", - "Autore \"${normalizedLabel}\" è già selezionato": "Autor \"${normalizedLabel}\" ist bereits ausgewählt", - "Autore \"%s\" pronto per essere creato": "Autor \"%s\" bereit zur Erstellung", - "Autore \"%s\" è già selezionato": "Autor \"%s\" ist bereits ausgewählt", - "Autore A-Z": "Autor A–Z", - "Autore Z-A": "Autor Z–A", - "Autore eliminato con successo.": "Autor erfolgreich gelöscht.", - "Autore non specificato": "Autor nicht angegeben", - "Autore principale": "Hauptautor", - "Autore sconosciuto": "Unbekannter Autor", - "Autore/i:": "Autor(en):", - "Autore:": "Autor:", - "Autori": "Autoren", - "Autori con biografie": "Autoren mit Biografien", - "Autori ed editori vengono creati automaticamente": "Autoren und Verlage werden automatisch erstellt", - "Autori multipli separati da %s": "Mehrere Autoren getrennt durch %s", - "Autori multipli separati da %s o %s": "Mehrere Autoren getrennt durch %s oder %s", - "Autori pubblicati": "Veröffentlichte Autoren", - "Autori uniti": "Autoren zusammengeführt", - "Autori uniti con successo": "Autoren erfolgreich zusammengeführt", - "Autori:": "Autoren:", - "Avanti": "Weiter", - "Avanzate": "Erweitert", - "Avvio aggiornamento": "Aktualisierung wird gestartet", - "Avvio backup database": "Datenbank-Backup wird gestartet", - "Avvisa gli amministratori quando un prestito entra in ritardo.": "Warnt Administratoren, wenn eine Ausleihe überfällig wird.", - "Avvisi scadenza prestiti (configurabile in Impostazioni → Avanzate, default 3 giorni prima)": "Erinnerungen zum Ablauf der Ausleihe (konfigurierbar unter Einstellungen → Erweitert, Standard 3 Tage vorher)", - "Avviso": "Warnung", - "Azione richiesta:": "Erforderliche Aktion:", - "Azioni": "Aktionen", - "Azioni Rapide": "Schnellaktionen", - "Azioni Veloci": "Schnellaktionen", - "Azioni di Approvazione": "Genehmigungsaktionen", - "Azioni di Manutenzione": "Wartungsaktionen", - "Azzera": "Zurücksetzen", - "Backup": "Backup", - "Backup Automatico": "Automatisches Backup", - "Backup Salvati": "Gespeicherte Backups", - "Backup completato": "Backup abgeschlossen", - "Backup creato con successo": "Backup erfolgreich erstellt", - "Backup creato!": "Sicherung erstellt!", - "Backup database completato": "Datenbank-Backup abgeschlossen", - "Backup disponibili": "Verfügbare Backups", - "Backup e Sicurezza": "Backup und Sicherheit", - "Backup eliminato": "Backup gelöscht", - "Backup eliminato con successo": "Sicherung erfolgreich gelöscht", - "Backup fallito": "Backup fehlgeschlagen", - "Backup non trovato": "Backup nicht gefunden", - "Backup non trovato.": "Sicherung nicht gefunden.", - "Backup ripristinato con successo.": "Sicherung erfolgreich wiederhergestellt.", - "Backup tabella": "Tabelle wird gesichert", - "Barcode": "Barcode", - "Barra laterale": "Seitenleiste", - "Benvenuto": "Willkommen", - "Benvenuto nell'Installer": "Willkommen beim Installer", - "Benvenuto, %s!": "Willkommen, %s!", - "Biblioteca": "Bibliothek", - "Biblioteca Digitale": "Digitale Bibliothek", - "Biblioteca Digitale - La tua biblioteca online": "Digitale Bibliothek – Ihre Online-Bibliothek", - "Biblioteca Digitale - Scopri e Prenota i Tuoi Libri Preferiti": "Digitale Bibliothek – Entdecken und reservieren Sie Ihre Lieblingsbücher", - "Biblioteca digitale con catalogo completo di libri disponibili per il prestito": "Digitale Bibliothek mit vollständigem Katalog ausleihbarer Bücher", - "Biografia": "Biografie", - "Biografia dell'autore": "Autorenbiografie", - "Bluesky": "Bluesky", - "Books": "Books", - "Bottone": "Schaltfläche", - "Bottone CTA": "CTA-Schaltfläche", - "Bottone Primario": "Primäre Schaltfläche", - "Breadcrumb": "Breadcrumb", - "Breve descrizione per i motori di ricerca": "Kurzbeschreibung für Suchmaschinen", - "Breve descrizione per i motori di ricerca (max 160 caratteri)": "Kurzbeschreibung für Suchmaschinen (max. 160 Zeichen)", - "Buono": "Gut", - "CAP": "PLZ", - "CMS": "CMS", - "CSRF": "CSRF", - "CSRF Fallito": "CSRF fehlgeschlagen", - "CSRF non valido.": "Ungültiges CSRF-Token.", - "CSS Personalizzato": "Benutzerdefiniertes CSS", - "CSV": "CSV", - "Calendario Disponibilità": "Verfügbarkeitskalender", - "Calendario Prestiti e Prenotazioni": "Kalender für Ausleihen und Vormerkungen", - "Calendario eventi": "Veranstaltungskalender", - "Calendario non disponibile": "Kalender nicht verfügbar", - "Call to Action": "Call to Action", - "Call to Action (CTA)": "Call to Action (CTA)", - "Cambia lingua": "Sprache ändern", - "Cambia password": "Passwort ändern", - "Cambia vista": "Ansicht wechseln", - "Campi Database": "Datenbankfelder", - "Campi Supportati": "Unterstützte Felder", - "Campo": "Feld", - "Campo %s obbligatorio": "Feld %s ist erforderlich", - "Campo Obbligatorio": "Pflichtfeld", - "Campo obbligatorio": "Pflichtfeld", - "Campo obbligatorio mancante: %s": "Fehlendes Pflichtfeld: %s", - "Cancel": "Abbrechen", - "Cancella": "Löschen", - "Cancella filtri": "Filter löschen", - "Cancella tutti i filtri": "Alle Filter löschen", - "Caratteristica": "Eigenschaft", - "Carica": "Hochladen", - "Carica %{smart_count} file": "%{smart_count} Datei hochladen", - "Carica Altri": "Mehr laden", - "Carica File CSV": "CSV-Datei hochladen", - "Carica File JSON": "JSON-Datei hochladen", - "Carica File LibraryThing": "LibraryThing-Datei hochladen", - "Carica Nuovo File JSON": "Neue JSON-Datei hochladen", - "Carica Plugin": "Plugin hochladen", - "Carica il file JSON di traduzione (opzionale)": "Übersetzungs-JSON-Datei hochladen (optional)", - "Carica il file usando l'uploader": "Laden Sie die Datei mit dem Uploader hoch", - "Carica logo (PNG, JPG, SVG)": "Logo hochladen (PNG, JPG, SVG)", - "Carica o collega eBook (PDF/ePub) e audiobook (MP3/M4A) per renderli disponibili agli utenti.": "Laden Sie E-Books (PDF/ePub) und Hörbücher (MP3/M4A) hoch oder verknüpfen Sie diese, um sie den Benutzern zur Verfügung zu stellen.", - "Carica un file CSV per importare più libri contemporaneamente": "Laden Sie eine CSV-Datei hoch, um mehrere Bücher gleichzeitig zu importieren", - "Carica un file ZIP contenente il plugin. Il file deve includere un %s con le informazioni del plugin.": "Laden Sie eine ZIP-Datei mit dem Plugin hoch. Die Datei muss eine %s mit den Plugin-Informationen enthalten.", - "Carica un nuovo file per aggiornare le traduzioni (opzionale). Verrà creato un backup del file precedente.": "Laden Sie eine neue Datei hoch, um die Übersetzungen zu aktualisieren (optional). Ein Backup der vorherigen Datei wird erstellt.", - "Caricamento .env...": ".env wird geladen...", - "Caricamento automatico:": "Automatisches Laden:", - "Caricamento backup...": "Backups werden geladen...", - "Caricamento categorie...": "Kategorien werden geladen...", - "Caricamento completato": "Upload abgeschlossen", - "Caricamento condizionale:": "Bedingtes Laden:", - "Caricamento del logo non riuscito. Verifica le dimensioni e il formato del file.": "Logo-Upload fehlgeschlagen. Überprüfen Sie Dateigröße und Format.", - "Caricamento fallito": "Upload fehlgeschlagen", - "Caricamento file...": "Datei wird hochgeladen...", - "Caricamento in corso...": "Wird hochgeladen...", - "Caricamento libri...": "Bücher werden geladen...", - "Caricamento non riuscito. Riprova.": "Upload fehlgeschlagen. Bitte versuchen Sie es erneut.", - "Caricamento sessioni...": "Sitzungen werden geladen...", - "Caricamento...": "Wird geladen...", - "Caroselli Generi": "Genre-Karussells", - "Casa Editrice": "Verlag", - "Case editrici": "Verlage", - "Catalogo": "Katalog", - "Catalogo Completo Libri - Biblioteca Digitale": "Vollständiger Buchkatalog – Digitale Bibliothek", - "Catalogo Libri": "Buchkatalog", - "Catalogo Libri - Biblioteca": "Buchkatalog – Bibliothek", - "Catalogo libri": "Buchkatalog", - "Català (CA)": "Katalanisch (CA)", - "Categoria": "Kategorie", - "Categorie": "Kategorien", - "Categorie Cookie": "Cookie-Kategorien", - "Centro Impostazioni": "Einstellungscenter", - "Cerca": "Suchen", - "Cerca IP...": "IP suchen...", - "Cerca Libri": "Bücher suchen", - "Cerca Libro": "Buch suchen", - "Cerca Utente": "Benutzer suchen", - "Cerca autore...": "Autor suchen...", - "Cerca autori esistenti o aggiungine di nuovi...": "Vorhandene Autoren suchen oder neue hinzufügen...", - "Cerca codice o nome...": "Code oder Name suchen...", - "Cerca editore esistente o inserisci nuovo...": "Vorhandenen Verlag suchen oder neuen eingeben...", - "Cerca editore...": "Verlag suchen...", - "Cerca email...": "E-Mail suchen...", - "Cerca genere...": "Genre suchen...", - "Cerca icona... (es. user, home, book)": "Symbol suchen... (z. B. user, home, book)", - "Cerca libri, autori, ISBN...": "Bücher, Autoren, ISBN suchen...", - "Cerca libri, autori, editori, utenti...": "Bücher, Autoren, Verlage, Benutzer suchen...", - "Cerca libri, autori, editori...": "Bücher, Autoren, Verlage suchen...", - "Cerca libri, autori...": "Bücher, Autoren suchen...", - "Cerca libri...": "Bücher suchen...", - "Cerca nella biblioteca": "In der Bibliothek suchen", - "Cerca per ISBN-10": "Nach ISBN-10 suchen", - "Cerca per ISBN-13": "Nach ISBN-13 suchen", - "Cerca per codice EAN": "Nach EAN-Code suchen", - "Cerca per nome autore (corrispondenza parziale)": "Nach Autorenname suchen (Teilübereinstimmung)", - "Cerca per nome, cognome, telefono, email o tessera": "Nach Name, Nachname, Telefon, E-Mail oder Ausweis suchen", - "Cerca per nome...": "Nach Name suchen...", - "Cerca per pseudonimo...": "Nach Pseudonym suchen...", - "Cerca per titolo o sottotitolo": "Nach Titel oder Untertitel suchen", - "Cerca per titolo o stato (es. disponibile)": "Nach Titel oder Status suchen (z. B. verfügbar)", - "Cerca per titolo, ISBN o EAN": "Nach Titel, ISBN oder EAN suchen", - "Cerca posizione...": "Standort suchen...", - "Cerca pseudonimo...": "Pseudonym suchen...", - "Cerca rapido...": "Schnellsuche...", - "Cerca testo": "Text suchen", - "Cerca titoli": "Titel suchen", - "Cerca titoli, autori, ISBN...": "Titel, Autoren, ISBN suchen...", - "Cerca...": "Suchen...", - "Cerca:": "Suchen:", - "Certificato SSL/TLS valido": "Gültiges SSL/TLS-Zertifikat", - "Chi Siamo": "Über uns", - "Chiave": "Schlüssel", - "Chiave API Google Books": "Google Books API-Schlüssel", - "Chiave Google Books aggiornata.": "Google Books-Schlüssel aktualisiert.", - "Chiave Google Books rimossa.": "Google Books-Schlüssel entfernt.", - "Chiave Google Books salvata correttamente.": "Google Books-Schlüssel erfolgreich gespeichert.", - "Chiave Route": "Routen-Schlüssel", - "Chiedi al tuo amministratore di database di eseguire i comandi contenuti nel file": "Bitten Sie Ihren Datenbankadministrator, die in der Datei enthaltenen Befehle auszuführen", - "Chiudi": "Schließen", - "Chiudi Player": "Player schließen", - "Chiudi alternative": "Alternativen schließen", - "Chiudi menu": "Menü schließen", - "Citazione": "Zitat", - "Città": "Stadt", - "Classe (000-900)": "Klasse (000–900)", - "Classe principale mancante: %s.": "Fehlende Hauptklasse: %s.", - "Classi principali": "Hauptklassen", - "Classificazione Dewey": "Dewey-Klassifikation", - "Classificazione selezionata:": "Ausgewählte Klassifikation:", - "Clicca o trascina per caricare un logo": "Klicken oder ziehen Sie, um ein Logo hochzuladen", - "Clicca per selezionare": "Zum Auswählen klicken", - "Clicca su \"Esegui Manutenzione\" per correggere automaticamente i problemi riparabili.": "Klicken Sie auf \"Wartung ausführen\", um behebbare Probleme automatisch zu korrigieren.", - "Clicca su 'Aggiungi Lingua'": "Klicken Sie auf 'Sprache hinzufügen'", - "Clicca su \\": "Klicken Sie auf \\", - "Clicca su \\\"Esegui Manutenzione\\\" per correggere automaticamente i problemi riparabili.": "Klicken Sie auf \\\"Wartung ausführen\\\", um behebbare Probleme automatisch zu korrigieren.", - "Clicca su un'icona per selezionarla": "Klicken Sie auf ein Symbol, um es auszuwählen", - "Close menu": "Menü schließen", - "Coda": "Warteschlange", - "Codice": "Code", - "Codice *": "Code *", - "Codice CSS": "CSS-Code", - "Codice CSS da applicare a tutte le pagine del frontend": "CSS-Code, der auf alle Frontend-Seiten angewendet wird", - "Codice Dewey": "Dewey-Code", - "Codice Dewey non trovato": "Dewey-Code nicht gefunden", - "Codice Dewey selezionato:": "Ausgewählter Dewey-Code:", - "Codice Dewey trovato e impostato": "Dewey-Code gefunden und gesetzt", - "Codice Fiscale": "Steuernummer", - "Codice ISBN o EAN": "ISBN- oder EAN-Code", - "Codice ISO 2 lettere (es: IT, FR, GB)": "ISO-2-Buchstaben-Code (z. B. IT, FR, GB)", - "Codice JavaScript": "JavaScript-Code", - "Codice JavaScript Analytics": "Analytics-JavaScript-Code", - "Codice Lingua": "Sprachcode", - "Codice Tessera": "Ausweisnummer", - "Codice Tessera:": "Ausweisnummer:", - "Codice embed completo": "Vollständiger Einbettungscode", - "Codice fiscale": "Steuernummer", - "Codice fiscale dell'editore (opzionale)": "Steuernummer des Verlags (optional)", - "Codice fiscale italiano (opzionale)": "Italienische Steuernummer (optional)", - "Codice parent non trovato.": "Übergeordneter Code nicht gefunden.", - "Codice postale...": "Postleitzahl...", - "Codice scaffale obbligatorio": "Regalcode erforderlich", - "Codice tessera": "Ausweisnummer", - "Cognome": "Nachname", - "Collana": "Reihe", - "Collocazione": "Standort", - "Collocazione calcolata": "Berechneter Standort", - "Collocazione suggerita": "Vorgeschlagener Standort", - "Collocazione:": "Standort:", - "Colonne": "Spalten", - "Colore Bottoni CTA": "CTA-Schaltflächenfarbe", - "Colore Primario": "Primärfarbe", - "Colore Secondario": "Sekundärfarbe", - "Colore Testo Bottoni": "Schaltflächen-Textfarbe", - "Colore non valido": "Ungültige Farbe", - "Colori Tema": "Theme-Farben", - "Colori ripristinati ai valori predefiniti": "Farben auf Standardwerte zurückgesetzt", - "Come Esportare da LibraryThing": "So exportieren Sie aus LibraryThing", - "Come Funziona": "So funktioniert es", - "Come ottenere il codice": "So erhalten Sie den Code", - "Commento": "Kommentar", - "Communication error with the server": "Kommunikationsfehler mit dem Server", - "Compila con i dati dei tuoi libri": "Füllen Sie die Daten Ihrer Bücher aus", - "Compila i dettagli del libro per aggiungerlo alla biblioteca": "Füllen Sie die Buchdetails aus, um es zur Bibliothek hinzuzufügen", - "Compila i dettagli dell'autore per aggiungerlo alla biblioteca": "Füllen Sie die Autorendetails aus, um ihn zur Bibliothek hinzuzufügen", - "Compila i dettagli della casa editrice per aggiungerla alla biblioteca": "Füllen Sie die Verlagsdetails aus, um ihn zur Bibliothek hinzuzufügen", - "Compila nome e URL per tutti i server.": "Füllen Sie Name und URL für alle Server aus.", - "Compila tutti i campi obbligatori prima di salvare.": "Füllen Sie alle Pflichtfelder aus, bevor Sie speichern.", - "Compila tutti i campi obbligatori.": "Füllen Sie alle Pflichtfelder aus.", - "Compila tutti i campi per creare una nuova prenotazione": "Füllen Sie alle Felder aus, um eine neue Vormerkung zu erstellen", - "Compila tutti i campi richiesti": "Füllen Sie alle erforderlichen Felder aus", - "Completamento": "Fertigstellung", - "Completata": "Abgeschlossen", - "Completati": "Abgeschlossen", - "Completato": "Abgeschlossen", - "Completato!": "Abgeschlossen!", - "Complete": "Vollständig", - "Completo": "Vollständig", - "Complimenti!": "Herzlichen Glückwunsch!", - "Componente": "Komponente", - "Con valore 3, un prestito che scade il 15 Gennaio riceverà l'avviso il 12 Gennaio": "Bei Wert 3 erhält eine Ausleihe, die am 15. Januar abläuft, die Benachrichtigung am 12. Januar", - "Condividi": "Teilen", - "Condividi la tua opinione su questo libro...": "Teilen Sie Ihre Meinung zu diesem Buch...", - "Condividi su Facebook": "Auf Facebook teilen", - "Condividi su Twitter": "Auf Twitter teilen", - "Condividi su WhatsApp": "Auf WhatsApp teilen", - "Condiviso": "Geteilt", - "Condizioni": "Bedingungen", - "Conferma": "Bestätigen", - "Conferma Aggiornamento": "Aktualisierung bestätigen", - "Conferma Annullamento": "Stornierung bestätigen", - "Conferma Disinstallazione": "Deinstallation bestätigen", - "Conferma Password": "Passwort bestätigen", - "Conferma Ritiro": "Abholung bestätigen", - "Conferma Salvataggio": "Speichern bestätigen", - "Conferma aggiornamento": "Aktualisierung bestätigen", - "Conferma eliminazione": "Löschung bestätigen", - "Conferma la tua email": "Bestätigen Sie Ihre E-Mail", - "Conferma modifica": "Änderung bestätigen", - "Conferma password": "Passwort bestätigen", - "Conferma restituzione": "Rückgabe bestätigen", - "Confermare il ritiro?": "Abholung bestätigen?", - "Confermi di voler attivare direttamente questo utente senza richiedere verifica email?": "Möchten Sie diesen Benutzer wirklich direkt aktivieren, ohne eine E-Mail-Verifizierung zu verlangen?", - "Confermi di voler attivare direttamente questo utente?": "Sind Sie sicher, dass Sie diesen Benutzer direkt aktivieren möchten?", - "Confermi l'eliminazione dell'editore?": "Verlag wirklich löschen?", - "Confermi l'operazione?": "Vorgang bestätigen?", - "Confermi?": "Bestätigen?", - "Confermo di voler disinstallare il plugin e di aver effettuato un backup dei dati": "Ich bestätige, dass ich das Plugin deinstallieren möchte und eine Datensicherung durchgeführt habe", - "Configura API": "API konfigurieren", - "Configura Google Books": "Google Books konfigurieren", - "Configura Z39.50": "Z39.50 konfigurieren", - "Configura i testi mostrati all'interno del pannello delle preferenze dei cookie.": "Konfigurieren Sie die Texte, die im Cookie-Einstellungen-Panel angezeigt werden.", - "Configura i testi visualizzati agli utenti in ogni parte del cookie banner.": "Konfigurieren Sie die Texte, die den Benutzern in jedem Teil des Cookie-Banners angezeigt werden.", - "Configura i testi visualizzati agli utenti nel banner iniziale.": "Konfigurieren Sie die Texte, die den Benutzern im anfänglichen Banner angezeigt werden.", - "Configura l'identità dell'applicazione, i metodi di invio email e personalizza i template delle notifiche automatiche.": "Konfigurieren Sie die Anwendungsidentität, E-Mail-Versandmethoden und passen Sie die Vorlagen für automatische Benachrichtigungen an.", - "Configura le date della prenotazione": "Vormerkungsdaten konfigurieren", - "Configura le impostazioni di sicurezza per le connessioni HTTPS": "Sicherheitseinstellungen für HTTPS-Verbindungen konfigurieren", - "Configura le impostazioni email per l'invio di notifiche agli utenti.": "Konfigurieren Sie die E-Mail-Einstellungen für den Versand von Benachrichtigungen an Benutzer.", - "Configura le impostazioni rimanenti (privacy, contatti, etc.)": "Konfigurieren Sie die verbleibenden Einstellungen (Datenschutz, Kontakte usw.)", - "Configura quando inviare l'avviso di scadenza prestiti agli utenti": "Konfigurieren Sie, wann die Fälligkeitserinnerung für Ausleihen an die Benutzer gesendet werden soll", - "Configurazione": "Konfiguration", - "Configurazione Cron Job": "Cron-Job-Konfiguration", - "Configurazione Database": "Datenbank-Konfiguration", - "Configurazione Email": "E-Mail-Konfiguration", - "Configurazione Etichette Libri": "Buchetiketten-Konfiguration", - "Configurazione SMTP": "SMTP-Konfiguration", - "Configurazione aggiornata con successo!": "Konfiguration erfolgreich aktualisiert!", - "Configurazione del banner cookie": "Cookie-Banner-Konfiguration", - "Configurazione guidata in pochi passaggi.": "Geführte Konfiguration in wenigen Schritten.", - "Configurazione invio": "Versandkonfiguration", - "Configurazione sistema": "Systemkonfiguration", - "Confirm?": "Bestätigen?", - "Connessione al database fallita": "Datenbankverbindung fehlgeschlagen", - "Connessione database non disponibile": "Datenbankverbindung nicht verfügbar", - "Connessione fallita": "Verbindung fehlgeschlagen", - "Connesso": "Verbunden", - "Consegna immediata": "Sofortige Übergabe", - "Conserva queste informazioni in un luogo sicuro!": "Bewahren Sie diese Informationen an einem sicheren Ort auf!", - "Consigliato": "Empfohlen", - "Consigliato JPG o PNG ad alta risoluzione (min 1920x1080px). Max 5MB.": "Empfohlen: hochauflösendes JPG oder PNG (min. 1920x1080px). Max. 5MB.", - "Consigliato JPG, PNG o WebP (min 800x600px). Max 5MB.": "Empfohlen: JPG, PNG oder WebP (min. 800x600px). Max. 5MB.", - "Consigliato PNG o SVG con sfondo trasparente. Dimensione massima 2MB.": "Empfohlen: PNG oder SVG mit transparentem Hintergrund. Maximale Größe 2MB.", - "Consigliato: 150-160 caratteri": "Empfohlen: 150-160 Zeichen", - "Consigliato: 50-60 caratteri": "Empfohlen: 50-60 Zeichen", - "Consigliato: PHP mail() per semplicità, SMTP per maggiore controllo": "Empfohlen: PHP mail() für Einfachheit, SMTP für mehr Kontrolle", - "Consigliato: Summary Large Image per homepage.": "Empfohlen: Summary Large Image für die Startseite.", - "Contatta il tuo provider di hosting e chiedi di eseguire": "Kontaktieren Sie Ihren Hosting-Anbieter und bitten Sie ihn, Folgendes auszuführen", - "Contattaci": "Kontaktieren Sie uns", - "Contatti": "Kontakt", - "Contatti e accesso": "Kontakt und Zugang", - "Contenuti Digitali": "Digitale Inhalte", - "Contenuti homepage aggiornati con successo!": "Homepage-Inhalte erfolgreich aktualisiert!", - "Contenuto": "Inhalt", - "Contenuto Cookie Policy": "Cookie-Richtlinie Inhalt", - "Contenuto Pagina": "Seiteninhalt", - "Contenuto Privacy Policy": "Datenschutzrichtlinie Inhalt", - "Contenuto Testuale": "Textinhalt", - "Contenuto della pagina": "Seiteninhalt", - "Contenuto della pagina /cookies accessibile dal banner": "Inhalt der Seite /cookies, erreichbar über das Banner", - "Contenuto pagina": "Seiteninhalt", - "Contenuto testuale HTML con editor avanzato": "HTML-Textinhalt mit erweitertem Editor", - "Continua": "Weiter", - "Contrasto": "Kontrast", - "Contrasto insufficiente tra bottone e testo (minimo 3:1). Attuale": "Unzureichender Kontrast zwischen Schaltfläche und Text (Minimum 3:1). Aktuell", - "Controlla Aggiornamenti": "Auf Updates prüfen", - "Controlla la tua casella di posta e clicca sul link per resettare la password. Il link sarà valido per 2 ore.": "Überprüfen Sie Ihren Posteingang und klicken Sie auf den Link, um Ihr Passwort zurückzusetzen. Der Link ist 2 Stunden gültig.", - "Controllo aggiornamenti": "Suche nach Updates", - "Controllo pre-aggiornamento fallito": "Vorab-Aktualisierungsprüfung fehlgeschlagen", - "Cookie Analitici": "Analyse-Cookies", - "Cookie Banner": "Cookie-Banner", - "Cookie Essenziali": "Essentielle Cookies", - "Cookie di Marketing": "Marketing-Cookies", - "Cookies": "Cookies", - "Copertina": "Cover", - "Copertina Attuale": "Aktuelles Cover", - "Copertina applicata": "Cover übernommen", - "Copertina attuale": "Aktuelles Cover", - "Copertina del Libro": "Buchcover", - "Copertina del libro": "Buchcover", - "Copertina del libro \"%s\"": "Buchcover von \"%s\"", - "Copertina non trovata online:": "Cover online nicht gefunden:", - "Copertina recuperata automaticamente": "Cover automatisch abgerufen", - "Copertina:": "Cover:", - "Copertine già presenti: %s": "Bereits vorhandene Cover: %s", - "Copertine scaricate (LibraryThing):": "Heruntergeladene Cover (LibraryThing):", - "Copertine scaricate:": "Cover abgerufen:", - "Copertine sincronizzate: %s": "Synchronisierte Cover: %s", - "Copia": "Kopieren", - "Copia %d di %d": "Exemplar %d von %d", - "Copia Link": "Link kopieren", - "Copia eliminata con successo.": "Exemplar erfolgreich gelöscht.", - "Copia link negli appunti": "Link in die Zwischenablage kopieren", - "Copia non trovata.": "Exemplar nicht gefunden.", - "Copiato!": "Kopiert!", - "Copie": "Exemplare", - "Copie Aggiunte!": "Exemplare hinzugefügt!", - "Copie Disponibili": "Verfügbare Exemplare", - "Copie Eccessive": "Überschüssige Exemplare", - "Copie Fisiche": "Physische Exemplare", - "Copie Negative": "Negative Exemplare", - "Copie Totali": "Exemplare gesamt", - "Copie disponibili": "Verfügbare Exemplare", - "Copie disponibili:": "Verfügbare Exemplare:", - "Copie totali": "Exemplare gesamt", - "Copie totali:": "Exemplare gesamt:", - "Copyright": "Copyright", - "Corpo Email": "E-Mail-Text", - "Corpo email": "E-Mail-Text", - "Correggi Permessi Automaticamente": "Berechtigungen automatisch korrigieren", - "Correggi Problemi": "Probleme beheben", - "Correggi nel file .env: APP_CANONICAL_URL=%s": "In der .env-Datei korrigieren: APP_CANONICAL_URL=%s", - "Corrente": "Aktuell", - "Correzione Automatica Permessi": "Automatische Berechtigungskorrektur", - "Correzione Manuale via SSH (se automatica fallisce)": "Manuelle Korrektur per SSH (falls automatisch fehlschlägt)", - "Correzione parziale:": "Teilweise Korrektur:", - "Correzioni applicate: %d record aggiornati": "Korrekturen angewendet: %d Datensätze aktualisiert", - "Cos'è la Collocazione?": "Was ist die Standortbezeichnung?", - "Cosa fare:": "Was zu tun ist:", - "Cosa ne pensi di questo libro?": "Was denken Sie über dieses Buch?", - "Cosa sono le Route?": "Was sind Routen?", - "Cosa viene nascosto:": "Was ausgeblendet wird:", - "Cover": "Cover", - "Crea": "Erstellen", - "Crea API Key": "API-Key erstellen", - "Crea Admin": "Admin erstellen", - "Crea Backup": "Sicherung erstellen", - "Crea Backup Manuale": "Manuelles Backup erstellen", - "Crea Evento": "Veranstaltung erstellen", - "Crea Indici Automaticamente": "Indizes automatisch erstellen", - "Crea Nuova API Key": "Neuen API-Key erstellen", - "Crea Nuova Prenotazione": "Neue Vormerkung erstellen", - "Crea Nuovo Evento": "Neue Veranstaltung erstellen", - "Crea Nuovo Genere": "Neues Genre erstellen", - "Crea Nuovo Prestito": "Neue Ausleihe erstellen", - "Crea Prenotazione": "Vormerkung erstellen", - "Crea Prestito": "Ausleihe erstellen", - "Crea Prima API Key": "Ersten API-Key erstellen", - "Crea Primo Genere": "Erstes Genre erstellen", - "Crea Tabelle Mancanti": "Fehlende Tabellen erstellen", - "Crea Utente Admin": "Admin-Benutzer erstellen", - "Crea Utente Amministratore": "Administratorbenutzer erstellen", - "Crea e gestisci gli eventi della biblioteca": "Erstellen und verwalten Sie Bibliotheksveranstaltungen", - "Crea gli scaffali (es: A, B, C)": "Erstellen Sie Regale (z.B.: A, B, C)", - "Crea il primo utente amministratore. Questo account avrà accesso completo a tutte le funzionalità del sistema.": "Erstellen Sie den ersten Administratorbenutzer. Dieses Konto hat vollen Zugriff auf alle Systemfunktionen.", - "Crea il tuo primo evento": "Erstellen Sie Ihre erste Veranstaltung", - "Crea la cartella logs se non esiste: mkdir -p logs": "Erstellen Sie den Ordner logs, falls er nicht existiert: mkdir -p logs", - "Crea nuovo": "Neu erstellen", - "Crea nuovo \"${item.label}\"": "Neu erstellen \"${item.label}\"", - "Crea un backup manuale o attendi il prossimo aggiornamento.": "Erstellen Sie ein manuelles Backup oder warten Sie auf die nächste Aktualisierung.", - "Crea un nuovo account": "Neues Konto erstellen", - "Crea un nuovo profilo amministratore o lettore.": "Erstellen Sie ein neues Administrator- oder Leserprofil.", - "Creare backup?": "Backup erstellen?", - "Creata": "Erstellt", - "Creata il": "Erstellt am", - "Creata:": "Erstellt:", - "Creato il": "Erstellt am", - "Creazione backup database": "Datenbank-Backup wird erstellt", - "Creazione backup...": "Backup wird erstellt...", - "Creazione indici di ottimizzazione...": "Optimierungsindizes werden erstellt...", - "Creazione indici...": "Indizes werden erstellt...", - "Creazione tabelle...": "Tabellen werden erstellt...", - "Credenziali": "Zugangsdaten", - "Credenziali Admin:": "Admin-Zugangsdaten:", - "Credenziali Errate": "Ungültige Zugangsdaten", - "Credenziali non valide o utente non admin": "Ungültige Zugangsdaten oder Benutzer ist kein Administrator", - "Crediti": "Danksagungen", - "Crescente": "Aufsteigend", - "Crittografia": "Verschlüsselung", - "Cronologia": "Verlauf", - "Cronologia Aggiornamenti": "Update-Verlauf", - "Cronologia Import": "Importverlauf", - "Cronologia degli aggiornamenti eseguiti": "Verlauf der durchgeführten Aktualisierungen", - "Da": "Von", - "Da %s (%s)": "Von %s (%s)", - "Da Inventariare": "Zu inventarisieren", - "Da Ritirare": "Zur Abholung bereit", - "Da approvare": "Zu genehmigen", - "Da approvare o rifiutare": "Zu genehmigen oder abzulehnen", - "Da consegnare": "Auszuliefern", - "Da creare": "Zu erstellen", - "Da prenotazione": "Aus Vormerkung", - "Da prenotazioni": "Aus Vormerkungen", - "Da qui puoi gestire tutte le lingue disponibili nell'applicazione. Carica file JSON di traduzione e abilita/disabilita lingue.": "Von hier aus können Sie alle verfügbaren Sprachen in der Anwendung verwalten. Laden Sie JSON-Übersetzungsdateien hoch und aktivieren/deaktivieren Sie Sprachen.", - "Da ritirare": "Zur Abholung bereit", - "Dal": "Vom", - "Dal %s al %s": "Vom %s bis %s", - "Dal:": "Vom:", - "Danneggiato": "Beschädigt", - "Dansk (DA)": "Dänisch (DA)", - "Dashboard": "Dashboard", - "Data": "Datum", - "Data Acq.": "Erw.-Datum", - "Data Acquisizione": "Erwerbungsdatum", - "Data Evento": "Veranstaltungsdatum", - "Data Fine": "Enddatum", - "Data Inizio": "Startdatum", - "Data Prenotazione": "Vormerkungsdatum", - "Data Prestito": "Ausleihdatum", - "Data Prestito:": "Ausleihdatum:", - "Data Pubblicazione": "Erscheinungsdatum", - "Data Restituzione": "Rückgabedatum", - "Data Restituzione:": "Rückgabedatum:", - "Data Scadenza": "Fälligkeitsdatum", - "Data Scadenza:": "Fälligkeitsdatum:", - "Data acquisizione": "Erwerbungsdatum", - "Data acquisizione a": "Erwerbungsdatum bis", - "Data acquisizione da": "Erwerbungsdatum von", - "Data creazione": "Erstellt am", - "Data di Pubblicazione": "Erscheinungsdatum", - "Data di inizio della prenotazione (default: oggi)": "Startdatum der Vormerkung (Standard: heute)", - "Data di morte": "Sterbedatum", - "Data di nascita": "Geburtsdatum", - "Data di pubblicazione": "Erscheinungsdatum", - "Data di scadenza della prenotazione (default: +30 giorni)": "Ablaufdatum der Vormerkung (Standard: +30 Tage)", - "Data fine": "Enddatum", - "Data inizio": "Startdatum", - "Data inizio richiesta mancante": "Angefordertes Startdatum fehlt", - "Data morte a": "Sterbedatum bis", - "Data morte da": "Sterbedatum von", - "Data nascita a": "Geburtsdatum bis", - "Data nascita da": "Geburtsdatum von", - "Data non valida.": "Ungültiges Datum.", - "Data originale di pubblicazione (formato italiano)": "Ursprüngliches Erscheinungsdatum (italienisches Format)", - "Data prestito": "Ausleihdatum", - "Data prestito (A)": "Ausleihdatum (Bis)", - "Data prestito (Da)": "Ausleihdatum (Von)", - "Data pubblicazione da": "Erscheinungsdatum von", - "Data scadenza prevista": "Voraussichtliches Fälligkeitsdatum", - "Data/Ora": "Datum/Uhrzeit", - "Data:": "Datum:", - "DataIntegrity warning (store loan)": "DataIntegrity-Warnung (Ausleihe speichern)", - "Database": "Datenbank", - "Database '%s' non esiste. Crealo prima di procedere.": "Datenbank '%s' existiert nicht. Bitte erstellen Sie sie, bevor Sie fortfahren.", - "Database installato (30 tabelle)": "Datenbank installiert (30 Tabellen)", - "Database installato (41 tabelle)": "Datenbank installiert (41 Tabellen)", - "Database installato (46 tabelle)": "Datenbank installiert (46 Tabellen)", - "Database:": "Datenbank:", - "Date": "Termine", - "Date Non Valide": "Ungültige Daten", - "Dati Account": "Kontodaten", - "Dati Utente": "Benutzerdetails", - "Dati alternativi disponibili": "Alternative Daten verfügbar", - "Dati bibliografici completi (titolo, sottotitolo, ISBN, EAN, ecc.)": "Vollständige bibliografische Daten (Titel, Untertitel, ISBN, EAN usw.)", - "Dati della Prenotazione": "Vormerkungsdetails", - "Dati di classificazione mancanti": "Klassifikationsdaten fehlen", - "Dati essenziali caricati": "Wesentliche Daten geladen", - "Dati generi mancanti": "Genre-Daten fehlen", - "Dati iniziali importati OK": "Anfangsdaten erfolgreich importiert", - "Dati libro recuperati con successo da Open Library": "Buchdaten erfolgreich von Open Library abgerufen", - "Dati mancanti": "Fehlende Daten", - "Dati personali": "Persönliche Daten", - "Dati validi.": "Gültige Daten.", - "Debug": "Debug", - "Debug Log:": "Debug-Log:", - "Deceduto il %s": "Verstorben am %s", - "Decimali": "Dezimalstellen", - "Decrescente": "Absteigend", - "Default: un mese dopo la data inizio": "Standard: ein Monat nach dem Startdatum", - "Definisce i privilegi dell'utente.": "Definiert die Berechtigungen des Benutzers.", - "Demo": "Demo", - "Descrivi l'utilizzo di questa API key...": "Beschreiben Sie die Verwendung dieses API-Keys...", - "Descrizione": "Beschreibung", - "Descrizione Banner": "Banner-Beschreibung", - "Descrizione Evento": "Veranstaltungsbeschreibung", - "Descrizione Modale": "Modal-Beschreibung", - "Descrizione OG": "OG-Beschreibung", - "Descrizione Open Graph": "Open-Graph-Beschreibung", - "Descrizione SEO": "SEO-Beschreibung", - "Descrizione Twitter": "Twitter-Beschreibung", - "Descrizione banner": "Banner-Beschreibung", - "Descrizione breve": "Kurzbeschreibung", - "Descrizione completa dell'evento con possibilità di formattazione HTML": "Vollständige Veranstaltungsbeschreibung mit HTML-Formatierungsmöglichkeiten", - "Descrizione cookie analitici": "Beschreibung der Analyse-Cookies", - "Descrizione cookie essenziali": "Beschreibung der essentiellen Cookies", - "Descrizione cookie marketing": "Beschreibung der Marketing-Cookies", - "Descrizione del libro...": "Buchbeschreibung...", - "Descrizione footer": "Footer-Beschreibung", - "Descrizione modale": "Modal-Beschreibung", - "Descrizione nella modale preferenze. Puoi usare HTML.": "Beschreibung im Einstellungen-Modal. Sie können HTML verwenden.", - "Descrizione per Twitter/X. Se vuoto, usa la descrizione Open Graph.": "Beschreibung für Twitter/X. Wenn leer, wird die Open Graph-Beschreibung verwendet.", - "Descrizione per anteprima social. Se vuoto, usa la descrizione SEO.": "Beschreibung für die Social-Media-Vorschau. Wenn leer, wird die SEO-Beschreibung verwendet.", - "Descrizione troppo lunga (max 2000 caratteri)": "Beschreibung zu lang (max. 2000 Zeichen)", - "Descrizione:": "Beschreibung:", - "Deseleziona tutti": "Alle abwählen", - "Dettagli": "Details", - "Dettagli Acquisizione": "Erwerbungsdetails", - "Dettagli Fisici": "Physische Details", - "Dettagli Libro": "Buchdetails", - "Dettagli Messaggio": "Nachrichtendetails", - "Dettagli del Prestito": "Ausleihdetails", - "Dettagli evento": "Veranstaltungsdetails", - "Dettagli principali dell'evento": "Wichtigste Veranstaltungsdetails", - "Dettagli restituzione": "Rückgabedetails", - "Deutsch (DE)": "Deutsch (DE)", - "Deve contenere maiuscole, minuscole e numeri": "Muss Groß-, Kleinbuchstaben und Zahlen enthalten", - "Deve iniziare con": "Muss beginnen mit", - "Devi accettare la Privacy Policy per procedere": "Sie müssen die Datenschutzrichtlinie akzeptieren, um fortzufahren", - "Devi elencare manualmente i cookie tracciati da questi script nella": "Sie müssen die von diesen Skripten erfassten Cookies manuell auflisten in der", - "Devi eseguire": "Sie müssen ausführen", - "Dewey": "Dewey", - "Dimensione": "Größe", - "Dimensioni": "Abmessungen", - "Dipendenze": "Abhängigkeiten", - "Directory Upload Pubblici": "Verzeichnis für öffentliche Uploads", - "Directory non scrivibile: %s": "Verzeichnis nicht beschreibbar: %s", - "Directory plugin già esistente.": "Plugin-Verzeichnis existiert bereits.", - "Directory sorgente non trovata": "Quellverzeichnis nicht gefunden", - "Disabilita": "Deaktivieren", - "Disabilita prestiti, prenotazioni e wishlist. Gli utenti potranno solo consultare il catalogo.": "Deaktiviert Ausleihen, Vormerkungen und Wunschliste. Die Benutzer können nur den Katalog durchsuchen.", - "Disabilita se il tuo sito non usa cookie analitici (es. Google Analytics)": "Deaktivieren, wenn Ihre Website keine Analyse-Cookies verwendet (z.B. Google Analytics)", - "Disabilita se il tuo sito non usa cookie di marketing/advertising": "Deaktivieren, wenn Ihre Website keine Marketing-/Werbe-Cookies verwendet", - "Disabilita tutte le funzionalità di prestito e prenotazione": "Alle Ausleih- und Vormerkungsfunktionen deaktivieren", - "Disabilitata": "Deaktiviert", - "Disabilitata - Nascosta nel frontend": "Deaktiviert – Im Frontend ausgeblendet", - "Disabilitato": "Deaktiviert", - "Disattiva": "Deaktivieren", - "Disattiva modalità manutenzione": "Wartungsmodus deaktivieren", - "Disattivata": "Inaktiv", - "Discografia": "Diskografie", - "Disconnesso": "Getrennt", - "Disconnetti": "Abmelden", - "Disconnetti tutti": "Alle abmelden", - "Disinstalla": "Deinstallieren", - "Disinstalla Plugin": "Plugin deinstallieren", - "Disponibile": "Verfügbar", - "Disponibile dal:": "Verfügbar ab:", - "Disponibile nella data selezionata": "Am gewählten Datum verfügbar", - "Disponibile ora": "Jetzt verfügbar", - "Disponibile per il prestito.": "Zur Ausleihe verfügbar.", - "Disponibile solo con driver SMTP": "Nur mit SMTP-Treiber verfügbar", - "Disponibili": "Verfügbar", - "Disponibili e in prestito": "Verfügbar und ausgeliehen", - "Disponibilità": "Verfügbarkeit", - "Disponibilità copie": "Exemplarverfügbarkeit", - "Dispositivo sconosciuto": "Unbekanntes Gerät", - "Divisione (010-990)": "Abteilung (010-990)", - "Divisioni": "Abteilungen", - "Do you want to automatically fix the detected integrity issues?": "Möchten Sie die erkannten Integritätsprobleme automatisch beheben?", - "Do you want to run full system maintenance? This may take a few minutes.": "Möchten Sie die vollständige Systemwartung ausführen? Dies kann einige Minuten dauern.", - "Documentazione": "Dokumentation", - "Documentazione API": "API-Dokumentation", - "Documento": "Dokument", - "Documento generato il %s alle %s": "Dokument erstellt am %s um %s", - "Donazione": "Spende", - "Dopo la conferma, un amministratore approverà la tua iscrizione.": "Nach der Bestätigung wird ein Administrator Ihre Registrierung genehmigen.", - "Dopo la rigenerazione, invia l'URL della sitemap a Google Search Console e Bing Webmaster Tools": "Senden Sie nach der Neugenerierung die Sitemap-URL an Google Search Console und Bing Webmaster Tools", - "Download aggiornamento": "Update wird heruntergeladen", - "Download completato": "Download abgeschlossen", - "Download copertina fallito": "Cover-Download fehlgeschlagen", - "Download fallito": "Download fehlgeschlagen", - "Driver": "Treiber", - "Driver Email": "E-Mail-Treiber", - "Durata": "Dauer", - "EAN": "EAN", - "EAN:": "EAN:", - "ERRORE:": "FEHLER:", - "Eccellente": "Ausgezeichnet", - "Eccezione creazione %s su %s:": "Ausnahme beim Erstellen von %s auf %s:", - "Eccezione creazione tabella %s:": "Ausnahme beim Erstellen der Tabelle %s:", - "Editor Classificazione Dewey": "Dewey-Klassifikationseditor", - "Editore": "Verlag", - "Editore \"${item.label}\" selezionato": "Verlag \"${item.label}\" ausgewählt", - "Editore \"${value}\" pronto per essere creato": "Verlag \"${value}\" bereit zur Erstellung", - "Editore \"%s\" pronto per essere creato": "Verlag \"%s\" bereit zur Erstellung", - "Editore \"%s\" selezionato": "Verlag \"%s\" ausgewählt", - "Editore %s": "Verlag %s", - "Editore applicato": "Verlag übernommen", - "Editore eliminato con successo.": "Verlag erfolgreich gelöscht.", - "Editore principale": "Hauptverlag", - "Editore sconosciuto": "Unbekannter Verlag", - "Editore selezionato:": "Ausgewählter Verlag:", - "Editore trovato:": "Verlag gefunden:", - "Editore:": "Verlag:", - "Editore: %s": "Verlag: %s", - "Editori": "Verlage", - "Editori uniti": "Verlage zusammengeführt", - "Editori uniti con successo": "Verlage erfolgreich zusammengeführt", - "Edizione": "Ausgabe", - "Elaborato da": "Bearbeitet von", - "Elaborazione lista attesa fallita": "Wartelistenverarbeitung fehlgeschlagen", - "Elaborazione...": "Verarbeitung...", - "Elementi": "Elemente", - "Elenco Autori": "Autorenliste", - "Elenco Autori - Biblioteca": "Autorenliste – Bibliothek", - "Elenco Editori": "Verlagsliste", - "Elenco Editori - Biblioteca": "Verlagsliste – Bibliothek", - "Elenco Libri": "Bücherliste", - "Elenco Libri - Biblioteca": "Bücherliste – Bibliothek", - "Elenco Prestiti": "Ausleihliste", - "Elenco Utenti": "Benutzerliste", - "Elenco Utenti - Biblioteca": "Benutzerliste – Bibliothek", - "Elimina": "Löschen", - "Elimina Installer": "Installer löschen", - "Elimina Installer (Richiede Composer)": "Installer löschen (erfordert Composer)", - "Elimina Lingua": "Sprache löschen", - "Elimina copia": "Exemplar löschen", - "Elimina il file .installed dalla root del progetto e riprova": "Löschen Sie die Datei .installed aus dem Projektstammverzeichnis und versuchen Sie es erneut", - "Elimina questa lingua. Questa azione non può essere annullata.": "Diese Sprache löschen. Diese Aktion kann nicht rückgängig gemacht werden.", - "Elimina recensione": "Rezension löschen", - "Eliminare i libri selezionati?": "Ausgewählte Bücher löschen?", - "Eliminare il file .installed dalla root del progetto e rieseguire l'installer": "Löschen Sie die Datei .installed aus dem Projektstammverzeichnis und führen Sie den Installer erneut aus", - "Eliminare il libro?": "Buch löschen?", - "Eliminare l'utente?": "Benutzer löschen?", - "Eliminare questa mensola? (Solo se vuota)": "Dieses Regalbrett löschen? (Nur wenn leer)", - "Eliminare questo backup?": "Dieses Backup löschen?", - "Eliminare questo scaffale? (Solo se vuoto)": "Dieses Regal löschen? (Nur wenn leer)", - "Eliminati": "Gelöscht", - "Eliminato!": "Gelöscht!", - "Eliminazione in corso...": "Wird gelöscht...", - "Email": "E-Mail", - "Email *": "E-Mail *", - "Email Admin": "Admin-E-Mail", - "Email Contatto": "Kontakt-E-Mail", - "Email Non Valida": "Ungültige E-Mail", - "Email Non Verificata": "Nicht verifizierte E-Mail", - "Email Referente": "E-Mail der Kontaktperson", - "Email associata al tuo account": "Mit Ihrem Konto verknüpfte E-Mail", - "Email configurata": "E-Mail konfiguriert", - "Email di contatto": "Kontakt-E-Mail", - "Email di recupero inviata con successo!": "Wiederherstellungs-E-Mail erfolgreich gesendet!", - "Email dove ricevere i messaggi dal form contatti": "E-Mail-Adresse für den Empfang von Nachrichten aus dem Kontaktformular", - "Email e telefono visibili sulla pagina contatti": "E-Mail und Telefon sichtbar auf der Kontaktseite", - "Email già registrata": "E-Mail bereits registriert", - "Email non trovata nel nostro sistema": "E-Mail in unserem System nicht gefunden", - "Email non valida. Verifica il formato": "Ungültige E-Mail. Überprüfen Sie das Format", - "Email non verificata. Controlla la tua casella di posta e clicca sul link di verifica": "E-Mail nicht verifiziert. Überprüfen Sie Ihren Posteingang und klicken Sie auf den Bestätigungslink", - "Email o password non corretti. Verifica le credenziali e riprova": "E-Mail oder Passwort falsch. Überprüfen Sie Ihre Zugangsdaten und versuchen Sie es erneut", - "Email per notifiche": "E-Mail für Benachrichtigungen", - "Email troppo lunga (massimo 255 caratteri)": "E-Mail zu lang (maximal 255 Zeichen)", - "Email utente": "Benutzer-E-Mail", - "Email verificata con successo! Il tuo account è ora in attesa di approvazione da parte dell'amministratore. Riceverai un'email quando sarà attivato.": "E-Mail erfolgreich verifiziert! Ihr Konto wartet nun auf die Genehmigung durch den Administrator. Sie erhalten eine E-Mail, wenn es aktiviert wird.", - "Email:": "E-Mail:", - "Embed della mappa (Google Maps o OpenStreetMap). Puoi inserire l'URL o il codice iframe completo.": "Karteneinbettung (Google Maps oder OpenStreetMap). Sie können die URL oder den vollständigen iframe-Code einfügen.", - "Emoji Bandiera": "Flaggen-Emoji", - "Emoji della bandiera del paese (opzionale)": "Landesflaggen-Emoji (optional)", - "Emoji della bandiera del paese (opzionale, default: 🌐)": "Landesflaggen-Emoji (optional, Standard: 🌐)", - "Encryption": "Encryption", - "Endpoint": "Endpoint", - "Endpoint SRU:": "SRU-Endpoint:", - "English (EN)": "Englisch (EN)", - "Errore": "Fehler", - "Errore Installazione": "Installationsfehler", - "Errore SQL durante migrazione %s: %s": "SQL-Fehler bei Migration %s: %s", - "Errore Upload": "Upload-Fehler", - "Errore aggiornamento log": "Fehler beim Aktualisieren des Protokolls", - "Errore annullamento prenotazione": "Fehler bei der Stornierung der Vormerkung", - "Errore annullamento prestito": "Fehler bei der Stornierung der Ausleihe", - "Errore attivazione prestito schedulato": "Fehler bei der Aktivierung der geplanten Ausleihe", - "Errore backup database": "Fehler beim Datenbank-Backup", - "Errore caricamento Audiobook": "Fehler beim Laden des Hörbuchs", - "Errore caricamento classificazione Dewey": "Fehler beim Laden der Dewey-Klassifikation", - "Errore caricamento eBook": "Fehler beim Laden des E-Books", - "Errore connessione database": "Datenbankverbindungsfehler", - "Errore correzione dati:": "Fehler bei der Datenkorrektur:", - "Errore creazione %s su %s:": "Fehler beim Erstellen von %s auf %s:", - "Errore creazione indici:": "Fehler bei der Indexerstellung:", - "Errore creazione tabella %s:": "Fehler beim Erstellen der Tabelle %s:", - "Errore creazione tabella migrazioni": "Fehler beim Erstellen der Migrationstabelle", - "Errore creazione tabella update_logs": "Fehler beim Erstellen der Tabelle update_logs", - "Errore database:": "Datenbankfehler:", - "Errore del Server": "Serverfehler", - "Errore del database": "Datenbankfehler", - "Errore del database durante la registrazione. Riprova più tardi": "Datenbankfehler bei der Registrierung. Bitte versuchen Sie es später erneut", - "Errore del server": "Serverfehler", - "Errore del server. Riprova più tardi.": "Serverfehler. Bitte versuchen Sie es später erneut.", - "Errore di comunicazione con il server": "Kommunikationsfehler mit dem Server", - "Errore di configurazione del server.": "Serverkonfigurationsfehler.", - "Errore di configurazione.": "Konfigurationsfehler.", - "Errore di connessione": "Verbindungsfehler", - "Errore di connessione durante l'importazione": "Verbindungsfehler während des Imports", - "Errore di connessione:": "Verbindungsfehler:", - "Errore di rete": "Netzwerkfehler", - "Errore di salvataggio": "Speicherfehler", - "Errore di salvataggio. Riprova più tardi.": "Fehler beim Speichern. Bitte versuchen Sie es später erneut.", - "Errore di sicurezza": "Sicherheitsfehler", - "Errore di sicurezza, riprova": "Sicherheitsfehler, versuchen Sie es erneut", - "Errore di sicurezza. Aggiorna la pagina e riprova": "Sicherheitsfehler. Aktualisieren Sie die Seite und versuchen Sie es erneut", - "Errore di sicurezza. Ricarica la pagina e riprova": "Sicherheitsfehler. Laden Sie die Seite neu und versuchen Sie es erneut", - "Errore di sicurezza. Ricarica la pagina e riprova.": "Sicherheitsfehler. Laden Sie die Seite neu und versuchen Sie es erneut.", - "Errore di sicurezza. Riprova.": "Sicherheitsfehler. Bitte versuchen Sie es erneut.", - "Errore di sistema.": "Systemfehler.", - "Errore durante il caricamento dei dettagli del plugin.": "Fehler beim Laden der Plugin-Details.", - "Errore durante il caricamento del file (code: %s).": "Fehler beim Hochladen der Datei (Code: %s).", - "Errore durante il caricamento del file.": "Fehler beim Hochladen der Datei.", - "Errore durante il controllo": "Fehler bei der Überprüfung", - "Errore durante il recupero dei dati": "Fehler beim Abrufen der Daten", - "Errore durante il recupero delle sessioni": "Fehler beim Abrufen der Sitzungen", - "Errore durante il ricalcolo:": "Fehler bei der Neuberechnung:", - "Errore durante il rifiuto": "Fehler bei der Ablehnung", - "Errore durante il salvataggio": "Fehler beim Speichern", - "Errore durante il salvataggio delle impostazioni.": "Fehler beim Speichern der Einstellungen.", - "Errore durante il salvataggio delle impostazioni:": "Fehler beim Speichern der Einstellungen:", - "Errore durante il salvataggio nel database.": "Fehler beim Speichern in der Datenbank.", - "Errore durante il salvataggio.": "Fehler beim Speichern.", - "Errore durante il salvataggio:": "Fehler beim Speichern:", - "Errore durante il seed": "Fehler beim Seeding", - "Errore durante l'aggiornamento": "Fehler bei der Aktualisierung", - "Errore durante l'aggiornamento dell'evento.": "Fehler beim Aktualisieren der Veranstaltung.", - "Errore durante l'aggiornamento della chiave Google Books.": "Fehler beim Aktualisieren des Google-Books-Schlüssels.", - "Errore durante l'annullamento del ritiro": "Fehler beim Stornieren der Abholung", - "Errore durante l'applicazione del fix:": "Fehler beim Anwenden des Fixes:", - "Errore durante l'approvazione": "Fehler bei der Genehmigung", - "Errore durante l'attivazione": "Fehler bei der Aktivierung", - "Errore durante l'attivazione del plugin.": "Fehler beim Aktivieren des Plugins.", - "Errore durante l'attivazione del tema": "Fehler bei der Aktivierung des Themes", - "Errore durante l'attivazione: %s": "Fehler bei der Aktivierung: %s", - "Errore durante l'eliminazione dell'evento.": "Fehler beim Löschen der Veranstaltung.", - "Errore durante l'estrazione del plugin.": "Fehler beim Entpacken des Plugins.", - "Errore durante l'import: %s": "Importfehler: %s", - "Errore durante l'importazione (HTTP": "Fehler beim Import (HTTP", - "Errore durante l'importazione (HTTP %d)": "Importfehler (HTTP %d)", - "Errore durante l'importazione dati": "Fehler beim Datenimport", - "Errore durante l'installazione del plugin.": "Fehler bei der Plugin-Installation.", - "Errore durante l'installazione:": "Fehler bei der Installation:", - "Errore durante l'installazione: %s": "Fehler bei der Installation: %s", - "Errore durante l'invio dell'email. Riprova più tardi": "Fehler beim Senden der E-Mail. Bitte versuchen Sie es später erneut", - "Errore durante l'unione degli autori": "Fehler beim Zusammenführen der Autoren", - "Errore durante l'unione degli editori": "Fehler beim Zusammenführen der Verlage", - "Errore durante l'upload.": "Upload-Fehler.", - "Errore durante la conferma del ritiro": "Fehler bei der Abholungsbestätigung", - "Errore durante la correzione:": "Fehler bei der Korrektur:", - "Errore durante la creazione degli indici": "Fehler beim Erstellen der Indizes", - "Errore durante la creazione degli indici:": "Fehler beim Erstellen der Indizes:", - "Errore durante la creazione del prestito.": "Fehler beim Erstellen der Ausleihe.", - "Errore durante la creazione dell'evento.": "Fehler beim Erstellen der Veranstaltung.", - "Errore durante la creazione dell'utente:": "Fehler beim Erstellen des Benutzers:", - "Errore durante la creazione delle tabelle:": "Fehler beim Erstellen der Tabellen:", - "Errore durante la disattivazione del plugin.": "Fehler beim Deaktivieren des Plugins.", - "Errore durante la disattivazione: %s": "Fehler bei der Deaktivierung: %s", - "Errore durante la disinstallazione del plugin.": "Fehler bei der Deinstallation des Plugins.", - "Errore durante la finalizzazione:": "Fehler bei der Fertigstellung:", - "Errore durante la manutenzione:": "Fehler bei der Wartung:", - "Errore durante la prenotazione": "Fehler bei der Vormerkung", - "Errore durante la registrazione": "Registrierungsfehler", - "Errore durante la revoca della sessione": "Fehler beim Widerrufen der Sitzung", - "Errore durante la revoca delle sessioni": "Fehler beim Widerrufen der Sitzungen", - "Errore durante la ricerca": "Fehler bei der Suche", - "Errore durante la ricerca su": "Fehler bei der Suche auf", - "Errore durante la rimozione dal database.": "Fehler beim Entfernen aus der Datenbank.", - "Errore durante la verifica dei libri associati": "Fehler bei der Überprüfung der zugehörigen Bücher", - "Errore durante la verifica dei prestiti attivi": "Fehler bei der Überprüfung der aktiven Ausleihen", - "Errore elaborazione restituzione": "Fehler bei der Rückgabeverarbeitung", - "Errore elaborazione ritiro scaduto": "Fehler bei der Verarbeitung der abgelaufenen Abholung", - "Errore export CSV": "CSV-Export-Fehler", - "Errore fatale durante aggiornamento": "Schwerwiegender Fehler bei der Aktualisierung", - "Errore generazione PDF prestito": "Fehler bei der Erstellung des Ausleih-PDF", - "Errore generazione calendario": "Fehler bei der Kalendererstellung", - "Errore gestione cambio stato copia": "Fehler bei der Verarbeitung der Exemplar-Statusänderung", - "Errore gestione copia non disponibile": "Fehler bei der Behandlung des nicht verfügbaren Exemplars", - "Errore imprevisto durante l'unione degli autori": "Unerwarteter Fehler beim Zusammenführen der Autoren", - "Errore imprevisto durante l'unione degli editori": "Unerwarteter Fehler beim Zusammenführen der Verlage", - "Errore interno del database": "Interner Datenbankfehler", - "Errore interno del database durante la verifica": "Interner Datenbankfehler während der Überprüfung", - "Errore interno del database. Riprova più tardi.": "Interner Datenbankfehler. Bitte versuchen Sie es später erneut.", - "Errore interno durante l'approvazione": "Interner Fehler bei der Genehmigung", - "Errore interno: %s": "Interner Fehler: %s", - "Errore invio notifica differita": "Fehler beim Senden der verzögerten Benachrichtigung", - "Errore invio notifica ritiro pronto": "Fehler beim Senden der Abholbereitschafts-Benachrichtigung", - "Errore invio notifica ritiro scaduto": "Fehler beim Senden der Benachrichtigung über abgelaufene Abholung", - "Errore lettura calendario": "Fehler beim Lesen des Kalenders", - "Errore modifica data prenotazione": "Fehler bei der Änderung des Vormerkungsdatums", - "Errore nel caricamento dei backup.": "Fehler beim Laden der Sicherungen.", - "Errore nel caricamento dei libri": "Fehler beim Laden der Bücher", - "Errore nel caricamento del file": "Fehler beim Hochladen der Datei", - "Aggiunge badge cliccabili alla scheda libro per cercare su Anna's Archive, Z-Library e Project Gutenberg con un click. Ispirato all'estensione browser GoodLib.": "Fügt anklickbare Badges zur Buchdetailseite hinzu, um mit einem Klick auf Anna's Archive, Z-Library und Project Gutenberg zu suchen. Inspiriert von der GoodLib-Browsererweiterung.", - "Anna's Archive": "Anna's Archive", - "Catalogo pubblico": "Öffentlicher Katalog", - "Configura Fonti": "Quellen konfigurieren", - "Domini mirror": "Mirror-Domains", - "Dominio non valido. Inserisci solo host o host:porta, senza percorsi.": "Ungültige Domain. Geben Sie nur Host oder Host:Port ohne Pfade ein.", - "Dominio personalizzato...": "Benutzerdefinierte Domain...", - "Errore durante l'aggiornamento del profilo.": "Fehler beim Aktualisieren des Profils.", - "Cerca su:": "Suche auf:", - "Predefinita del sito": "Website-Standard", - "Cerca \"%s\" su %s": "Suche \"%s\" auf %s", - "Fonti attive": "Aktive Quellen", - "GoodLib — External Sources": "GoodLib — Externe Quellen", - "GoodLib — Fonti Esterne": "GoodLib — Externe Quellen", - "Impostazioni GoodLib salvate correttamente.": "GoodLib-Einstellungen erfolgreich gespeichert.", - "Mostra badge nella pagina dettaglio libro": "Badge auf der Buchdetailseite anzeigen", - "Mostra badge nell'area amministrazione": "Badge im Administrationsbereich anzeigen", - "Mostra i badge nella pagina dettaglio libro del catalogo": "Badges auf der Buchdetailseite im Katalog anzeigen", - "Mostra i badge nella scheda libro dell'area amministrazione": "Badges auf der Buchseite im Administrationsbereich anzeigen", - "Project Gutenberg": "Project Gutenberg", - "Puoi scegliere un mirror suggerito oppure selezionare dominio personalizzato.": "Sie können einen vorgeschlagenen Mirror auswählen oder eine benutzerdefinierte Domain wählen.", - "Puoi usare i mirror suggeriti oppure inserire un dominio custom.": "Sie können die vorgeschlagenen Mirror verwenden oder eine benutzerdefinierte Domain eingeben.", - "Questi siti cambiano dominio spesso. Seleziona un mirror funzionante.": "Diese Seiten ändern ihre Domain häufig. Wählen Sie einen funktionierenden Mirror aus.", - "Scheda libro admin": "Admin-Buchseite", - "Sono accettati anche domini personalizzati; se incolli un URL completo verrà salvato solo l'host.": "Benutzerdefinierte Domains werden ebenfalls akzeptiert; wenn Sie eine vollständige URL einfügen, wird nur der Host gespeichert.", - "Visibilita": "Sichtbarkeit", - "Visibilità": "Sichtbarkeit", - "Z-Library": "Z-Library", - "Errore nel caricamento del file JSON": "Fehler beim Laden der JSON-Datei", - "Errore nel caricamento.": "Fehler beim Laden.", - "Errore nel caricamento. Riprova.": "Fehler beim Laden. Bitte versuchen Sie es erneut.", - "Errore nel download della copertina.": "Fehler beim Herunterladen des Covers.", - "Errore nel parsing del file JSON.": "Fehler beim Parsen der JSON-Datei.", - "Errore nel recupero dati tabella %s": "Fehler beim Abrufen der Tabellendaten für %s", - "Errore nel recupero dei figli": "Fehler beim Abrufen der Unterkategorien", - "Errore nel recupero delle categorie.": "Fehler beim Abrufen der Kategorien.", - "Errore nel recupero delle divisioni.": "Fehler beim Abrufen der Abteilungen.", - "Errore nel recupero delle specifiche.": "Fehler beim Abrufen der Untergruppen.", - "Errore nel recupero delle tabelle": "Fehler beim Abrufen der Tabellen", - "Errore nel recupero struttura tabella %s": "Fehler beim Abrufen der Tabellenstruktur für %s", - "Errore nel rifiuto": "Fehler bei der Ablehnung", - "Errore nel rifiuto della richiesta": "Fehler beim Ablehnen der Anfrage", - "Errore nel ripristino dei colori": "Fehler beim Zurücksetzen der Farben", - "Errore nel ripristino.": "Fehler bei der Wiederherstellung.", - "Errore nel salvataggio del file di traduzione": "Fehler beim Speichern der Übersetzungsdatei", - "Errore nel salvataggio del file route": "Fehler beim Speichern der Route-Datei", - "Errore nel salvataggio del file.": "Fehler beim Speichern der Datei.", - "Errore nel salvataggio del tema": "Fehler beim Speichern des Themes", - "Errore nel salvataggio dell'immagine.": "Fehler beim Speichern des Bildes.", - "Errore nel salvataggio dell'ordine. Ricarica la pagina e riprova.": "Fehler beim Speichern der Reihenfolge. Bitte laden Sie die Seite neu und versuchen Sie es erneut.", - "Errore nell'aggiornamento del template": "Fehler beim Aktualisieren der Vorlage", - "Errore nell'aggiornamento dello stato dell'API key: %s": "Fehler beim Aktualisieren des API-Key-Status: %s", - "Errore nell'aggiornamento:": "Fehler bei der Aktualisierung:", - "Errore nell'aggiornare i preferiti.": "Fehler beim Aktualisieren der Favoriten.", - "Errore nell'approvazione": "Fehler bei der Genehmigung", - "Errore nell'eliminazione dell'API key: %s": "Fehler beim Löschen des API-Keys: %s", - "Errore nell'eliminazione:": "Fehler beim Löschen:", - "Errore nell'operazione:": "Fehler beim Vorgang:", - "Errore nella Verifica dell'Installazione": "Fehler bei der Installationsüberprüfung", - "Errore nella codifica JSON.": "JSON-Kodierungsfehler.", - "Errore nella comunicazione con il server": "Kommunikationsfehler mit dem Server", - "Errore nella conferma del ritiro": "Fehler bei der Abholungsbestätigung", - "Errore nella copia del file: %s": "Fehler beim Kopieren der Datei: %s", - "Errore nella copia:": "Fehler beim Kopieren:", - "Errore nella copia: ": "Fehler beim Kopieren: ", - "Errore nella creazione del genere.": "Fehler beim Erstellen des Genres.", - "Errore nella creazione dell'API key: %s": "Fehler beim Erstellen des API-Keys: %s", - "Errore nella creazione della recensione": "Fehler beim Erstellen der Rezension", - "Errore nella creazione della richiesta di prestito": "Fehler beim Erstellen der Ausleihanfrage", - "Errore nella creazione:": "Fehler beim Erstellen:", - "Errore nella lettura del backup.": "Fehler beim Lesen der Sicherungsdatei.", - "Errore nella lettura del file Dewey esistente.": "Fehler beim Lesen der vorhandenen Dewey-Datei.", - "Errore nella lettura del file.": "Fehler beim Lesen der Datei.", - "Errore nella prenotazione": "Fehler bei der Vormerkung", - "Errore nella prenotazione.": "Fehler bei der Vormerkung.", - "Errore nella query.": "Abfragefehler.", - "Errore nella ricerca": "Suchfehler", - "Errore nella ricerca.": "Fehler bei der Suche.", - "Errore nella richiesta di prestito.": "Fehler bei der Ausleihanfrage.", - "Errore prenotazione": "Vormerkungsfehler", - "Errore preparazione completamento log": "Fehler beim Vorbereiten des Protokollabschlusses", - "Errore preparazione insert migrazione": "Fehler beim Vorbereiten des Migrationseintrags", - "Errore preparazione log aggiornamento": "Fehler beim Vorbereiten des Aktualisierungsprotokolls", - "Errore preparazione query migrazioni": "Fehler beim Vorbereiten der Migrationsabfrage", - "Errore processamento immagine": "Fehler bei der Bildverarbeitung", - "Errore recupero batch migrazioni": "Fehler beim Abrufen des Migrationsbatches", - "Errore recupero risultati migrazioni": "Fehler beim Abrufen der Migrationsergebnisse", - "Errore riassegnazione copia": "Fehler bei der Exemplar-Neuzuweisung", - "Errore riassegnazione copia persa": "Fehler bei der Neuzuweisung des verlorenen Exemplars", - "Errore richiesta prestito": "Fehler bei der Ausleihanfrage", - "Errore salvataggio immagine": "Fehler beim Speichern des Bildes", - "Errore sconosciuto durante il caricamento": "Unbekannter Fehler beim Hochladen", - "Errore suggerimento": "Vorschlagsfehler", - "Errore validazione prestito:": "Fehler bei der Ausleihe-Validierung:", - "Errore verifica tabelle: %s": "Fehler bei der Tabellenüberprüfung: %s", - "Errore!": "Fehler!", - "Errore:": "Fehler:", - "Errore: ": "Fehler: ", - "Errore: Utente non trovato": "Fehler: Benutzer nicht gefunden", - "Errore: la data di scadenza deve essere successiva alla data di prestito.": "Fehler: Das Fälligkeitsdatum muss nach dem Ausleihdatum liegen.", - "Errore: tutti i campi obbligatori devono essere compilati.": "Fehler: Alle Pflichtfelder müssen ausgefüllt werden.", - "Errori Totali": "Gesamtfehler", - "Errori di validazione dopo il merge.": "Validierungsfehler nach dem Zusammenführen.", - "Errori di validazione nel file importato.": "Validierungsfehler in der importierten Datei.", - "Errori di validazione.": "Validierungsfehler.", - "Errori durante l'import": "Importfehler", - "Errori:": "Fehler:", - "Es. Biblioteca Digitale - Migliaia di libri da esplorare": "Z.B. Digitale Bibliothek – Tausende Bücher zum Entdecken", - "Es. Esplora migliaia di libri, prenota online e gestisci i tuoi prestiti.": "Z.B. Entdecken Sie Tausende von Büchern, reservieren Sie online und verwalten Sie Ihre Ausleihen.", - "Es. Italiana, Americana, Francese...": "Z.B. Italienisch, Amerikanisch, Französisch...", - "Es. Italiana, Americana...": "Z.B. Italienische, Amerikanische...", - "Es. Italiana...": "Z.B. Italienisch...", - "Es. La Tua Biblioteca Digitale": "Z.B. Ihre Digitale Bibliothek", - "Es. Milano...": "Z.B. München...", - "Es. Presentazione libro \"Il Nome della Rosa\"": "Z.B. Buchvorstellung \"Der Name der Rose\"", - "Es. Scopri il nostro catalogo digitale con migliaia di libri disponibili per il prestito. Registrati gratuitamente e inizia a leggere oggi stesso.": "Z.B. Entdecken Sie unseren digitalen Katalog mit Tausenden von Büchern, die zur Ausleihe verfügbar sind. Registrieren Sie sich kostenlos und beginnen Sie noch heute zu lesen.", - "Es. Un libro fantastico!": "Z.B. Ein fantastisches Buch!", - "Es. Un libro straordinario!": "Z.B. Ein außergewöhnliches Buch!", - "Es. biblioteca digitale, prestito libri, catalogo online, libri gratis": "Z.B. digitale Bibliothek, Buchausleihe, Online-Katalog, kostenlose Bücher", - "Es. https://tuosito.com": "Z.B. https://ihreseite.com", - "Es. https://tuosito.com/uploads/og-image.jpg": "Z.B. https://ihreseite.com/uploads/og-image.jpg", - "Esauriti tentativi riassegnazione copia": "Neuzuweisungsversuche für Exemplar erschöpft", - "Esci": "Abmelden", - "Esecuzione ogni 30 minuti (consigliato)": "Ausführung alle 30 Minuten (empfohlen)", - "Esecuzione ogni ora (8:00-20:00)": "Ausführung jede Stunde (8:00-20:00)", - "Esegue la rigenerazione ogni giorno alle 02:00 e registra il log in": "Führt die Regenerierung täglich um 02:00 Uhr aus und protokolliert in", - "Esegue la rigenerazione ogni giorno alle 02:00 e registra il log in storage/logs/sitemap.log.": "Führt die Regenerierung täglich um 02:00 Uhr aus und protokolliert in storage/logs/sitemap.log.", - "Esegui": "Ausführen", - "Esegui Manutenzione": "Wartung ausführen", - "Esegui tutte le operazioni di manutenzione": "Alle Wartungsoperationen ausführen", - "Eseguito da": "Ausgeführt von", - "Esempio": "Beispiel", - "Esempio di Chiamata": "Aufrufbeispiel", - "Esempio route inglese:": "Englisches Route-Beispiel:", - "Esempio route italiana:": "Italienisches Route-Beispiel:", - "Esempio:": "Beispiel:", - "Esiste già un altro libro con lo stesso identificatore (ISBN/EAN).": "Es existiert bereits ein anderes Buch mit demselben Identifikator (ISBN/EAN).", - "Esiste già un libro con lo stesso identificatore (ISBN/EAN).": "Es existiert bereits ein Buch mit demselben Identifikator (ISBN/EAN).", - "Esistente": "Vorhanden", - "Esito restituzione": "Rückgabeergebnis", - "Español (ES)": "Spanisch (ES)", - "Esplora Catalogo": "Katalog durchsuchen", - "Esplora catalogo": "Katalog durchsuchen", - "Esplora e gestisci gli autori della biblioteca": "Autoren der Bibliothek durchsuchen und verwalten", - "Esplora e gestisci gli editori della biblioteca": "Verlage der Bibliothek durchsuchen und verwalten", - "Esplora e gestisci gli utenti registrati alla biblioteca": "Registrierte Bibliotheksbenutzer durchsuchen und verwalten", - "Esplora e gestisci la collezione della biblioteca": "Die Bibliothekssammlung durchsuchen und verwalten", - "Esplora i generi principali": "Die Hauptgenres entdecken", - "Esplora il catalogo": "Den Katalog entdecken", - "Esplora il catalogo e scopri nuovi titoli.": "Durchsuchen Sie den Katalog und entdecken Sie neue Titel.", - "Esplora il nostro catalogo digitale": "Entdecken Sie unseren digitalen Katalog", - "Esplora il nostro vasto catalogo di libri, prenota i tuoi titoli preferiti e scopri nuove letture": "Entdecken Sie unseren umfangreichen Buchkatalog, reservieren Sie Ihre Lieblingstitel und entdecken Sie neue Lektüre", - "Esplora il nostro vasto catalogo di libri, prenota i tuoi titoli preferiti e scopri nuove letture. Sistema di prestito moderno e intuitivo con ricerca avanzata e categorie organizzate.": "Entdecken Sie unseren umfangreichen Buchkatalog, reservieren Sie Ihre Lieblingstitel und entdecken Sie neue Lektüre. Modernes und intuitives Ausleihsystem mit erweiterter Suche und übersichtlichen Kategorien.", - "Esplora per Categoria": "Nach Kategorie durchsuchen", - "Espone il catalogo locale via protocollo SRU per altre biblioteche.": "Stellt den lokalen Katalog über das SRU-Protokoll für andere Bibliotheken bereit.", - "Esporta": "Exportieren", - "Esporta CSV": "CSV exportieren", - "Esporta CSV (formato compatibile per import)": "CSV exportieren (kompatibles Format für den Import)", - "Esporta Excel": "Excel exportieren", - "Esporta PDF": "PDF exportieren", - "Esporta Prestiti": "Ausleihen exportieren", - "Esporta selezionati": "Ausgewählte exportieren", - "Esportazione di %d libri filtrati su %d totali": "Export von %d gefilterten Büchern von insgesamt %d", - "Esportazione di %d utenti filtrati su %d totali": "Export von %d gefilterten Benutzern von insgesamt %d", - "Esportazione di tutti i %d libri del catalogo": "Export aller %d Bücher aus dem Katalog", - "Esportazione di tutti i %d utenti": "Export aller %d Benutzer", - "Essenziali:": "Erforderlich:", - "Estensione": "Erweiterung", - "Estensione del file non valida.": "Ungültige Dateierweiterung.", - "Estensioni": "Erweiterungen", - "Estrazione del pacchetto fallita": "Paketentpackung fehlgeschlagen", - "Etichetta": "Etikett", - "Etichette": "Etiketten", - "Etichette interne grandi (Herma 4630, Avery 3490)": "Große interne Etiketten (Herma 4630, Avery 3490)", - "European Article Number (opzionale)": "European Article Number (optional)", - "Eventi": "Veranstaltungen", - "Eventi Recenti": "Aktuelle Veranstaltungen", - "Eventi e Incontri": "Veranstaltungen und Treffen", - "Evento": "Veranstaltung", - "Evento aggiornato con successo!": "Veranstaltung erfolgreich aktualisiert!", - "Evento creato con successo!": "Veranstaltung erfolgreich erstellt!", - "Evento della biblioteca": "Bibliotheksveranstaltung", - "Evento eliminato con successo!": "Veranstaltung erfolgreich gelöscht!", - "Evento non trovato.": "Veranstaltung nicht gefunden.", - "Evento visibile sul sito": "Veranstaltung auf der Website sichtbar", - "Eventuali annotazioni sullo stato del libro...": "Anmerkungen zum Zustand des Buches...", - "Excel": "Excel", - "Export": "Export", - "Export per LibraryThing": "Export für LibraryThing", - "Exporting %d filtered users out of %d total": "Export von %d gefilterten Benutzern von insgesamt %d", - "Exporting all %d users": "Export aller %d Benutzer", - "FAQ": "FAQ", - "FATAL ERROR:": "FATALER FEHLER:", - "Facebook": "Facebook", - "Fallimento": "Fehlschlag", - "Fallito": "Fehlgeschlagen", - "Fatal Error:": "Fataler Fehler:", - "Fatto!": "Fertig!", - "Feature %d": "Funktion %d", - "Feature 1": "Funktion 1", - "Feature 2": "Funktion 2", - "Feature 3": "Funktion 3", - "Feature 4": "Funktion 4", - "Features - Caratteristiche": "Funktionen - Merkmale", - "Femmina": "Weiblich", - "File": "Datei", - "File \"%s\" pronto per l'upload": "Datei \"%s\" bereit zum Hochladen", - "File %s nella directory root": "Datei %s im Stammverzeichnis", - "File .env non trovato": ".env-Datei nicht gefunden", - "File .env:": ".env-Datei:", - "File .htaccess creato": ".htaccess-Datei erstellt", - "File .installed:": ".installed-Datei:", - "File CSV (max 10MB)": "CSV-Datei (max. 10 MB)", - "File CSV non valido: usa \";\" o \",\" come separatore.": "Ungültige CSV-Datei: Verwenden Sie \";\" oder \",\" als Trennzeichen.", - "File CSV vuoto o formato non valido": "Leere CSV-Datei oder ungültiges Format", - "File Dewey esistente non è un JSON valido o è corrotto.": "Die vorhandene Dewey-Datei ist kein gültiges JSON oder ist beschädigt.", - "File Dewey non trovato.": "Dewey-Datei nicht gefunden.", - "File JSON con le traduzioni (opzionale). Puoi caricarlo anche in seguito.": "JSON-Datei mit Übersetzungen (optional). Sie können sie auch später hochladen.", - "File JSON non valido": "Ungültige JSON-Datei", - "File Principale:": "Hauptdatei:", - "File URL": "Datei-URL", - "File ZIP con struttura plugin valida": "ZIP-Datei mit gültiger Plugin-Struktur", - "File ZIP non trovato.": "ZIP-Datei nicht gefunden.", - "File ZIP troppo grande. Dimensione massima: 100 MB.": "ZIP-Datei zu groß. Maximale Größe: 100 MB.", - "File attuale": "Aktuelle Datei", - "File backup non trovato": "Sicherungsdatei nicht gefunden", - "File caricato con successo": "Datei erfolgreich hochgeladen", - "File dati iniziali per la lingua selezionata non trovato: %s": "Anfangsdatendatei für die ausgewählte Sprache nicht gefunden: %s", - "File di Esempio": "Beispieldatei", - "File di Traduzione": "Übersetzungsdatei", - "File di Traduzione Attuale": "Aktuelle Übersetzungsdatei", - "File di Traduzione JSON": "JSON-Übersetzungsdatei", - "File di aggiornamento non valido": "Ungültige Aktualisierungsdatei", - "File di aggiornamento non valido (troppo piccolo)": "Ungültige Aktualisierungsdatei (zu klein)", - "File di log non trovato": "Protokolldatei nicht gefunden", - "File di traduzione non trovato": "Übersetzungsdatei nicht gefunden", - "File esistente (data modifica)": "Vorhandene Datei (Änderungsdatum)", - "File non trovato nell'upload.": "Datei im Upload nicht gefunden.", - "File non valido o corrotto.": "Ungültige oder beschädigte Datei.", - "File plugin.json non trovato nel pacchetto.": "Datei plugin.json nicht im Paket gefunden.", - "File plugin.json non valido.": "Ungültige plugin.json-Datei.", - "File principale PHP specificato in %s": "In %s angegebene PHP-Hauptdatei", - "File principale del plugin non trovato.": "Plugin-Hauptdatei nicht gefunden.", - "File sitemap non trovato": "Sitemap-Datei nicht gefunden", - "File sitemap presente": "Sitemap-Datei vorhanden", - "File troppo grande. Dimensione massima 10MB.": "Datei zu groß. Maximale Größe 10 MB.", - "File troppo grande. Dimensione massima 5MB.": "Datei zu groß. Maximale Größe 5 MB.", - "File vuoto o formato non valido": "Leere Datei oder ungültiges Format", - "File:": "Datei:", - "Filtra": "Filtern", - "Filtra mensole per scaffale": "Regale nach Bücherregal filtern", - "Filtra per Mensola": "Nach Regal filtern", - "Filtra per Scaffale": "Nach Bücherregal filtern", - "Filtra per tipo": "Nach Typ filtern", - "Filtri": "Filter", - "Filtri attivi:": "Aktive Filter:", - "Filtri cancellati": "Filter zurückgesetzt", - "Filtri di Ricerca": "Suchfilter", - "Filtri salvati": "Filter gespeichert", - "Filtro Libro": "Buchfilter", - "Filtro Utente": "Benutzerfilter", - "Filtro genere attivo": "Genrefilter aktiv", - "Filtro attivo": "Aktiver Filter", - "Filtro sottogenere attivo": "Subgenre-Filter aktiv", - "Fine": "Fertig", - "Fine:": "Ende:", - "Fino a quando? (opzionale):": "Bis wann? (optional):", - "Fix applicato": "Fix angewendet", - "Fonte dati:": "Datenquelle:", - "Fonti consultate:": "Abgefragte Quellen:", - "Footer": "Fußzeile", - "Formati supportati: JPG, PNG, GIF, WebP. Dimensione massima: 5MB": "Unterstützte Formate: JPG, PNG, GIF, WebP. Maximale Größe: 5 MB", - "Formati supportati: MP3, M4A, OGG • Dimensione massima: 500 MB": "Unterstützte Formate: MP3, M4A, OGG • Max. Größe: 500 MB", - "Formati supportati: PDF, ePub • Dimensione massima: 100 MB": "Unterstützte Formate: PDF, ePub • Max. Größe: 100 MB", - "Formato": "Format", - "Formato CSV Dettagliato": "Detailliertes CSV-Format", - "Formato Etichetta": "Etikettenformat", - "Formato File JSON": "JSON-Dateiformat", - "Formato ISBN non valido.": "Ungültiges ISBN-Format.", - "Formato JSON non valido": "Ungültiges JSON-Format", - "Formato biblioteche scolastiche (compatibile A4)": "Schulbibliotheksformat (A4-kompatibel)", - "Formato biblioteche scolastiche (compatibili A4)": "Schulbibliotheksformat (A4-kompatibel)", - "Formato codice non valido": "Ungültiges Code-Format", - "Formato codice non valido. Usa formato: 599 oppure 599.9 oppure 599.93": "Ungültiges Code-Format. Format verwenden: 599 oder 599.9 oder 599.93", - "Formato codice non valido. Usa: XXX.Y (es. 599.1)": "Ungültiges Code-Format. Verwenden Sie: XXX.Y (z.B. 599.1)", - "Formato dati non valido.": "Ungültiges Datenformat.", - "Formato immagine non supportato": "Nicht unterstütztes Bildformat", - "Formato immagine non supportato. Usa JPG, PNG o WebP.": "Bildformat nicht unterstützt. Verwenden Sie JPG, PNG oder WebP.", - "Formato impostazioni non valido.": "Ungültiges Einstellungsformat.", - "Formato orizzontale per dorso": "Horizontales Format für Buchrücken", - "Formato quadrato Tirrenia": "Tirrenia-Quadratformat", - "Formato richiesta non valido": "Ungültiges Anfrageformat", - "Formato: CSV con separatore %s • Max 10MB": "Format: CSV mit Trennzeichen %s • Max. 10 MB", - "Formato: xx_XX (es. it_IT, en_US, es_ES)": "Format: xx_XX (z.B. it_IT, en_US, es_ES)", - "Forza HTTPS": "HTTPS erzwingen", - "Français (FR)": "Französisch (FR)", - "Frecce ↑ ↓ per il volume": "↑ ↓ Pfeiltasten für Lautstärke", - "From Email": "Absender-E-Mail", - "From Name": "Absendername", - "Funzionamento automatico:": "Automatischer Betrieb:", - "Fuori Catalogo": "Nicht im Katalog", - "Genera automaticamente": "Automatisch generieren", - "Generato il": "Generiert am", - "Generato il:": "Generiert am:", - "Generazione CSV in corso...": "CSV wird generiert...", - "Generazione...": "Wird generiert...", - "Genere": "Genre", - "Genere creato con successo!": "Genre erfolgreich erstellt!", - "Genere letterario": "Literarisches Genre", - "Genere letterario del libro": "Literarisches Genre des Buches", - "Genere padre (opz.)": "Übergeordnetes Genre (opt.)", - "Genere principale": "Hauptgenre", - "Genere:": "Genre:", - "Generi": "Genres", - "Generi Principali": "Hauptgenres", - "Generi e sottogeneri": "Genres und Subgenres", - "Gestione Autori": "Autorenverwaltung", - "Gestione Biblioteca": "Bibliotheksverwaltung", - "Gestione Collocazione": "Standortverwaltung", - "Gestione Contenuti (CMS)": "Inhaltsverwaltung (CMS)", - "Gestione Editori": "Verlagsverwaltung", - "Gestione Eventi": "Veranstaltungsverwaltung", - "Gestione Generi": "Genreverwaltung", - "Gestione Generi e Sottogeneri": "Genre- und Subgenre-Verwaltung", - "Gestione JavaScript Personalizzati basata su Cookie": "Cookie-basierte benutzerdefinierte JavaScript-Verwaltung", - "Gestione Libri": "Bücherverwaltung", - "Gestione Lingue": "Sprachverwaltung", - "Gestione Multilingua": "Mehrsprachigkeitsverwaltung", - "Gestione Plugin": "Plugin-Verwaltung", - "Gestione Plugin LibraryThing": "LibraryThing-Plugin-Verwaltung", - "Gestione Prenotazioni": "Vormerkungsverwaltung", - "Gestione Prestiti": "Ausleihverwaltung", - "Gestione Recensioni": "Rezensionsverwaltung", - "Gestione Temi": "Theme-Verwaltung", - "Gestione Utenti": "Benutzerverwaltung", - "Gestione autori": "Autorenverwaltung", - "Gestione classificazione Dewey: seed e statistiche": "Dewey-Klassifikationsverwaltung: Seed und Statistiken", - "Gestione collezione": "Sammlungsverwaltung", - "Gestione prestiti": "Ausleihverwaltung", - "Gestione recensioni": "Rezensionsverwaltung", - "Gestione utenti": "Benutzerverwaltung", - "Gestisci": "Verwalten", - "Gestisci Eventi": "Veranstaltungen verwalten", - "Gestisci Restituzione": "Rückgabe verwalten", - "Gestisci gli aggiornamenti dell'applicazione": "Anwendungsupdates verwalten", - "Gestisci gli autori della collezione": "Autoren der Sammlung verwalten", - "Gestisci gli eventi della biblioteca: crea, modifica ed elimina eventi con immagini e descrizioni": "Bibliotheksveranstaltungen verwalten: Erstellen, bearbeiten und löschen Sie Veranstaltungen mit Bildern und Beschreibungen", - "Gestisci i dispositivi su cui hai effettuato l'accesso con 'Ricordami'. Puoi disconnetterti da singoli dispositivi o da tutti contemporaneamente.": "Verwalten Sie die Geräte, auf denen Sie sich mit 'Angemeldet bleiben' angemeldet haben. Sie können sich von einzelnen Geräten oder von allen gleichzeitig abmelden.", - "Gestisci i generi letterari": "Literarische Genres verwalten", - "Gestisci i prestiti attivi e storici": "Aktive und historische Ausleihen verwalten", - "Gestisci i tuoi prestiti, esplora il catalogo e scopri nuovi titoli.": "Verwalten Sie Ihre Ausleihen, erkunden Sie den Katalog und entdecken Sie neue Titel.", - "Gestisci i tuoi titoli preferiti, scopri quando tornano disponibili e accedi rapidamente ai dettagli del libro.": "Verwalten Sie Ihre Lieblingstitel, erfahren Sie, wann sie wieder verfügbar sind, und greifen Sie schnell auf die Buchdetails zu.", - "Gestisci il contenuto della pagina Chi Siamo con testo e immagine": "Verwalten Sie den Inhalt der Über-uns-Seite mit Text und Bild", - "Gestisci il contenuto della pagina Chi Siamo con testo e immagine personalizzati": "Verwalten Sie den Inhalt der Über-uns-Seite mit benutzerdefiniertem Text und Bild", - "Gestisci l'accesso all'API per cercare libri via EAN, ISBN e autore": "API-Zugriff zur Buchsuche über EAN, ISBN und Autor verwalten", - "Gestisci la collocazione fisica dei libri": "Physischen Standort der Bücher verwalten", - "Gestisci la visibilità delle categorie di cookie nel banner. I cookie essenziali sono sempre visibili e obbligatori.": "Verwalten Sie die Sichtbarkeit der Cookie-Kategorien im Banner. Essentielle Cookies sind immer sichtbar und erforderlich.", - "Gestisci le case editrici": "Verlage verwalten", - "Gestisci le classificazioni Dewey per italiano e inglese": "Dewey-Klassifikationen für Italienisch und Englisch verwalten", - "Gestisci le estensioni dell'applicazione": "Anwendungserweiterungen verwalten", - "Gestisci preferenze cookie": "Cookie-Einstellungen verwalten", - "Gestisci restituzione": "Rückgabe verwalten", - "Gestisci tutte": "Alle verwalten", - "Gestisci tutti": "Alle verwalten", - "Gestito da": "Verwaltet von", - "Giorni di preavviso per scadenza prestito": "Tage der Vorankündigung vor Ablauf der Ausleihe", - "Giorni per ritirare un prestito approvato": "Tage zur Abholung einer genehmigten Ausleihe", - "Già Installato": "Bereits installiert", - "Già presenti o senza ISBN:": "Bereits vorhanden oder ohne ISBN:", - "Già presenti:": "Bereits vorhanden:", - "Già recensito": "Bereits rezensiert", - "Gli amministratori non richiedono tessera e riceveranno un invito per impostare la password.": "Administratoren benötigen keinen Bibliotheksausweis und erhalten eine Einladung zur Passworteinrichtung.", - "Gli appuntamenti della biblioteca": "Bibliotheksveranstaltungen", - "Gli import CSV e LibraryThing verranno visualizzati qui": "CSV- und LibraryThing-Importe werden hier angezeigt", - "Gli import vengono tracciati automaticamente durante l'elaborazione": "Importe werden während der Verarbeitung automatisch nachverfolgt", - "Gli indici migliorano significativamente le performance delle query, specialmente su tabelle con molti record. Le installazioni recenti li includono già, ma le installazioni più vecchie potrebbero non averli.": "Indizes verbessern die Abfrageleistung erheblich, insbesondere bei Tabellen mit vielen Datensätzen. Neuere Installationen enthalten sie bereits, ältere Installationen möglicherweise nicht.", - "Gli script JavaScript sono divisi in 3 categorie in base alla tipologia di cookie:": "JavaScript-Skripte sind in 3 Kategorien nach Cookie-Typ unterteilt:", - "Gli utenti possono selezionare questa lingua": "Benutzer können diese Sprache auswählen", - "Globale": "Global", - "Google Books API": "Google Books API", - "Google Books API collegata": "Google Books API verbunden", - "Google Books Configurato": "Google Books konfiguriert", - "Google reCAPTCHA v3": "Google reCAPTCHA v3", - "Grazie per aver scelto Pinakes!": "Vielen Dank, dass Sie sich für Pinakes entschieden haben!", - "Gruppo": "Gruppe", - "Guida": "Anleitung", - "Guida alla Gestione Lingue": "Anleitung zur Sprachverwaltung", - "Guida alle Route": "Route-Anleitung", - "HTTP Strict Transport Security forza i browser a usare solo connessioni HTTPS per 1 anno (raccomandato per produzione con SSL valido).": "HTTP Strict Transport Security zwingt Browser, nur HTTPS-Verbindungen für 1 Jahr zu verwenden (empfohlen für Produktion mit gültigem SSL).", - "Hai aggiunto %s copie a \"%s\"": "Sie haben %s Exemplare zu \"%s\" hinzugefügt", - "Hai già un account?": "Haben Sie bereits ein Konto?", - "Hai già un prestito attivo o in attesa per questo libro": "Sie haben bereits eine aktive oder ausstehende Ausleihe für dieses Buch", - "Hai già una prenotazione attiva per questo libro.": "Sie haben bereits eine aktive Vormerkung für dieses Buch.", - "Hai già una richiesta di prestito in attesa per questo libro": "Sie haben bereits eine ausstehende Ausleihanfrage für dieses Buch", - "Hai libri che dovevano essere restituiti. Restituiscili al più presto per evitare sanzioni.": "Sie haben Bücher, die hätten zurückgegeben werden müssen. Bitte geben Sie diese schnellstmöglich zurück, um Mahngebühren zu vermeiden.", - "Hai modifiche non salvate che andranno perse. Continuare?": "Sie haben nicht gespeicherte Änderungen, die verloren gehen. Fortfahren?", - "Hai modifiche non salvate. I dati attuali verranno sostituiti.": "Sie haben nicht gespeicherte Änderungen. Die aktuellen Daten werden ersetzt.", - "Hai modifiche non salvate. Vuoi continuare e perderle?": "Sie haben nicht gespeicherte Änderungen. Möchten Sie fortfahren und diese verlieren?", - "Header HTTP (consigliato):": "HTTP-Header (empfohlen):", - "Heading 1": "Überschrift 1", - "Heading 2": "Überschrift 2", - "Heading 3": "Überschrift 3", - "Heading 4": "Überschrift 4", - "Heading 5": "Überschrift 5", - "Heading 6": "Überschrift 6", - "Hero - Testata principale": "Hero - Hauptbereich", - "Home": "Startseite", - "Homepage": "Startseite", - "Host": "Host", - "Host Database": "Datenbank-Host", - "I Cookie Essenziali sono sempre visibili e non possono essere disabilitati poiché necessari per il funzionamento del sito.": "Essentielle Cookies sind immer sichtbar und können nicht deaktiviert werden, da sie für den Betrieb der Website erforderlich sind.", - "I Miei Preferiti": "Meine Favoriten", - "I backup sono salvati in:": "Backups werden gespeichert in:", - "I campi con * sono obbligatori": "Felder mit * sind Pflichtfelder", - "I campi null indicano dati non disponibili": "Null-Felder zeigen nicht verfügbare Daten an", - "I contenitori fisici principali dove sono organizzati i libri": "Die physischen Hauptbehälter, in denen die Bücher organisiert sind", - "I dati attuali verranno sostituiti.": "Die aktuellen Daten werden ersetzt.", - "I dati devono essere un array non vuoto.": "Die Daten müssen ein nicht leeres Array sein.", - "I dati provengono dal file JSON, nessun seeding necessario.": "Die Daten stammen aus der JSON-Datei, kein Seeding erforderlich.", - "I doppioni (per ID, ISBN13 o EAN) vengono aggiornati senza modificare le copie fisiche": "Duplikate (nach ID, ISBN13 oder EAN) werden aktualisiert, ohne die physischen Exemplare zu ändern", - "I filtri correnti sono stati salvati nell'URL": "Die aktuellen Filter wurden in der URL gespeichert", - "I filtri vengono applicati automaticamente mentre digiti": "Filter werden automatisch beim Tippen angewendet", - "I libri degli altri autori verranno assegnati a questo": "Bücher der anderen Autoren werden diesem zugeordnet", - "I libri degli altri editori verranno assegnati a questo": "Bücher der anderen Verlage werden diesem zugeordnet", - "I livelli (ripiani) all'interno di ogni scaffale": "Die Ebenen (Regalböden) innerhalb jedes Bücherregals", - "I log vengono conservati per 90 giorni per conformità GDPR": "Protokolle werden 90 Tage lang gemäß DSGVO aufbewahrt", - "I miei preferiti": "Meine Favoriten", - "I tuoi preferiti": "Ihre Favoriten", - "ID": "ID", - "ID Editore": "Verlags-ID", - "ID Prestito": "Ausleih-ID", - "ID Prestito:": "Ausleih-ID:", - "ID autori non validi": "Ungültige Autoren-IDs", - "ID editori non validi": "Ungültige Verlags-IDs", - "ID genere non valido": "Ungültige Genre-ID", - "ID import mancante": "Fehlende Import-ID", - "ID libri non validi": "Ungültige Buch-IDs", - "ID libro non valido": "Ungültige Buch-ID", - "ID libro:": "Buch-ID:", - "ID prestito non valido": "Ungültige Ausleih-ID", - "ID sessione non valido": "Ungültige Sitzungs-ID", - "ID utente:": "Benutzer-ID:", - "ID:": "ID:", - "IN RITARDO": "ÜBERFÄLLIG", - "IP": "IP", - "IP Address": "IP-Adresse", - "ISBN": "ISBN", - "ISBN 10": "ISBN 10", - "ISBN 13": "ISBN 13", - "ISBN Mancante": "Fehlende ISBN", - "ISBN a 13 cifre (univoco)": "13-stellige ISBN (eindeutig)", - "ISBN non trovato nelle fonti disponibili.": "ISBN in den verfügbaren Quellen nicht gefunden.", - "ISBN non trovato. Fonti consultate: %s": "ISBN nicht gefunden. Abgefragte Quellen: %s", - "ISBN non valido. Specifica 10 o 13 cifre (eventualmente con X finale).": "Ungültige ISBN. Bitte geben Sie 10 oder 13 Ziffern an (X am Ende erlaubt).", - "ISBN o EAN...": "ISBN oder EAN...", - "ISBN-13:": "ISBN-13:", - "ISBN10": "ISBN10", - "ISBN10 Non Valido": "Ungültige ISBN10", - "ISBN10 deve contenere esattamente 10 caratteri (9 cifre + 1 cifra o X).": "ISBN10 muss genau 10 Zeichen enthalten (9 Ziffern + 1 Ziffer oder X).", - "ISBN10 o ISBN13": "ISBN10 oder ISBN13", - "ISBN13": "ISBN13", - "ISBN13 Non Valido": "Ungültige ISBN13", - "ISBN13 deve contenere esattamente 13 cifre.": "ISBN13 muss genau 13 Ziffern enthalten.", - "ISBN13: %s": "ISBN13: %s", - "ISBN:": "ISBN:", - "IT": "IT", - "Icona FontAwesome": "FontAwesome-Symbol", - "Identità": "Identität", - "Identità Applicazione": "Anwendungsidentität", - "Ieri": "Gestern", - "Ieri alle %s": "Gestern um %s", - "Il Mio Profilo": "Mein Profil", - "Il campo è obbligatorio": "Dieses Feld ist erforderlich", - "Il catalogo SBN (OPAC Nazionale Italiano) è già integrato e viene interrogato automaticamente durante l'importazione ISBN. Non è necessario aggiungerlo come server esterno.": "Der SBN-Katalog (Italienischer National-OPAC) ist bereits integriert und wird beim ISBN-Import automatisch abgefragt. Es ist nicht nötig, ihn als externen Server hinzuzufügen.", - "Il codice %s ha un formato non valido.": "Code %s hat ein ungültiges Format.", - "Il codice %s ha un livello non valido (deve essere 1-7).": "Code %s hat eine ungültige Ebene (muss 1-7 sein).", - "Il codice %s ha un nome non valido (minimo 2 caratteri).": "Code %s hat einen ungültigen Namen (mindestens 2 Zeichen).", - "Il codice %s non è un figlio valido di %s.": "Code %s ist kein gültiges Unterelement von %s.", - "Il codice %s è duplicato.": "Code %s ist doppelt vorhanden.", - "Il codice deve iniziare con le stesse tre cifre della classe principale": "Der Code muss mit denselben drei Ziffern der Hauptklasse beginnen", - "Il codice lingua non può essere modificato dopo la creazione.": "Der Sprachcode kann nach der Erstellung nicht mehr geändert werden.", - "Il codice lingua è obbligatorio (es. it_IT, en_US)": "Der Sprachcode ist erforderlich (z.B. it_IT, en_US)", - "Il codice scaffale \"%s\" esiste già. Usa un codice diverso.": "Der Regalcode \"%s\" existiert bereits. Verwenden Sie einen anderen Code.", - "Il codice tessera sarà generato automaticamente (formato: ADMIN-YYYYMMDD-XXX).": "Der Ausweiscode wird automatisch generiert (Format: ADMIN-JJJJMMTT-XXX).", - "Il codice verrà inserito in un tag": "Der Code wird in einem Tag eingefügt", - "Il codice verrà inserito in un tag ": "Der Code wird in einem -Tags ein", - "Il cron utilizza gli stessi permessi dell'utente di sistema che lo esegue": "Cron verwendet dieselben Berechtigungen wie der ausführende Systembenutzer", - "Il database '%s' non è vuoto. Deve essere un database vuoto.": "Die Datenbank '%s' ist nicht leer. Es muss eine leere Datenbank sein.", - "Il database deve essere vuoto.": "Die Datenbank muss leer sein.", - "Il database è coerente e non sono stati rilevati problemi.": "Die Datenbank ist konsistent und es wurden keine Probleme festgestellt.", - "Il database è già ottimizzato!": "Die Datenbank ist bereits optimiert!", - "Il database è stato installato, ma mancano le librerie PHP necessarie per eseguire l'applicazione.": "Die Datenbank wurde installiert, aber die zum Betrieb der Anwendung erforderlichen PHP-Bibliotheken fehlen.", - "Il download dovrebbe iniziare automaticamente": "Der Download sollte automatisch beginnen", - "Il file": "Die Datei", - "Il file JSON deve contenere coppie chiave-valore:": "Die JSON-Datei muss Schlüssel-Wert-Paare enthalten:", - "Il file JSON non è valido:": "Die JSON-Datei ist ungültig:", - "Il file deve avere estensione .csv": "Die Datei muss die Erweiterung .csv haben", - "Il file deve avere estensione .tsv, .csv o .txt": "Die Datei muss die Erweiterung .tsv, .csv oder .txt haben", - "Il file deve contenere coppie chiave (italiano) - valore (traduzione).": "Die Datei muss Schlüssel (Italienisch) - Wert (Übersetzung) Paare enthalten.", - "Il file deve essere un JSON valido": "Die Datei muss gültiges JSON sein", - "Il file generato si trova in": "Die generierte Datei befindet sich in", - "Il file generato si trova in public/sitemap.xml": "Die generierte Datei befindet sich unter public/sitemap.xml", - "Il file non sembra essere in formato LibraryThing. Colonne richieste: Book Id, Title, Primary Author, ISBNs": "Die Datei scheint nicht im LibraryThing-Format zu sein. Erforderliche Spalten: Book Id, Title, Primary Author, ISBNs", - "Il file supera la dimensione massima consentita": "Die Datei überschreitet die maximal zulässige Größe", - "Il file supera la dimensione massima di %s MB": "Die Datei überschreitet die maximale Größe von %s MB", - "Il formato scelto verrà utilizzato per generare i PDF delle etichette con codice a barre.": "Das gewählte Format wird zur Erstellung der Etiketten-PDFs mit Barcode verwendet.", - "Il formato selezionato verrà applicato a tutte le etichette generate dal sistema.": "Das ausgewählte Format wird auf alle vom System generierten Etiketten angewendet.", - "Il libro selezionato è già in prestito. Seleziona un altro libro.": "Das ausgewählte Buch ist bereits ausgeliehen. Wählen Sie ein anderes Buch aus.", - "Il libro viene consegnato subito all'utente. Se deselezionato, il prestito rimarrà in stato 'Da ritirare' fino alla conferma del ritiro.": "Das Buch wird dem Benutzer sofort übergeben. Wenn deaktiviert, bleibt die Ausleihe im Status 'Zur Abholung bereit', bis die Abholung bestätigt wird.", - "Il link di verifica email è scaduto o non valido. Registrati nuovamente per ricevere un nuovo link.": "Der E-Mail-Bestätigungslink ist abgelaufen oder ungültig. Bitte registrieren Sie sich erneut, um einen neuen Link zu erhalten.", - "Il link di verifica non è valido. Assicurati di aver copiato l'intero link dall'email.": "Der Bestätigungslink ist ungültig. Stellen Sie sicher, dass Sie den vollständigen Link aus der E-Mail kopiert haben.", - "Il logo verrà ridimensionato automaticamente": "Das Logo wird automatisch angepasst", - "Il mio profilo": "Mein Profil", - "Il nome del genere è obbligatorio.": "Der Genrename ist erforderlich.", - "Il nome dell'": "Der Name des/der", - "Il nome dell'API key è obbligatorio.": "Der Name des API-Schlüssels ist erforderlich.", - "Il nome dell'autore è obbligatorio.": "Der Autorenname ist erforderlich.", - "Il nome dell'editore è obbligatorio.": "Der Verlagsname ist erforderlich.", - "Il nome della rosa": "Der Name der Rose", - "Il nome inglese è obbligatorio": "Der englische Name ist erforderlich", - "Il nome inglese è obbligatorio (es. Italian, English)": "Der englische Name ist erforderlich (z.B. Italian, English)", - "Il nome nativo è obbligatorio": "Der Muttersprachenname ist erforderlich", - "Il nome nativo è obbligatorio (es. Italiano, English)": "Der Muttersprachenname ist erforderlich (z.B. Italiano, English)", - "Il nostro team è stato notificato e sta lavorando per risolvere il problema.": "Unser Team wurde benachrichtigt und arbeitet an der Lösung des Problems.", - "Il pacchetto contiene percorsi non validi.": "Das Paket enthält ungültige Pfade.", - "Il pacchetto non contiene file validi.": "Das Paket enthält keine gültigen Dateien.", - "Il plugin è attualmente installato e funzionante.": "Das Plugin ist derzeit installiert und funktioniert.", - "Il prestito è stato approvato con successo.": "Die Ausleihe wurde erfolgreich genehmigt.", - "Il prestito è stato rifiutato.": "Die Ausleihe wurde abgelehnt.", - "Il server ha restituito una risposta non valida. Controlla i log per dettagli.": "Der Server hat eine ungültige Antwort zurückgegeben. Überprüfen Sie die Protokolle für Details.", - "Il sistema creerà automaticamente libri, autori ed editori": "Das System erstellt automatisch Bücher, Autoren und Verlage", - "Il sistema di aggiornamento è pronto.": "Das Aktualisierungssystem ist bereit.", - "Il sistema include un cron job che gestisce automaticamente:": "Das System beinhaltet einen Cron-Job, der automatisch verwaltet:", - "Il sistema invierà automaticamente una email di promemoria agli utenti prima della scadenza del prestito. Il valore predefinito è 3 giorni.": "Das System sendet automatisch eine Erinnerungs-E-Mail an die Benutzer vor Ablauf der Ausleihe. Der Standardwert beträgt 3 Tage.", - "Il sito web deve essere un URL valido (es. https://www.esempio.com).": "Die Website muss eine gültige URL sein (z.B. https://www.beispiel.de).", - "Il sito web deve essere un URL valido.": "Die Website muss eine gültige URL sein.", - "Il termine per il ritiro è scaduto": "Die Abholfrist ist abgelaufen", - "Il termine per il ritiro è scaduto. Vuoi annullare questo prestito?": "Die Abholfrist ist abgelaufen. Möchten Sie diese Ausleihe stornieren?", - "Il titolo del libro è obbligatorio.": "Der Buchtitel ist erforderlich.", - "Il titolo principale della pagina": "Der Haupttitel der Seite", - "Il titolo verrà utilizzato anche per generare l'URL della pagina": "Der Titel wird auch zur Generierung der Seiten-URL verwendet", - "Il titolo è obbligatorio.": "Der Titel ist erforderlich.", - "Il tuo account è in attesa di approvazione. Riceverai un'email quando sarà attivato": "Ihr Konto wartet auf Freigabe. Sie erhalten eine E-Mail, wenn es aktiviert wird", - "Il tuo account è stato sospeso. Contatta l'amministratore per maggiori informazioni": "Ihr Konto wurde gesperrt. Wenden Sie sich an den Administrator für weitere Informationen", - "Il tuo browser non supporta la riproduzione audio.": "Ihr Browser unterstützt keine Audiowiedergabe.", - "Il tuo sistema Pinakes per catalogare, gestire e condividere la tua collezione libraria.": "Ihr Pinakes-System zum Katalogisieren, Verwalten und Teilen Ihrer Buchsammlung.", - "Illustratore": "Illustrator", - "Curatore": "Kurator", - "Nome del curatore dell'opera (se applicabile)": "Name des Kurators (falls zutreffend)", - "Immagine": "Bild", - "Immagine Caricata!": "Bild hochgeladen!", - "Immagine Open Graph": "Open-Graph-Bild", - "Immagine Twitter": "Twitter-Bild", - "Immagine attuale": "Aktuelles Bild", - "Immagine di copertina della pagina (opzionale)": "Seitentitelbild (optional)", - "Immagine di sfondo Hero": "Hero-Hintergrundbild", - "Immagine in Evidenza": "Hervorgehobenes Bild", - "Immagine mostrata quando condividi la pagina su social media (Facebook, Twitter, LinkedIn). Se vuoto, usa l'immagine hero di sfondo. Dimensioni consigliate: 1200x630px (rapporto 1.91:1).": "Bild, das beim Teilen der Seite in sozialen Medien angezeigt wird (Facebook, Twitter, LinkedIn). Wenn leer, wird das Hero-Hintergrundbild verwendet. Empfohlene Größe: 1200x630px (Verhältnis 1,91:1).", - "Immagine mostrata quando condividi su social. Dimensioni consigliate: 1200x630px (rapporto 1.91:1). Se vuoto, usa l'immagine hero di sfondo.": "Bild, das beim Teilen in sozialen Medien angezeigt wird. Empfohlene Größe: 1200x630px (Verhältnis 1,91:1). Wenn leer, wird das Hero-Hintergrundbild verwendet.", - "Immagine non valida": "Ungültiges Bild", - "Immagine per Twitter/X. Dimensioni consigliate: 1200x675px o 1200x1200px. Se vuoto, usa l'immagine Open Graph.": "Bild für Twitter/X. Empfohlene Abmessungen: 1200x675px oder 1200x1200px. Wenn leer, wird das Open Graph-Bild verwendet.", - "Immagini JPG, PNG o WebP (max 5MB)": "JPG-, PNG- oder WebP-Bilder (max. 5 MB)", - "Import": "Import", - "Import CSV": "CSV-Import", - "Import CSV Standard": "Standard-CSV-Import", - "Import LibraryThing": "LibraryThing-Import", - "Import Libri da CSV": "Bücher aus CSV importieren", - "Import Massivo Libri": "Massenbuchimport", - "Import completato: %d libri nuovi, %d libri aggiornati, %d autori creati, %d editori creati": "Import abgeschlossen: %d neue Bücher, %d aktualisierte Bücher, %d Autoren erstellt, %d Verlage erstellt", - "Import da LibraryThing": "Import aus LibraryThing", - "Import dati iniziali...": "Importiere Anfangsdaten...", - "Import in corso...": "Import läuft...", - "Import massivo da CSV": "Massenimport aus CSV", - "Import schema in corso...": "Schema wird importiert...", - "Import trigger...": "Trigger werden importiert...", - "Importa": "Importieren", - "Importa Dati": "Daten importieren", - "Importa Libri": "Bücher importieren", - "Importa da ISBN": "Aus ISBN importieren", - "Importa i tuoi libri esportati da LibraryThing.com (formato TSV)": "Importieren Sie Ihre von LibraryThing.com exportierten Bücher (TSV-Format)", - "Importante:": "Wichtig:", - "Importati": "Importiert", - "Importato": "Importiert", - "Importato con successo. %d voci totali.": "Erfolgreich importiert. %d Einträge insgesamt.", - "Importazione completata con successo!": "Import erfolgreich abgeschlossen!", - "Importazione in corso...": "Import läuft...", - "Importazione libro": "Buch wird importiert", - "Importazione...": "Importiere...", - "Impossibile acquisire il lock. Riprova tra qualche secondo.": "Sperre kann nicht erworben werden. Bitte versuchen Sie es in einigen Sekunden erneut.", - "Impossibile aggiornare l'utente. Riprova più tardi.": "Benutzer kann nicht aktualisiert werden. Bitte versuchen Sie es später erneut.", - "Impossibile aggiornare la chiave Google Books.": "Der Google-Books-Schlüssel konnte nicht aktualisiert werden.", - "Impossibile aggiornare la posizione automatica": "Die automatische Position konnte nicht aktualisiert werden", - "Impossibile aggiornare le copie.": "Die Exemplare konnten nicht aktualisiert werden.", - "Impossibile approvare la recensione": "Die Rezension konnte nicht genehmigt werden", - "Impossibile aprire file di backup per scrittura": "Backup-Datei konnte nicht zum Schreiben geöffnet werden", - "Impossibile aprire il file": "Datei kann nicht geöffnet werden", - "Impossibile aprire il file CSV": "Die CSV-Datei konnte nicht geöffnet werden", - "Impossibile aprire il file ZIP.": "Die ZIP-Datei konnte nicht geöffnet werden.", - "Impossibile archiviare il messaggio.": "Die Nachricht konnte nicht archiviert werden.", - "Impossibile caricare configurazione database": "Datenbankkonfiguration kann nicht geladen werden", - "Impossibile caricare gli editori. Controlla la console per i dettagli.": "Verlage konnten nicht geladen werden. Überprüfen Sie die Konsole für Details.", - "Impossibile caricare i libri. Controlla la console per i dettagli.": "Bücher konnten nicht geladen werden. Überprüfen Sie die Konsole für Details.", - "Impossibile completare l'operazione. Riprova più tardi.": "Der Vorgang konnte nicht abgeschlossen werden. Bitte versuchen Sie es später erneut.", - "Impossibile comunicare con il server. Riprova più tardi.": "Kommunikation mit dem Server nicht möglich. Bitte versuchen Sie es später erneut.", - "Impossibile configurare autocomplete: elementi mancanti": "Autovervollständigung konnte nicht konfiguriert werden: fehlende Elemente", - "Impossibile connettersi a GitHub": "Verbindung zu GitHub konnte nicht hergestellt werden", - "Impossibile contattare il servizio di scraping. Riprova più tardi.": "Der Scraping-Dienst konnte nicht kontaktiert werden. Bitte versuchen Sie es später erneut.", - "Impossibile creare directory di backup": "Backup-Verzeichnis konnte nicht erstellt werden", - "Impossibile creare directory di backup applicazione": "Anwendungs-Backup-Verzeichnis konnte nicht erstellt werden", - "Impossibile creare directory di backup: %s": "Backup-Verzeichnis konnte nicht erstellt werden: %s", - "Impossibile creare directory temporanea": "Temporäres Verzeichnis konnte nicht erstellt werden", - "Impossibile creare directory: %s": "Verzeichnis konnte nicht erstellt werden: %s", - "Impossibile creare il file .env. Verifica i permessi.": "Die .env-Datei konnte nicht erstellt werden. Überprüfen Sie die Berechtigungen.", - "Impossibile creare il file di lock per l'aggiornamento": "Aktualisierungs-Lock-Datei konnte nicht erstellt werden", - "Impossibile creare la cartella di upload.": "Das Upload-Verzeichnis konnte nicht erstellt werden.", - "Impossibile creare la directory del plugin.": "Das Plugin-Verzeichnis konnte nicht erstellt werden.", - "Impossibile creare la mensola. Riprova più tardi.": "Regal kann nicht erstellt werden. Bitte versuchen Sie es später erneut.", - "Impossibile creare la prenotazione": "Die Vormerkung konnte nicht erstellt werden", - "Impossibile creare la struttura del plugin.": "Die Plugin-Struktur konnte nicht erstellt werden.", - "Impossibile creare lo scaffale. Riprova più tardi.": "Schrank kann nicht erstellt werden. Bitte versuchen Sie es später erneut.", - "Impossibile creare lock file": "Lock-Datei konnte nicht erstellt werden", - "Impossibile determinare l'ID del plugin Open Library.": "Die ID des Open Library-Plugins konnte nicht ermittelt werden.", - "Impossibile eliminare il backup": "Backup konnte nicht gelöscht werden", - "Impossibile eliminare il file di manutenzione": "Die Wartungsdatei konnte nicht gelöscht werden", - "Impossibile eliminare il libro: ci sono prestiti o prenotazioni attive. Termina prima i prestiti/prenotazioni.": "Buch kann nicht gelöscht werden: Es gibt aktive Ausleihen oder Vormerkungen. Beenden Sie zuerst die Ausleihen/Vormerkungen.", - "Impossibile eliminare il messaggio.": "Die Nachricht konnte nicht gelöscht werden.", - "Impossibile eliminare l'autore: sono presenti libri associati.": "Der Autor kann nicht gelöscht werden: Es sind zugehörige Bücher vorhanden.", - "Impossibile eliminare l'editore: sono presenti libri associati.": "Der Verlag kann nicht gelöscht werden: Es sind zugehörige Bücher vorhanden.", - "Impossibile eliminare l'installer:": "Der Installer kann nicht gelöscht werden:", - "Impossibile eliminare l'installer: devi prima installare le dipendenze PHP con": "Der Installer kann nicht gelöscht werden: Sie müssen zuerst die PHP-Abhängigkeiten installieren mit", - "Impossibile eliminare la notifica.": "Die Benachrichtigung konnte nicht gelöscht werden.", - "Impossibile eliminare la recensione": "Rezension kann nicht gelöscht werden", - "Impossibile eliminare una copia attualmente in prestito.": "Ein derzeit ausgeliehenes Exemplar kann nicht gelöscht werden.", - "Impossibile eliminare: alcuni editori hanno libri associati": "Löschen nicht möglich: Einige Verlage haben zugeordnete Bücher", - "Impossibile eliminare: alcuni libri hanno prestiti attivi": "Löschen nicht möglich: Einige Bücher haben aktive Ausleihen", - "Impossibile eliminare: la mensola contiene libri": "Löschen nicht möglich: Das Regal enthält Bücher", - "Impossibile eliminare: lo scaffale contiene libri": "Löschen nicht möglich: Der Schrank enthält Bücher", - "Impossibile eliminare: lo scaffale contiene mensole": "Löschen nicht möglich: Der Schrank enthält Regale", - "Impossibile generare la risposta JSON.": "Die JSON-Antwort konnte nicht generiert werden.", - "Impossibile importare i dati per questo ISBN.": "Die Daten für diese ISBN konnten nicht importiert werden.", - "Impossibile inizializzare Uppy per i contenuti digitali.": "Uppy für digitale Inhalte konnte nicht initialisiert werden.", - "Impossibile inviare la recensione": "Die Rezension konnte nicht gesendet werden", - "Impossibile inviare la recensione.": "Die Rezension konnte nicht gesendet werden.", - "Impossibile leggere il file .env": ".env-Datei kann nicht gelesen werden", - "Impossibile leggere il file caricato": "Die hochgeladene Datei konnte nicht gelesen werden", - "Impossibile leggere il file di backup": "Backup-Datei konnte nicht gelesen werden", - "Impossibile leggere il file di log": "Protokolldatei kann nicht gelesen werden", - "Impossibile modificare una copia attualmente in prestito. Prima termina il prestito o imposta lo stato su \"Disponibile\" per chiuderlo automaticamente.": "Ein derzeit ausgeliehenes Exemplar kann nicht bearbeitet werden. Beenden Sie zuerst die Ausleihe oder setzen Sie den Status auf \"Verfügbar\", um sie automatisch zu schließen.", - "Impossibile notificare utente copia non disponibile": "Benutzer kann nicht über nicht verfügbares Exemplar benachrichtigt werden", - "Impossibile notificare utente: dati mancanti": "Benutzer kann nicht benachrichtigt werden: fehlende Daten", - "Impossibile processare l'immagine.": "Das Bild konnte nicht verarbeitet werden.", - "Impossibile recuperare i dati degli autori": "Die Autorendaten konnten nicht abgerufen werden", - "Impossibile recuperare i dati degli editori": "Die Verlagsdaten konnten nicht abgerufen werden", - "Impossibile recuperare informazioni sulla release": "Release-Informationen konnten nicht abgerufen werden", - "Impossibile revocare la sessione": "Sitzung kann nicht widerrufen werden", - "Impossibile riaprire il file ZIP": "ZIP-Datei kann nicht erneut geöffnet werden", - "Impossibile ricalcolare la disponibilità del libro.": "Buchverfügbarkeit kann nicht neu berechnet werden.", - "Impossibile ridurre le copie a %d. Ci sono %d copie non disponibili (in prestito, perse o danneggiate). Il numero minimo di copie totali è %d.": "Die Exemplare können nicht auf %d reduziert werden. Es gibt %d nicht verfügbare Exemplare (ausgeliehen, verloren oder beschädigt). Die Mindestanzahl der Gesamtexemplare beträgt %d.", - "Impossibile rifiutare la recensione": "Die Rezension konnte nicht abgelehnt werden", - "Impossibile rigenerare la sitemap: %s": "Die Sitemap konnte nicht regeneriert werden: %s", - "Impossibile salvare il file di aggiornamento": "Aktualisierungsdatei konnte nicht gespeichert werden", - "Impossibile salvare l'utente. Riprova più tardi.": "Der Benutzer konnte nicht gespeichert werden. Bitte versuchen Sie es später erneut.", - "Impossibile salvare le impostazioni.": "Einstellungen können nicht gespeichert werden.", - "Impossibile scaricare (libro senza ISBN):": "Download nicht möglich (Buch ohne ISBN):", - "Impossibile scrivere file di backup": "Backup-Datei konnte nicht geschrieben werden", - "Impossibile scrivere nel file .env": ".env-Datei kann nicht beschrieben werden", - "Impossibile segnare come letta la notifica.": "Die Benachrichtigung konnte nicht als gelesen markiert werden.", - "Impossibile segnare tutte le notifiche come lette.": "Alle Benachrichtigungen konnten nicht als gelesen markiert werden.", - "Impossibile segnare tutti i messaggi come letti.": "Alle Nachrichten konnten nicht als gelesen markiert werden.", - "Imposta come Predefinita": "Als Standard festlegen", - "Imposta come attiva o predefinita": "Als aktiv oder Standard festlegen", - "Imposta come lingua predefinita per nuovi utenti": "Als Standardsprache für neue Benutzer festlegen", - "Imposta il nome mostrato nel backend e il logo utilizzato nel layout.": "Legen Sie den im Backend angezeigten Namen und das im Layout verwendete Logo fest.", - "Imposta nel file .env: APP_CANONICAL_URL=%s": "In der .env-Datei setzen: APP_CANONICAL_URL=%s", - "Imposta password": "Passwort festlegen", - "Impostare questa lingua come predefinita?\n\nQuesta diventerà la lingua dell'intera applicazione per tutti gli utenti.": "Diese Sprache als Standard festlegen?\n\nDiese wird zur Sprache der gesamten Anwendung für alle Benutzer.", - "Impostare questa lingua come predefinita?\\n\\nQuesta diventerà la lingua dell'intera applicazione per tutti gli utenti.": "Diese Sprache als Standard festlegen?\\n\\nDiese wird zur Sprache der gesamten Anwendung für alle Benutzer.", - "Impostazioni": "Einstellungen", - "Impostazioni API Book Scraper salvate correttamente.": "Book Scraper API-Einstellungen erfolgreich gespeichert.", - "Impostazioni Applicazione": "Anwendungseinstellungen", - "Impostazioni Date": "Datumseinstellungen", - "Impostazioni Discogs salvate correttamente.": "Discogs-Einstellungen erfolgreich gespeichert.", - "Impostazioni SEO": "SEO-Einstellungen", - "Impostazioni Z39.50 salvate correttamente.": "Z39.50-Einstellungen erfolgreich gespeichert.", - "Impostazioni avanzate aggiornate correttamente.": "Erweiterte Einstellungen erfolgreich aktualisiert.", - "Impostazioni contatti aggiornate correttamente.": "Kontakteinstellungen erfolgreich aktualisiert.", - "Impostazioni email aggiornate correttamente.": "E-Mail-Einstellungen erfolgreich aktualisiert.", - "Impostazioni generali aggiornate correttamente.": "Allgemeine Einstellungen erfolgreich aktualisiert.", - "Impostazioni privacy aggiornate correttamente.": "Datenschutzeinstellungen erfolgreich aktualisiert.", - "Impostazioni salvate.": "Einstellungen gespeichert.", - "In Attesa": "Ausstehend", - "In Attesa di Approvazione": "Genehmigung ausstehend", - "In Corso": "In Bearbeitung", - "In Riparazione": "In Reparatur", - "In Ritardo": "Überfällig", - "In attesa": "Ausstehend", - "In attesa di approvazione": "Genehmigung ausstehend", - "In corso": "In Bearbeitung", - "In corso di restituzione": "Rückgabe ausstehend", - "In corso...": "In Bearbeitung...", - "In manutenzione": "In Wartung", - "In prestito": "Ausgeliehen", - "In prestito fino al": "Ausgeliehen bis", - "In questa pagina trovi tutti gli eventi, gli incontri e i laboratori organizzati dalla biblioteca.": "Auf dieser Seite finden Sie alle Veranstaltungen, Treffen und Workshops, die von der Bibliothek organisiert werden.", - "In ritardo": "Überfällig", - "In scadenza": "Bald fällig", - "Inattivo": "Inaktiv", - "Incompleto": "Unvollständig", - "Indice %s creato su %s": "Index %s erstellt auf %s", - "Indice ISBN": "ISBN-Index", - "Indici creati con successo": "Indizes erfolgreich erstellt", - "Indici creati:": "Erstellte Indizes:", - "Indici di ottimizzazione creati OK": "Optimierungsindizes erfolgreich erstellt", - "Indietro": "Zurück", - "Indirizzo": "Adresse", - "Indirizzo completo": "Vollständige Adresse", - "Indirizzo completo *": "Vollständige Adresse *", - "Indirizzo:": "Adresse:", - "Info": "Info", - "Info HSTS:": "HSTS-Info:", - "Informazione": "Information", - "Informazioni": "Informationen", - "Informazioni Base": "Basisinformationen", - "Informazioni Evento": "Veranstaltungsinformationen", - "Informazioni Importanti": "Wichtige Informationen", - "Informazioni Libro": "Buchinformationen", - "Informazioni Personali": "Persönliche Informationen", - "Informazioni Prestito": "Ausleihinformationen", - "Informazioni Report": "Berichtsinformationen", - "Informazioni di Contatto": "Kontaktinformationen", - "Informazioni di contatto": "Kontaktinformationen", - "Informazioni editore": "Verlagsinformationen", - "Informazioni generali": "Allgemeine Informationen", - "Informazioni personali": "Persönliche Informationen", - "Informazioni sullo Storico Import": "Informationen zur Importhistorie", - "Informazioni tessera": "Ausweisinformationen", - "Informazioni utili per il personale": "Nützliche Informationen für das Personal", - "Inizia Installazione": "Installation starten", - "Inizia ad aggiungere libri al catalogo": "Beginnen Sie, Bücher zum Katalog hinzuzufügen", - "Inizia aggiungendo il primo libro alla collezione": "Beginnen Sie, indem Sie das erste Buch zur Sammlung hinzufügen", - "Inizia aggiungendo la prima lingua.": "Beginnen Sie, indem Sie die erste Sprache hinzufügen.", - "Inizia caricando il tuo primo plugin": "Beginnen Sie, indem Sie Ihr erstes Plugin hochladen", - "Inizia creando il primo genere letterario": "Beginnen Sie, indem Sie das erste literarische Genre erstellen", - "Inizia la Tua Avventura Letteraria": "Starten Sie Ihr literarisches Abenteuer", - "Inizializzazione...": "Initialisierung...", - "Inizio": "Beginn", - "Inizio installazione...": "Installation wird gestartet...", - "Inizio:": "Beginn:", - "Inserimento Manuale Dewey": "Manuelle Dewey-Eingabe", - "Inserisci $1": "$1 eingeben", - "Inserisci codice locale (es. es_ES per Spagnolo)": "Gebietsschema-Code eingeben (z.B. es_ES für Spanisch)", - "Inserisci il codice Dewey completo (supporta fino a 4 decimali)": "Geben Sie den vollständigen Dewey-Code ein (unterstützt bis zu 4 Dezimalstellen)", - "Inserisci il motivo del rifiuto...": "Geben Sie den Ablehnungsgrund ein...", - "Inserisci il titolo": "Titel eingeben", - "Inserisci la data di inizio (YYYY-MM-DD)": "Startdatum eingeben (JJJJ-MM-TT)", - "Inserisci la tua email per ricevere il link di reset.": "Geben Sie Ihre E-Mail-Adresse ein, um den Link zum Zurücksetzen zu erhalten.", - "Inserisci la tua email per ricevere un link di reset": "Geben Sie Ihre E-Mail-Adresse ein, um einen Link zum Zurücksetzen zu erhalten", - "Inserisci la tua nuova password": "Geben Sie Ihr neues Passwort ein", - "Inserisci le credenziali del tuo database MySQL. Assicurati che il database sia già stato creato e sia vuoto.": "Geben Sie Ihre MySQL-Datenbank-Zugangsdaten ein. Stellen Sie sicher, dass die Datenbank bereits erstellt wurde und leer ist.", - "Inserisci le informazioni del nuovo evento": "Geben Sie die Informationen für die neue Veranstaltung ein", - "Inserisci parole chiave separate da virgole per facilitare la ricerca": "Geben Sie durch Kommas getrennte Schlüsselwörter ein, um die Suche zu erleichtern", - "Inserisci qualsiasi codice Dewey (anche se non presente nell'elenco)": "Geben Sie einen beliebigen Dewey-Code ein (auch wenn er nicht in der Liste enthalten ist)", - "Inserisci solo script che NON tracciano utenti. Per analytics/marketing usa le sezioni dedicate.": "Fügen Sie nur Skripte ein, die Benutzer NICHT verfolgen. Für Analytics/Marketing verwenden Sie die entsprechenden Bereiche.", - "Inserisci un codice Dewey": "Geben Sie einen Dewey-Code ein", - "Inserisci un codice ISBN per continuare.": "Geben Sie einen ISBN-Code ein, um fortzufahren.", - "Inserisci un numero valido di copie": "Geben Sie eine gültige Anzahl von Exemplaren ein", - "Inserisci una breve biografia dell'autore...": "Geben Sie eine kurze Biografie des Autors ein...", - "Instagram": "Instagram", - "Installa": "Installieren", - "Installa Plugin": "Plugin installieren", - "Installato": "Installiert", - "Installato:": "Installiert:", - "Installazione": "Installation", - "Installazione Completata": "Installation abgeschlossen", - "Installazione Completata!": "Installation abgeschlossen!", - "Installazione Cron Job": "Cron-Job-Installation", - "Installazione Database": "Datenbankinstallation", - "Installazione Guidata": "Geführte Installation", - "Installazione completata": "Installation abgeschlossen", - "Installazione database non completa. Tabelle mancanti: %s": "Datenbankinstallation unvollständig. Fehlende Tabellen: %s", - "Installazione database non completa. Trovate %d tabelle, attese %d": "Datenbankinstallation unvollständig. %d Tabellen gefunden, %d erwartet", - "Installazione delle tabelle del database e configurazione iniziale...": "Datenbanktabellen und Erstkonfiguration werden installiert...", - "Installazione fallita": "Installation fehlgeschlagen", - "Installazione file": "Dateien werden installiert", - "Installazione in corso...": "Installation läuft...", - "Installazione italiana usa": "Italienische Installation verwendet", - "Installazione plugin Open Library...": "Open Library Plugin wird installiert...", - "Installer Pinakes": "Pinakes Installer", - "Installer eliminato con successo!": "Installer erfolgreich gelöscht!", - "Insufficiente": "Unzureichend", - "Integrità dati": "Datenintegrität", - "Internal server error": "Interner Serverfehler", - "Intestazione": "Kopfzeile", - "Intestazione sezione": "Abschnittsüberschrift", - "Inventario": "Inventar", - "Invia Email": "E-Mail senden", - "Invia Richiesta": "Anfrage senden", - "Invia link": "Link senden", - "Invia link di reset": "Zurücksetzungslink senden", - "Invia messaggio": "Nachricht senden", - "Invia recensione": "Rezension einreichen", - "Inviaci un messaggio": "Senden Sie uns eine Nachricht", - "Inviata agli amministratori quando viene ricevuta una nuova recensione da approvare.": "Wird an Administratoren gesendet, wenn eine neue Rezension zur Genehmigung eingeht.", - "Inviata agli utenti quando un libro nella wishlist torna disponibile. Il libro rimane nella wishlist ma non riceverà altre notifiche per lo stesso libro.": "Wird an Benutzer gesendet, wenn ein Buch auf ihrer Wunschliste wieder verfügbar wird. Das Buch bleibt auf der Wunschliste, es werden jedoch keine weiteren Benachrichtigungen für dasselbe Buch gesendet.", - "Inviata agli utenti quando un libro nella wishlist torna disponibile. Il libro viene automaticamente rimosso dalla wishlist dopo l'invio della notifica per evitare duplicati.": "Wird an Benutzer gesendet, wenn ein Buch auf ihrer Wunschliste wieder verfügbar wird. Das Buch wird nach dem Versand der Benachrichtigung automatisch von der Wunschliste entfernt, um Duplikate zu vermeiden.", - "Inviata ai nuovi utenti per impostare la password del loro account.": "Wird an neue Benutzer gesendet, um das Passwort für ihr Konto festzulegen.", - "Inviata all'utente al termine della registrazione per confermare la ricezione e l'attesa di approvazione.": "Wird nach der Registrierung an den Benutzer gesendet, um den Eingang zu bestätigen und auf die Genehmigung hinzuweisen.", - "Inviata all'utente quando un amministratore approva l'account.": "Wird an den Benutzer gesendet, wenn ein Administrator das Konto genehmigt.", - "Inviata all'utente quando un amministratore approva una richiesta di prestito.": "Wird an den Benutzer gesendet, wenn ein Administrator eine Ausleihanfrage genehmigt.", - "Inviata all'utente quando un amministratore rifiuta una richiesta di prestito.": "Wird an den Benutzer gesendet, wenn ein Administrator eine Ausleihanfrage ablehnt.", - "Inviata quando il tempo per ritirare un libro è scaduto e il prestito è stato annullato.": "Wird gesendet, wenn die Abholfrist abgelaufen ist und die Ausleihe storniert wurde.", - "Inviata quando un libro prenotato diventa disponibile e viene convertito in prestito pendente.": "Wird gesendet, wenn ein vorgemerktes Buch verfügbar wird und in eine ausstehende Ausleihe umgewandelt wird.", - "Inviata quando un prestito è stato approvato e il libro è pronto per il ritiro.": "Wird gesendet, wenn eine Ausleihe genehmigt wurde und das Buch zur Abholung bereit ist.", - "Inviata quando un ritiro viene annullato dall'amministratore.": "Wird gesendet, wenn eine Abholung vom Administrator storniert wird.", - "Inviata quando un utente viene invitato come amministratore.": "Wird gesendet, wenn ein Benutzer als Administrator eingeladen wird.", - "Inviato": "Gesendet", - "Invio in corso...": "Wird gesendet...", - "Invio notifica prenotazione fallito": "Senden der Vormerkungsbenachrichtigung fehlgeschlagen", - "Invita gli utenti a registrarsi": "Benutzer zur Registrierung einladen", - "Invito amministratore": "Administratoreinladung", - "Italiano (IT)": "Italienisch (IT)", - "JPG, PNG, GIF, WEBP - Max 5MB": "JPG, PNG, GIF, WEBP – Max. 5 MB", - "JSON non valido.": "Ungültiges JSON.", - "JavaScript Analitici": "Analyse-JavaScript", - "JavaScript Essenziali": "Essentielles JavaScript", - "JavaScript Marketing": "Marketing-JavaScript", - "L'API key può essere fornita in due modi:": "Der API-Schlüssel kann auf zwei Arten bereitgestellt werden:", - "L'API è limitata a 50 risultati per richiesta": "Die API ist auf 50 Ergebnisse pro Anfrage begrenzt", - "L'ID primario deve essere presente nella lista degli autori da unire": "Die primäre ID muss in der Liste der zusammenzuführenden Autoren vorhanden sein", - "L'ID primario deve essere presente nella lista degli editori da unire": "Die primäre ID muss in der Liste der zusammenzuführenden Verlage vorhanden sein", - "L'URL canonico non è valido. Deve iniziare con http:// o https://": "Die kanonische URL ist ungültig. Sie muss mit http:// oder https:// beginnen", - "L'URL del calendario è stato copiato negli appunti.": "Die Kalender-URL wurde in die Zwischenablage kopiert.", - "L'URL fornito non è valido": "Die angegebene URL ist ungültig", - "L'accesso alla cartella installer è automaticamente bloccato dopo l'installazione.": "Der Zugriff auf den Installer-Ordner wird nach der Installation automatisch gesperrt.", - "L'applicazione NON può funzionare senza questo passaggio!": "Die Anwendung kann NICHT ohne diesen Schritt funktionieren!", - "L'applicazione risulta correttamente configurata.": "Die Anwendung ist korrekt konfiguriert.", - "L'applicazione è stata installata correttamente e tutte le verifiche sono andate a buon fine.": "Die Anwendung wurde erfolgreich installiert und alle Prüfungen wurden bestanden.", - "L'email di attivazione è stata inviata. L'utente potrà verificare il proprio account cliccando il link ricevuto (valido 7 giorni).": "Die Aktivierungs-E-Mail wurde gesendet. Der Benutzer kann sein Konto durch Klicken auf den erhaltenen Link verifizieren (7 Tage gültig).", - "L'immagine verrà scaricata al salvataggio": "Das Bild wird beim Speichern heruntergeladen", - "L'immagine è troppo grande. Max 5MB.": "Das Bild ist zu groß. Max. 5 MB.", - "L'indirizzo email deve essere valido.": "Die E-Mail-Adresse muss gültig sein.", - "L'installazione non è completa o valida.": "Die Installation ist nicht vollständig oder gültig.", - "L'installazione è stata completata correttamente e tutte le verifiche sono andate a buon fine.": "Die Installation wurde erfolgreich abgeschlossen und alle Überprüfungen waren erfolgreich.", - "L'installazione è stata completata senza errori.": "Die Installation wurde fehlerfrei abgeschlossen.", - "L'ora dell'evento deve essere nel formato corretto (HH:MM).": "Die Uhrzeit des Ereignisses muss im korrekten Format vorliegen (HH:MM).", - "L'ora deve essere nel formato corretto (HH:MM).": "Die Uhrzeit muss im korrekten Format vorliegen (HH:MM).", - "L'ultima sezione che invita all'azione": "Der abschließende Call-to-Action-Bereich", - "L'utente del database non ha i permessi per creare i TRIGGER. L'installazione è stata completata, ma per garantire la piena integrità dei dati è necessario installarli manualmente.": "Der Datenbankbenutzer hat keine Berechtigung zum Erstellen von TRIGGERN. Die Installation wurde abgeschlossen, aber um die vollständige Datenintegrität zu gewährleisten, müssen diese manuell installiert werden.", - "L'utente ha ritirato il libro?": "Hat der Benutzer das Buch abgeholt?", - "L'utente non è in stato sospeso. Solo gli utenti sospesi richiedono approvazione.": "Der Benutzer befindet sich nicht im gesperrten Status. Nur gesperrte Benutzer erfordern eine Genehmigung.", - "L'utente riceverà un'email con link di verifica (valido 7 giorni) e potrà attivare autonomamente l'account.": "Der Benutzer erhält eine E-Mail mit Bestätigungslink (7 Tage gültig) und kann das Konto selbstständig aktivieren.", - "L'utente riceverà una notifica via email della prenotazione creata": "Der Benutzer erhält eine E-Mail-Benachrichtigung über die erstellte Vormerkung", - "L'utente richiesto non esiste nel database.": "Der angeforderte Benutzer existiert nicht in der Datenbank.", - "L'utente sarà attivato immediatamente e riceverà un'email di benvenuto. Potrà accedere subito.": "Der Benutzer wird sofort aktiviert und erhält eine Willkommens-E-Mail. Er kann sich sofort anmelden.", - "L'utente è stato attivato e può già effettuare il login. È stata inviata un'email di benvenuto.": "Der Benutzer wurde aktiviert und kann sich bereits anmelden. Eine Willkommens-E-Mail wurde gesendet.", - "L'utente è stato eliminato.": "Der Benutzer wurde gelöscht.", - "La Tua Biblioteca Digitale": "Ihre digitale Bibliothek", - "La cartella vendor/ esiste e contiene le librerie necessarie.": "Der Ordner vendor/ existiert und enthält die erforderlichen Bibliotheken.", - "La classificazione Dewey è utilizzata per organizzare i libri per argomento secondo standard internazionali": "Die Dewey-Klassifikation wird verwendet, um Bücher nach Thema gemäß internationalen Standards zu organisieren", - "La collocazione può essere assegnata automaticamente o inserita manualmente durante la creazione/modifica del libro": "Der Standort kann automatisch zugewiesen oder bei der Erstellung/Bearbeitung des Buches manuell eingegeben werden", - "La collocazione è l'indirizzo fisico che identifica dove si trova un libro nella biblioteca.": "Der Standort ist die physische Adresse, die angibt, wo sich ein Buch in der Bibliothek befindet.", - "La copertina verrà rimossa al salvataggio del libro": "Das Cover wird beim Speichern des Buches entfernt", - "La copia assegnata è stata segnalata come persa o danneggiata": "Das zugewiesene Exemplar wurde als verloren oder beschädigt gemeldet", - "La copia non è più disponibile": "Das Exemplar ist nicht mehr verfügbar", - "La cronologia degli aggiornamenti apparirà qui": "Der Aktualisierungsverlauf wird hier angezeigt", - "La data dell'evento è obbligatoria e deve essere nel formato corretto.": "Das Veranstaltungsdatum ist erforderlich und muss im korrekten Format vorliegen.", - "La data dell'evento è obbligatoria.": "Das Veranstaltungsdatum ist erforderlich.", - "La data di nascita deve essere precedente alla data di morte.": "Das Geburtsdatum muss vor dem Sterbedatum liegen.", - "La data non può essere nel passato.": "Das Datum darf nicht in der Vergangenheit liegen.", - "La lingua contrassegnata come 'Predefinita' verrà usata in tutta l'applicazione per tutti gli utenti. Per cambiare la lingua dell'intera app, clicca sull'icona stella": "Die als 'Standard' markierte Sprache wird in der gesamten Anwendung für alle Benutzer verwendet. Um die Sprache der gesamten App zu ändern, klicken Sie auf das Stern-Symbol", - "La mia bacheca": "Mein Dashboard", - "La modalità manutenzione non era attiva": "Der Wartungsmodus war nicht aktiv", - "La pagina che stai cercando non esiste o è stata spostata.": "Die Seite, die Sie suchen, existiert nicht oder wurde verschoben.", - "La pagina che stai cercando non esiste.": "Die von Ihnen gesuchte Seite existiert nicht.", - "La password deve contenere almeno 8 caratteri, lettere maiuscole, minuscole e numeri": "Das Passwort muss mindestens 8 Zeichen mit Groß- und Kleinbuchstaben sowie Zahlen enthalten", - "La password deve contenere almeno una lettera maiuscola, una minuscola e un numero": "Das Passwort muss mindestens einen Großbuchstaben, einen Kleinbuchstaben und eine Zahl enthalten", - "La password deve contenere almeno una lettera maiuscola, una minuscola e un numero.": "Das Passwort muss mindestens einen Großbuchstaben, einen Kleinbuchstaben und eine Zahl enthalten.", - "La password deve contenere maiuscole, minuscole e numeri.": "Das Passwort muss Großbuchstaben, Kleinbuchstaben und Zahlen enthalten.", - "La password deve essere lunga almeno 8 caratteri": "Das Passwort muss mindestens 8 Zeichen lang sein", - "La password deve essere lunga almeno 8 caratteri!": "Das Passwort muss mindestens 8 Zeichen lang sein!", - "La password deve essere lunga almeno 8 caratteri.": "Das Passwort muss mindestens 8 Zeichen lang sein.", - "La password non può superare i 72 caratteri.": "Das Passwort darf nicht länger als 72 Zeichen sein.", - "La password attuale non è corretta.": "Das aktuelle Passwort ist falsch.", - "La posizione fisica è indipendente dalla classificazione Dewey e indica dove si trova il libro sugli scaffali.": "Die physische Position ist unabhängig von der Dewey-Klassifikation und gibt an, wo sich das Buch in den Regalen befindet.", - "La posizione in coda sarà calcolata automaticamente in base alle prenotazioni esistenti": "Die Warteschlangenposition wird automatisch anhand der bestehenden Vormerkungen berechnet", - "La posizione viene assegnata automaticamente": "Die Position wird automatisch zugewiesen", - "La prenotazione è scaduta": "Die Vormerkung ist abgelaufen", - "La recensione è stata approvata e pubblicata con successo.": "Die Rezension wurde erfolgreich genehmigt und veröffentlicht.", - "La recensione è stata eliminata definitivamente.": "Die Rezension wurde endgültig gelöscht.", - "La recensione è stata rifiutata e non sarà pubblicata.": "Die Rezension wurde abgelehnt und wird nicht veröffentlicht.", - "La richiesta ha impiegato troppo tempo. Riprova.": "Die Anfrage hat zu lange gedauert. Bitte versuchen Sie es erneut.", - "La risposta include tutti i dati del libro:": "Die Antwort enthält alle Buchdaten:", - "La scadenza verrà estesa di 14 giorni": "Die Frist wird um 14 Tage verlängert", - "La sessione è scaduta. Aggiorna la pagina e riprova.": "Die Sitzung ist abgelaufen. Aktualisieren Sie die Seite und versuchen Sie es erneut.", - "La sezione principale che appare per prima sulla home": "Der Hauptbereich, der als Erstes auf der Startseite erscheint", - "La sitemap viene aggiornata automaticamente quando premi il pulsante oppure tramite lo script CLI": "Die Sitemap wird automatisch aktualisiert, wenn Sie die Schaltfläche drücken oder über das CLI-Skript", - "La sitemap viene aggiornata automaticamente quando premi il pulsante oppure tramite lo script CLI php scripts/generate-sitemap.php. Usa questa azione dopo aver importato un grande numero di libri o modifiche ai contenuti CMS.": "Die Sitemap wird automatisch aktualisiert, wenn Sie die Schaltfläche drücken oder über das CLI-Skript php scripts/generate-sitemap.php. Verwenden Sie diese Aktion nach dem Import vieler Bücher oder Änderungen an CMS-Inhalten.", - "La tua biblioteca digitale...": "Ihre digitale Bibliothek...", - "La tua prenotazione per \"%s\" è stata messa in attesa. %s. Verrai notificato quando sarà disponibile una nuova copia.": "Ihre Vormerkung für \"%s\" wurde in die Warteschlange gestellt. %s. Sie werden benachrichtigt, wenn ein neues Exemplar verfügbar ist.", - "La tua richiesta di prestito è stata inviata. Riceverai una notifica quando verrà approvata.": "Ihre Ausleihanfrage wurde gesendet. Sie erhalten eine Benachrichtigung, wenn sie genehmigt wird.", - "La tua sessione è scaduta. Per motivi di sicurezza, effettua nuovamente l'accesso": "Ihre Sitzung ist abgelaufen. Bitte melden Sie sich aus Sicherheitsgründen erneut an", - "La tua sessione è scaduta. Per motivi di sicurezza, ricarica la pagina e riprova": "Ihre Sitzung ist abgelaufen. Bitte laden Sie aus Sicherheitsgründen die Seite neu und versuchen Sie es erneut", - "La tua sessione è scaduta. Per motivi di sicurezza, ricarica la pagina ed effettua nuovamente l'accesso.": "Ihre Sitzung ist abgelaufen. Bitte laden Sie aus Sicherheitsgründen die Seite neu und melden Sie sich erneut an.", - "La tua wishlist è vuota": "Ihre Wunschliste ist leer", - "La versione %s è disponibile. Prima di aggiornare, verrà creato un backup automatico del database.": "Version %s ist verfügbar. Vor der Aktualisierung wird automatisch ein Datenbank-Backup erstellt.", - "Lascia una recensione": "Rezension schreiben", - "Lascia vuoto o usa \"Genera\" per assegnare automaticamente la prossima posizione disponibile.": "Leer lassen oder \"Generieren\" verwenden, um automatisch die nächste verfügbare Position zuzuweisen.", - "Lascia vuoto o usa \\": "Leer lassen oder \\ verwenden", - "Lascia vuoto per 1 mese": "Leer lassen für 1 Monat", - "Lascia vuoto per auto-rilevamento. Necessario solo su macOS/Linux con socket personalizzati.": "Leer lassen für automatische Erkennung. Nur auf macOS/Linux mit benutzerdefinierten Sockets erforderlich.", - "Lascia vuoto per generare automaticamente": "Leer lassen, um automatisch zu generieren", - "Lascia vuoto per inviare un link di impostazione": "Leer lassen, um einen Einrichtungslink zu senden", - "Lascia vuoto per mantenere il nome attuale": "Leer lassen, um den aktuellen Namen beizubehalten", - "Lascia vuoto per mantenere la chiave esistente. Inserisci un nuovo valore per aggiornarla.": "Leer lassen, um den bestehenden Schlüssel beizubehalten. Geben Sie einen neuen Wert ein, um ihn zu aktualisieren.", - "Lascia vuoto per nascondere il social dal footer": "Leer lassen, um das soziale Netzwerk in der Fußzeile auszublenden", - "Lascia vuoto per nascondere il titolo": "Leer lassen, um den Titel auszublenden", - "Lascia vuoto per non modificare": "Leer lassen, um nicht zu ändern", - "Lascia vuoto se l'autore è vivente": "Leer lassen, wenn der Autor noch lebt", - "Le API key disattivate restituiranno errore 401": "Deaktivierte API-Schlüssel geben Fehler 401 zurück", - "Le Mie Prenotazioni": "Meine Vormerkungen", - "Le Mie Recensioni": "Meine Rezensionen", - "Le copie disponibili vengono calcolate automaticamente": "Verfügbare Exemplare werden automatisch berechnet", - "Le date rosse non sono disponibili. La richiesta verrà valutata da un amministratore.": "Rot markierte Daten sind nicht verfügbar. Ihre Anfrage wird von einem Administrator geprüft.", - "Le date rosse o arancioni non sono disponibili. La richiesta verrà valutata da un amministratore.": "Rote oder orangefarbene Daten sind nicht verfügbar. Die Anfrage wird von einem Administrator geprüft.", - "Le mie prenotazioni": "Meine Vormerkungen", - "Le password non coincidono": "Die Passwörter stimmen nicht überein", - "Le password non coincidono!": "Die Passwörter stimmen nicht überein!", - "Le password non coincidono.": "Die Passwörter stimmen nicht überein.", - "Le password non corrispondono": "Die Passwörter stimmen nicht überein", - "Le posizioni si generano automaticamente": "Positionen werden automatisch generiert", - "Le route non possono contenere spazi": "Routen dürfen keine Leerzeichen enthalten", - "Le route sono gli URL usati nell'applicazione. Traducendole, puoi avere URL in italiano o inglese in base alla lingua dell'installazione.": "Routen sind die URLs, die in der Anwendung verwendet werden. Durch Übersetzung können Sie URLs je nach Installationssprache auf Italienisch oder Englisch haben.", - "Le sessioni scadono automaticamente per proteggere i tuoi dati.": "Sitzungen laufen automatisch ab, um Ihre Daten zu schützen.", - "Le tue recensioni": "Ihre Rezensionen", - "Letta": "Gelesen", - "Letto": "Gelesen", - "Lettore": "Leser", - "Libero": "Frei", - "Library Management System": "Bibliotheksverwaltungssystem", - "LibraryThing TSV": "LibraryThing TSV", - "Librerie di upload non caricate. Ricarica la pagina.": "Upload-Bibliotheken nicht geladen. Bitte laden Sie die Seite neu.", - "Libri": "Bücher", - "Libri Disponibili": "Verfügbare Bücher", - "Libri Importati": "Importierte Bücher", - "Libri Prestati": "Ausgeliehene Bücher", - "Libri Totali": "Bücher gesamt", - "Libri attualmente in prestito": "Derzeit ausgeliehene Bücher", - "Libri per Collocazione": "Bücher nach Standort", - "Libri prenotati dagli utenti": "Von Benutzern vorgemerkte Bücher", - "Libro": "Buch", - "Libro '%s' (ID: %d) ha copie disponibili negative: %d": "Buch '%s' (ID: %d) hat negative verfügbare Exemplare: %d", - "Libro '%s' (ID: %d) ha più copie disponibili (%d) che totali (%d)": "Buch '%s' (ID: %d) hat mehr verfügbare Exemplare (%d) als Gesamtexemplare (%d)", - "Libro '%s' (ID: %d) ha stato '%s' ma copie disponibili: %d": "Buch '%s' (ID: %d) hat Status '%s', aber verfügbare Exemplare: %d", - "Libro Esistente:": "Vorhandenes Buch:", - "Libro Già Esistente": "Buch bereits vorhanden", - "Libro ID %d ha posizioni coda non sequenziali: %s": "Buch ID %d hat nicht-sequenzielle Warteschlangenpositionen: %s", - "Libro aggiornato con successo!": "Buch erfolgreich aktualisiert!", - "Libro aggiunto con successo!": "Buch erfolgreich hinzugefügt!", - "Libro da prenotare": "Vorzumerkendes Buch", - "Libro disponibile per la prenotazione": "Buch zur Vormerkung verfügbar", - "Libro e utente sono campi obbligatori.": "Buch und Benutzer sind Pflichtfelder.", - "Libro non disponibile": "Buch nicht verfügbar", - "Libro non trovato": "Buch nicht gefunden", - "Libro non trovato nel database Open Library": "Buch nicht in der Open Library-Datenbank gefunden", - "Libro non trovato su Open Library.": "Buch nicht auf Open Library gefunden.", - "Libro non trovato.": "Buch nicht gefunden.", - "Libro prenotato disponibile": "Vorgemerktes Buch verfügbar", - "Libro senza titolo": "Buch ohne Titel", - "Libro:": "Buch:", - "Licenza": "Lizenz", - "Limite massimo rinnovi raggiunto": "Maximale Anzahl an Verlängerungen erreicht", - "Limiti: massimo 50 libri con scraping attivo, timeout 5 minuti": "Grenzen: maximal 50 Bücher mit aktivem Scraping, Timeout 5 Minuten", - "Lingua": "Sprache", - "Lingua App": "App-Sprache", - "Lingua Attiva": "Aktive Sprache", - "Lingua Predefinita": "Standardsprache", - "Lingua Predefinita:": "Standardsprache:", - "Lingua aggiornata con successo": "Sprache erfolgreich aktualisiert", - "Lingua creata con successo": "Sprache erfolgreich erstellt", - "Lingua eliminata con successo": "Sprache erfolgreich gelöscht", - "Lingua non supportata": "Nicht unterstützte Sprache", - "Lingua non trovata": "Sprache nicht gefunden", - "Lingua originale del libro": "Originalsprache des Buches", - "Lingua predefinita impostata con successo": "Standardsprache erfolgreich festgelegt", - "Lingue": "Sprachen", - "Lingue Configurate": "Konfigurierte Sprachen", - "Lingue valide": "Gültige Sprachen", - "Link": "Link", - "Link Cookie Statement": "Link zur Cookie-Erklärung", - "Link Cookie Technologies": "Link zu Cookie-Technologien", - "Link Social Media": "Social-Media-Links", - "Link al file digitale (se disponibile)": "Link zur digitalen Datei (falls verfügbar)", - "Link all'audiolibro (se disponibile)": "Link zum Hörbuch (falls verfügbar)", - "Link copiato!": "Link kopiert!", - "Link di esempio": "Beispiel-Link", - "Link di reset non valido o scaduto": "Zurücksetzungslink ungültig oder abgelaufen", - "Link pulsante": "Schaltflächen-Link", - "LinkedIn": "LinkedIn", - "Lista": "Liste", - "Livello": "Ebene", - "Livello ${m.numero_livello}": "Ebene ${m.numero_livello}", - "Livello *": "Ebene *", - "Livello 1 (Classi)": "Ebene 1 (Klassen)", - "Livello 2 (Divisioni)": "Ebene 2 (Abteilungen)", - "Livello 3 (Specifiche)": "Ebene 3 (Spezifika)", - "Livello principale (es. Prosa, Poesia, Teatro)": "Hauptebene (z. B. Prosa, Lyrik, Theater)", - "Lo script CLI utilizza il valore di APP_CANONICAL_URL. Assicurati che sia configurato correttamente per evitare URL duplicati.": "Das CLI-Skript verwendet den Wert von APP_CANONICAL_URL. Stellen Sie sicher, dass dieser korrekt konfiguriert ist, um doppelte URLs zu vermeiden.", - "Lo stato della prenotazione sarà impostato automaticamente come \"attiva\"": "Der Status der Vormerkung wird automatisch auf \"aktiv\" gesetzt", - "Lo stato della prenotazione sarà impostato automaticamente come \\": "Der Status der Vormerkung wird automatisch gesetzt als \\", - "Loans": "Ausleihen", - "Locale": "Lokal", - "Locale non supportato.": "Nicht unterstützte Sprache.", - "Lock file creato (installazione protetta)": "Lock-Datei erstellt (Installation geschützt)", - "Log": "Log", - "Log Sicurezza": "Sicherheitsprotokolle", - "Log di Sicurezza": "Sicherheitsprotokoll", - "Login": "Anmeldung", - "Login Riuscito": "Anmeldung erfolgreich", - "Logo": "Logo", - "Logo Applicazione (opzionale)": "Anwendungslogo (optional)", - "Logout effettuato con successo": "Abmeldung erfolgreich", - "MP3, M4A o OGG, max 500 MB": "MP3, M4A oder OGG, max. 500 MB", - "Mai generata": "Nie generiert", - "Mai utilizzata": "Nie verwendet", - "MaintenanceService ICS non generato": "MaintenanceService ICS nicht generiert", - "MaintenanceService connessione database fallita": "MaintenanceService Datenbankverbindung fehlgeschlagen", - "MaintenanceService errore attivazione prestiti": "MaintenanceService Fehler bei Ausleihe-Aktivierung", - "MaintenanceService errore attivazione prestito": "MaintenanceService Fehler bei Ausleihe-Aktivierung", - "MaintenanceService errore conversione prenotazioni": "MaintenanceService Fehler bei Vormerkungsumwandlung", - "MaintenanceService errore durante hook login admin": "MaintenanceService Fehler beim Admin-Login-Hook", - "MaintenanceService errore elaborazione prenotazione": "MaintenanceService Fehler bei Vormerkungsverarbeitung", - "MaintenanceService errore generazione ICS": "MaintenanceService Fehler bei ICS-Generierung", - "MaintenanceService errore notifiche": "MaintenanceService Benachrichtigungsfehler", - "MaintenanceService errore prenotazioni scadute": "MaintenanceService Fehler bei abgelaufenen Vormerkungen", - "MaintenanceService errore prestiti in ritardo": "MaintenanceService Fehler bei überfälligen Ausleihen", - "MaintenanceService errore ritiri scaduti": "MaintenanceService Fehler bei abgelaufenen Abholungen", - "MaintenanceService errore scadenza prenotazione": "MaintenanceService Fehler bei Vormerkungsablauf", - "MaintenanceService errore scadenza ritiro": "MaintenanceService Fehler bei Abholfristablauf", - "MaintenanceService eseguito al login admin": "MaintenanceService bei Admin-Anmeldung ausgeführt", - "MaintenanceService prenotazione convertita in prestito": "MaintenanceService Vormerkung in Ausleihe umgewandelt", - "MaintenanceService prenotazione scaduta": "MaintenanceService Vormerkung abgelaufen", - "MaintenanceService ritiro scaduto": "MaintenanceService Abholung abgelaufen", - "Mancante": "Fehlend", - "Mantieni in ritardo": "Als überfällig beibehalten", - "Manuale": "Manuell", - "Manutenzione": "Wartung", - "Manutenzione Completa": "Vollständige Wartung", - "Manutenzione completata: %d record corretti": "Wartung abgeschlossen: %d Datensätze korrigiert", - "Manutenzione disattivata": "Wartung deaktiviert", - "Manutenzione giornaliera del database": "Tägliche Datenbankwartung", - "Mappa Interattiva": "Interaktive Karte", - "Mappa del sito per i motori di ricerca": "Sitemap für Suchmaschinen", - "Mappa non disponibile": "Karte nicht verfügbar", - "Mario": "Max", - "Marketing:": "Marketing:", - "Maschio": "Männlich", - "Max 10.000 righe • Max 100 copie per libro": "Max. 10.000 Zeilen • Max. 100 Exemplare pro Buch", - "Mediocre": "Mäßig", - "Membro": "Mitglied", - "Memory limit aumentato": "Speicherlimit erhöht", - "Mensola": "Regal", - "Mensola creata e %d posizioni generate.": "Regal erstellt und %d Positionen generiert.", - "Mensola creata.": "Regal erstellt.", - "Mensola eliminata": "Regal gelöscht", - "Mensole": "Regale", - "Menu": "Menü", - "Menu \"Prestiti\" nell'admin sidebar": "Menü \"Ausleihen\" in der Admin-Seitenleiste", - "Menu Principale": "Hauptmenü", - "Merge - Aggiungi e aggiorna (mantiene dati esistenti)": "Zusammenführen – Hinzufügen und aktualisieren (behält vorhandene Daten bei)", - "Merge completato": "Zusammenführung abgeschlossen", - "Merge completato: %d aggiunti, %d aggiornati, %d invariati. Totale: %d voci.": "Zusammenführung abgeschlossen: %d hinzugefügt, %d aktualisiert, %d unverändert. Gesamt: %d Einträge.", - "Mese": "Monat", - "Messaggi": "Nachrichten", - "Messaggi di Contatto": "Kontaktnachrichten", - "Messaggio": "Nachricht", - "Messaggio inviato con successo! Ti risponderemo al più presto.": "Nachricht erfolgreich gesendet! Wir werden Ihnen so schnell wie möglich antworten.", - "Messaggio non trovato.": "Nachricht nicht gefunden.", - "Metadati:": "Metadaten:", - "Metodo di invio": "Versandmethode", - "Migrazione database": "Datenbankmigration", - "Minimo 8 caratteri": "Mindestens 8 Zeichen", - "Minimo 8 caratteri, con lettere maiuscole, minuscole e numeri": "Mindestens 8 Zeichen, mit Groß- und Kleinbuchstaben sowie Zahlen", - "Mittente": "Absender", - "Mittente (email)": "Absender (E-Mail)", - "Mittente (nome)": "Absender (Name)", - "Modalità Catalogo": "Katalogmodus", - "Modalità Solo Catalogo": "Nur-Katalog-Modus", - "Modalità di importazione": "Importmodus", - "Modalità manutenzione disattivata": "Wartungsmodus deaktiviert", - "Modalità manutenzione rimossa automaticamente (scaduta)": "Wartungsmodus automatisch entfernt (abgelaufen)", - "Moderatore": "Moderator", - "Modifica": "Bearbeiten", - "Modifica %s": "%s bearbeiten", - "Modifica Autore": "Autor bearbeiten", - "Modifica Autore:": "Autor bearbeiten:", - "Modifica Chi Siamo": "Über uns bearbeiten", - "Modifica Editore": "Verlag bearbeiten", - "Modifica Evento": "Veranstaltung bearbeiten", - "Modifica Evento: %s": "Veranstaltung bearbeiten: %s", - "Modifica Homepage": "Startseite bearbeiten", - "Modifica Libro": "Buch bearbeiten", - "Modifica Lingua:": "Sprache bearbeiten:", - "Modifica Prenotazione": "Vormerkung bearbeiten", - "Modifica Prenotazione #%s": "Vormerkung #%s bearbeiten", - "Modifica Route": "Route bearbeiten", - "Modifica Route Tradotte": "Übersetzte Routen bearbeiten", - "Modifica Stato Copia": "Exemplar-Status bearbeiten", - "Modifica Utente": "Benutzer bearbeiten", - "Modifica i contenuti della homepage: hero, features, CTA e immagine di sfondo": "Inhalte der Startseite bearbeiten: Hero, Features, CTA und Hintergrundbild", - "Modifica il contenuto e le impostazioni della pagina": "Seiteninhalt und Einstellungen bearbeiten", - "Modifica le informazioni dell'evento": "Veranstaltungsinformationen bearbeiten", - "Modifica le pagine statiche del sito": "Statische Seiten der Website bearbeiten", - "Modifica prestito": "Ausleihe bearbeiten", - "Modifica prestito #%s": "Ausleihe #%s bearbeiten", - "Modifica profilo": "Profil bearbeiten", - "Modifica stato": "Status bearbeiten", - "Modifica utente": "Benutzer bearbeiten", - "Modifiche non salvate": "Nicht gespeicherte Änderungen", - "Modulo": "Modul", - "Molto buono": "Sehr gut", - "Mondadori": "Mondadori", - "Monitora tentativi di login e eventi di sicurezza": "Anmeldeversuche und Sicherheitsereignisse überwachen", - "Mostra": "Anzeigen", - "Mostra API Key": "API-Schlüssel anzeigen", - "Mostra Cookie Analitici": "Analyse-Cookies anzeigen", - "Mostra Cookie di Marketing": "Marketing-Cookies anzeigen", - "Mostra _MENU_ libri": "_MENU_ Bücher anzeigen", - "Mostra categoria \\": "Kategorie anzeigen \\", - "Mostra filtri": "Filter anzeigen", - "Mostra gli ultimi libri aggiunti al catalogo": "Die zuletzt zum Katalog hinzugefügten Bücher anzeigen", - "Mostra questa guida": "Diese Anleitung anzeigen", - "Motivo del rifiuto (opzionale)": "Ablehnungsgrund (optional)", - "Motivo del rifiuto (opzionale):": "Ablehnungsgrund (optional):", - "N. Inventario": "Inventar-Nr.", - "N. Libri": "Anz. Bücher", - "N/D": "k. A.", - "Narrativa": "Belletristik", - "Nascita a": "Geburtsdatum bis", - "Nascita da": "Geburtsdatum von", - "Nascondi": "Ausblenden", - "Nascondi API Key": "API-Schlüssel ausblenden", - "Nascondi filtri": "Filter ausblenden", - "Nascondi se il sito non utilizza cookie di marketing o advertising": "Ausblenden, wenn die Website keine Marketing- oder Werbe-Cookies verwendet", - "Nascondi se il sito non utilizza strumenti di analytics (es. Google Analytics)": "Ausblenden, wenn die Website keine Analysetools verwendet (z. B. Google Analytics)", - "Nascosto": "Verborgen", - "Nato il %s": "Geboren am %s", - "Nazionalità": "Nationalität", - "Nederlands (NL)": "Niederländisch (NL)", - "Nei Preferiti": "In Favoriten", - "Nella collezione": "In der Sammlung", - "Nessun Problema": "Keine Probleme", - "Nessun aggiornamento": "Keine Aktualisierungen", - "Nessun aggiornamento registrato": "Keine Aktualisierungen verzeichnet", - "Nessun autore selezionato": "Keine Autoren ausgewählt", - "Nessun autore trovato": "Keine Autoren gefunden", - "Nessun autore trovato, premi Invio per aggiungerne uno nuovo": "Kein Autor gefunden, drücken Sie Enter, um einen neuen hinzuzufügen", - "Nessun backup disponibile": "Keine Backups verfügbar", - "Nessun dato": "Keine Daten", - "Nessun dato trovato su LibreriaUniversitaria/Feltrinelli.": "Keine Daten auf LibreriaUniversitaria/Feltrinelli gefunden.", - "Nessun dato.": "Keine Daten.", - "Nessun editore selezionato": "Keine Verlage ausgewählt", - "Nessun editore trovato": "Keine Verlage gefunden", - "Nessun editore trovato per": "Kein Verlag gefunden für", - "Nessun editore trovato per \"${query}\" — premi Invio per crearne uno nuovo.": "Kein Verlag für \"${query}\" gefunden — drücken Sie Enter, um einen neuen anzulegen.", - "Nessun elemento trovato": "Keine Elemente gefunden", - "Nessun errore": "Keine Fehler", - "Nessun evento": "Keine Veranstaltungen", - "Nessun evento in programma": "Keine Veranstaltungen geplant", - "Nessun file caricato": "Keine Datei hochgeladen", - "Nessun file caricato.": "Keine Datei hochgeladen.", - "Nessun file di traduzione caricato. Carica un file JSON per abilitare questa lingua.": "Keine Übersetzungsdatei hochgeladen. Laden Sie eine JSON-Datei hoch, um diese Sprache zu aktivieren.", - "Nessun genere trovato": "Keine Genres gefunden", - "Nessun import registrato": "Keine Importe aufgezeichnet", - "Nessun libro": "Keine Bücher", - "Nessun libro ancora inserito": "Noch keine Bücher hinzugefügt", - "Nessun libro con collocazione trovato": "Keine Bücher mit Standort gefunden", - "Nessun libro nel database": "Keine Bücher in der Datenbank", - "Nessun libro recente": "Keine aktuellen Bücher", - "Nessun libro recente disponibile": "Keine aktuellen Bücher verfügbar", - "Nessun libro registrato": "Keine Bücher registriert", - "Nessun libro selezionato": "Keine Bücher ausgewählt", - "Nessun libro trovato": "Keine Bücher gefunden", - "Nessun log disponibile": "Keine Protokolle verfügbar", - "Nessun logo caricato": "Kein Logo hochgeladen", - "Nessun messaggio ricevuto": "Keine Nachrichten erhalten", - "Nessun motivo specificato": "Kein Grund angegeben", - "Nessun plugin installato": "Keine Plugins installiert", - "Nessun prestito attivo": "Keine aktiven Ausleihen", - "Nessun prestito disponibile per generare il grafico": "Keine Ausleihen verfügbar, um das Diagramm zu erstellen", - "Nessun prestito in attesa di ritiro": "Keine Ausleihen warten auf Abholung", - "Nessun prestito in corso": "Keine laufenden Ausleihen", - "Nessun prestito passato": "Keine vergangenen Ausleihen", - "Nessun prestito registrato": "Keine Ausleihen registriert", - "Nessun prestito scaduto": "Keine überfälligen Ausleihen", - "Nessun prestito trovato": "Keine Ausleihen gefunden", - "Nessun prestito trovato.": "Keine Ausleihen gefunden.", - "Nessun risultato": "Keine Ergebnisse", - "Nessun risultato trovato": "Keine Ergebnisse gefunden", - "Nessun risultato trovato con i filtri applicati": "Keine Ergebnisse mit den angewendeten Filtern gefunden", - "Nessun risultato trovato per": "Keine Ergebnisse gefunden für", - "Nessun risultato trovato per la ricerca.": "Keine Ergebnisse für die Suche gefunden.", - "Nessun ritiro": "Keine Abholungen", - "Nessun server configurato. Aggiungine uno per iniziare.": "Keine Server konfiguriert. Fügen Sie einen hinzu, um zu beginnen.", - "Nessun sottogenere": "Kein Untergenre", - "Nessun sottogenere definito": "Keine Untergenres definiert", - "Nessun suggerimento": "Kein Vorschlag", - "Nessun suggerimento disponibile": "Kein Vorschlag verfügbar", - "Nessun titolo corrisponde al filtro corrente.": "Kein Titel entspricht dem aktuellen Filter.", - "Nessuna": "Keine", - "Nessuna API key configurata": "Keine API-Schlüssel konfiguriert", - "Nessuna alternativa disponibile": "Keine Alternativen verfügbar", - "Nessuna collocazione trovata": "Keine Standorte gefunden", - "Nessuna copertina caricata": "Kein Cover hochgeladen", - "Nessuna copertina da scaricare": "Keine Cover zum Abrufen vorhanden", - "Nessuna copia attualmente disponibile": "Kein Exemplar derzeit verfügbar", - "Nessuna copia disponibile nelle date richieste": "Keine Exemplare für die gewünschten Daten verfügbar", - "Nessuna copia disponibile per il periodo richiesto": "Kein Exemplar für den angeforderten Zeitraum verfügbar", - "Nessuna copia disponibile per il periodo richiesto.": "Kein Exemplar für den gewünschten Zeitraum verfügbar.", - "Nessuna copia disponibile per questo libro": "Kein Exemplar für dieses Buch verfügbar", - "Nessuna copia registrata": "Keine Exemplare registriert", - "Nessuna descrizione disponibile": "Keine Beschreibung verfügbar", - "Nessuna descrizione disponibile per questo libro.": "Keine Beschreibung für dieses Buch verfügbar.", - "Nessuna fonte di scraping disponibile. Installa almeno un plugin di scraping (es. Open Library o Scraping Pro).": "Keine Scraping-Quelle verfügbar. Installieren Sie mindestens ein Scraping-Plugin (z.B. Open Library oder Scraping Pro).", - "Nessuna lingua configurata": "Keine Sprachen konfiguriert", - "Nessuna mensola per questo scaffale. Creane una!": "Keine Regale für dieses Regalgestell. Erstellen Sie eines!", - "Nessuna mensola. Creane una per iniziare!": "Keine Regale vorhanden. Erstellen Sie eines, um zu beginnen!", - "Nessuna notifica": "Keine Benachrichtigungen", - "Nessuna prenotazione": "Keine Vormerkungen", - "Nessuna prenotazione attiva": "Keine aktiven Vormerkungen", - "Nessuna recensione": "Keine Rezensionen", - "Nessuna recensione approvata": "Keine genehmigten Rezensionen", - "Nessuna recensione in attesa": "Keine ausstehenden Rezensionen", - "Nessuna recensione rifiutata": "Keine abgelehnten Rezensionen", - "Nessuna ricerca recente": "Keine kürzlichen Suchen", - "Nessuna richiesta": "Keine Anfragen", - "Nessuna richiesta da approvare": "Keine Anfragen zu genehmigen", - "Nessuna richiesta in attesa": "Keine ausstehenden Anfragen", - "Nessuna richiesta in attesa di approvazione.": "Keine Anfragen zur Genehmigung ausstehend.", - "Nessuna selezione": "Keine Auswahl", - "Nessuna sessione attiva. Le sessioni vengono create quando accedi con 'Ricordami' selezionato.": "Keine aktiven Sitzungen. Sitzungen werden erstellt, wenn Sie sich mit aktiviertem 'Angemeldet bleiben' anmelden.", - "Nessuno": "Keine", - "Nessuno scaffale. Creane uno per iniziare!": "Keine Regalgestelle vorhanden. Erstellen Sie eines, um zu beginnen!", - "Nessuno storico": "Kein Verlauf", - "No": "Nein", - "Nodo mancante di codice a profondità %d.": "Knoten ohne Code auf Tiefe %d.", - "Nome": "Vorname", - "Nome *": "Name *", - "Nome Applicazione": "Anwendungsname", - "Nome Categoria": "Kategoriename", - "Nome Cognome": "Vor- und Nachname", - "Nome Database": "Datenbankname", - "Nome Editore": "Verlagsname", - "Nome File": "Dateiname", - "Nome Indice": "Indexname", - "Nome Inglese": "Englischer Name", - "Nome Nativo": "Einheimischer Name", - "Nome Referente": "Name der Kontaktperson", - "Nome Server": "Servername", - "Nome applicazione": "Anwendungsname", - "Nome autore": "Autorenname", - "Nome backup non specificato": "Backup-Name nicht angegeben", - "Nome backup non valido": "Ungültiger Backup-Name", - "Nome categoria esistente": "Vorhandener Kategoriename", - "Nome completo": "Vollständiger Name", - "Nome cookie analitici": "Name der Analyse-Cookies", - "Nome cookie essenziali": "Name der essentiellen Cookies", - "Nome cookie marketing": "Name der Marketing-Cookies", - "Nome d'arte o pseudonimo": "Künstlername oder Pseudonym", - "Nome del traduttore (se applicabile)": "Name des Übersetzers (falls zutreffend)", - "Nome dell'editore": "Verlagsname", - "Nome dell'illustratore (se applicabile)": "Name des Illustrators (falls zutreffend)", - "Nome della casa editrice": "Verlagsname", - "Nome della classificazione": "Name der Klassifikation", - "Nome della lingua in inglese (es. Italian, English, Spanish)": "Name der Sprache auf Englisch (z. B. Italian, English, Spanish)", - "Nome della lingua nella lingua stessa (es. Italiano, English, Español)": "Name der Sprache in der Sprache selbst (z. B. Italiano, English, Español)", - "Nome e cognome del referente": "Vor- und Nachname der Kontaktperson", - "Nome e cognome dell'autore": "Vor- und Nachname des Autors", - "Nome e cognome sono obbligatori.": "Vor- und Nachname sind erforderlich.", - "Nome editore": "Verlagsname", - "Nome editore...": "Verlagsname...", - "Nome file non valido.": "Ungültiger Dateiname.", - "Nome o cognome troppo lungo (massimo 100 caratteri)": "Vor- oder Nachname zu lang (maximal 100 Zeichen)", - "Nome plugin non valido. Usa solo lettere, numeri, trattini o underscore.": "Ungültiger Plugin-Name. Verwenden Sie nur Buchstaben, Zahlen, Bindestriche oder Unterstriche.", - "Nome, cognome, email...": "Name, Nachname, E-Mail...", - "Nome, pseudonimo, biografia...": "Name, Pseudonym, Biografie...", - "Nome:": "Name:", - "Non Disponibile": "Nicht verfügbar", - "Non Disponibili": "Nicht verfügbar", - "Non ancora restituito": "Noch nicht zurückgegeben", - "Non assegnata": "Nicht zugewiesen", - "Non autenticato": "Nicht authentifiziert", - "Non autorizzato": "Nicht autorisiert", - "Non autorizzato.": "Nicht autorisiert.", - "Non chiudere questa finestra": "Schließen Sie dieses Fenster nicht", - "Non ci sono azioni urgenti da completare.": "Keine dringenden Aktionen zu erledigen.", - "Non ci sono dati da esportare": "Keine Daten zum Exportieren vorhanden", - "Non ci sono nuovi arrivi al momento.": "Derzeit gibt es keine Neuerscheinungen.", - "Non ci sono recensioni in attesa di approvazione.": "Keine Rezensionen zur Genehmigung ausstehend.", - "Non ci sono richieste di prestito in attesa di approvazione.": "Keine Ausleih-Anfragen zur Genehmigung ausstehend.", - "Non disponibile": "Nicht verfügbar", - "Non disponibile nella data selezionata": "Am gewählten Datum nicht verfügbar", - "Non disponibile ora": "Derzeit nicht verfügbar", - "Non eliminabile": "Nicht löschbar", - "Non hai ancora creato nessun evento. Inizia creando il tuo primo evento.": "Sie haben noch keine Veranstaltungen erstellt. Beginnen Sie mit der Erstellung Ihrer ersten Veranstaltung.", - "Non hai ancora lasciato recensioni": "Sie haben noch keine Rezensionen verfasst", - "Non hai libri in prestito al momento": "Sie haben derzeit keine ausgeliehenen Bücher", - "Non hai prenotazioni attive al momento": "Sie haben derzeit keine aktiven Vormerkungen", - "Non hai prestiti in corso al momento.": "Sie haben derzeit keine aktiven Ausleihen.", - "Non hai prestiti passati": "Sie haben keine vergangenen Ausleihen", - "Non hai un account?": "Sie haben noch kein Konto?", - "Non includere tag": "Keine Tags einfügen", - "Non includere tag ": "Keine -Tags einfügen", - "Non installato": "Nicht installiert", - "Non letto": "Ungelesen", - "Non puoi eliminare l'installer finché non completi l'installazione delle dipendenze PHP.": "Sie können den Installer erst löschen, wenn die Installation der PHP-Abhängigkeiten abgeschlossen ist.", - "Non puoi recensire questo libro (devi averlo preso in prestito e non averlo già recensito)": "Sie können dieses Buch nicht rezensieren (Sie müssen es ausgeliehen haben und dürfen es nicht bereits rezensiert haben)", - "Non rinnovabile: prestito in ritardo": "Nicht verlängerbar: Ausleihe überfällig", - "Non scrivibile": "Nicht beschreibbar", - "Non selezionato": "Nicht ausgewählt", - "Non specificata": "Nicht angegeben", - "Non specificato": "Nicht angegeben", - "Non usare spazi nelle route": "Verwenden Sie keine Leerzeichen in Routen", - "Non è possibile creare la directory: %s": "Verzeichnis kann nicht erstellt werden: %s", - "Non è stato possibile eliminare l'utente. Controlla la console.": "Der Benutzer konnte nicht gelöscht werden. Überprüfen Sie die Konsole.", - "Non è stato trovato alcun aggiornamento": "Keine Aktualisierungen gefunden", - "Nota:": "Hinweis:", - "Nota: Impostare come predefinita disattiverà lo status di predefinita per tutte le altre lingue.": "Hinweis: Das Festlegen als Standard deaktiviert den Standardstatus für alle anderen Sprachen.", - "Nota: in produzione limita questa funzione agli amministratori.": "Hinweis: In der Produktionsumgebung diese Funktion auf Administratoren beschränken.", - "Note": "Notizen", - "Note (opzionali)": "Notizen (optional)", - "Note Importanti": "Wichtige Hinweise", - "Note Varie": "Verschiedene Notizen", - "Note aggiuntive o osservazioni particolari...": "Zusätzliche Notizen oder besondere Anmerkungen...", - "Note importanti:": "Wichtige Hinweise:", - "Note interne": "Interne Notizen", - "Note sul prestito": "Ausleihe-Notizen", - "Note sulla restituzione": "Rückgabe-Notizen", - "Note tecniche": "Technische Hinweise", - "Notifica agli amministratori quando viene inoltrata una nuova richiesta di prestito.": "Benachrichtigt Administratoren, wenn eine neue Ausleihanfrage eingereicht wird.", - "Notifica agli utenti quando il prestito è scaduto e deve essere restituito.": "Benachrichtigt die Benutzer, wenn die Ausleihe abgelaufen ist und das Buch zurückgegeben werden muss.", - "Notifica copia non disponibile creata": "Benachrichtigung über nicht verfügbares Exemplar erstellt", - "Notifica prenotazione disponibile inviata": "Benachrichtigung über verfügbare Vormerkung gesendet", - "Notifica prestito fallita": "Ausleihbenachrichtigung fehlgeschlagen", - "Notifica richiesta prestito fallita": "Benachrichtigung über Ausleihanfrage fehlgeschlagen", - "Notifiche": "Benachrichtigungen", - "Notifiche Automatiche": "Automatische Benachrichtigungen", - "Notifiche Prestiti": "Ausleihe-Benachrichtigungen", - "Notifiche disponibilità libri in wishlist": "Benachrichtigungen zur Verfügbarkeit von Büchern auf der Wunschliste", - "Notifiche prestiti scaduti": "Benachrichtigungen über überfällige Ausleihen", - "Novità nelle versioni successive": "Neuigkeiten in kommenden Versionen", - "Numero Inventario": "Inventarnummer", - "Numero Libri": "Anzahl Bücher", - "Numero Pagine": "Seitenzahl", - "Numero Serie": "Reihennummer", - "Numero di Pagine": "Seitenzahl", - "Numero di copie non valido.": "Ungültige Anzahl von Exemplaren.", - "Numero di libri": "Anzahl der Bücher", - "Numero inventario": "Inventarnummer", - "Numero massimo di righe superato (%d)": "Maximale Zeilenanzahl überschritten (%d)", - "Numero massimo di righe superato (%d). Dividi il file in parti più piccole.": "Maximale Zeilenanzahl überschritten (%d). Teilen Sie die Datei in kleinere Teile auf.", - "Numero o descrizione dell'edizione": "Ausgabenummer oder -beschreibung", - "Numero prenotazioni attive": "Anzahl aktiver Vormerkungen", - "Numero serie": "Reihennummer", - "Numero tessera": "Ausweisnummer", - "Nuova Collocazione": "Neuer Standort", - "Nuova Password": "Neues Passwort", - "Nuova password": "Neues Passwort", - "Nuova prenotazione": "Neue Vormerkung", - "Nuova recensione (Admin)": "Neue Rezension (Admin)", - "Nuova recensione da approvare": "Neue Rezension zur Genehmigung", - "Nuova registrazione utente": "Neue Benutzerregistrierung", - "Nuova ricerca": "Neue Suche", - "Nuova richiesta di prestito": "Neue Ausleih-Anfrage", - "Nuovo": "Neu", - "Nuovo Autore": "Neuer Autor", - "Nuovo Editore": "Neuer Verlag", - "Nuovo Evento": "Neue Veranstaltung", - "Nuovo Genere": "Neues Genre", - "Nuovo Libro": "Neues Buch", - "Nuovo Prestito": "Neue Ausleihe", - "Nuovo Utente": "Neuer Benutzer", - "Nuovo aggiornamento disponibile!": "Neue Aktualisierung verfügbar!", - "Nuovo editore:": "Neuer Verlag:", - "Nuovo libro": "Neues Buch", - "Nuovo messaggio di contatto": "Neue Kontaktnachricht", - "Nuovo nome (opzionale)": "Neuer Name (optional)", - "Nuovo utente": "Neuer Benutzer", - "OFF": "Aus", - "OK": "OK", - "ON": "Ein", - "Obbligatorio": "Erforderlich", - "Obbligatorio per utenti non amministratori.": "Erforderlich für Benutzer ohne Administratorrechte.", - "Obsoleto": "Veraltet", - "Occupato": "Belegt", - "Occupato (in ritardo)": "Belegt (überfällig)", - "Occupato (prestito attivo)": "Belegt (aktive Ausleihe)", - "Offline": "Offline", - "Oggetto": "Betreff", - "Oggetto dell'email": "E-Mail-Betreff", - "Oggi": "Heute", - "Ogni 15 minuti nei giorni lavorativi (8:00-18:00)": "Alle 15 Minuten an Werktagen (8:00–18:00)", - "Ogni errore include: numero riga, titolo libro, tipo errore e messaggio dettagliato": "Jeder Fehler enthält: Zeilennummer, Buchtitel, Fehlertyp und detaillierte Meldung", - "Ogni route deve iniziare con": "Jede Route muss beginnen mit", - "Online": "Online", - "Open Graph (Facebook)": "Open Graph (Facebook)", - "Open Graph (Facebook, LinkedIn)": "Open Graph (Facebook, LinkedIn)", - "Operation completed": "Vorgang abgeschlossen", - "Operation failed": "Vorgang fehlgeschlagen", - "Operatore": "Operator", - "Operazione annullata": "Vorgang abgebrochen", - "Operazione completata": "Vorgang abgeschlossen", - "Operazione fallita": "Vorgang fehlgeschlagen", - "Operazione non consentita": "Vorgang nicht erlaubt", - "Operazione non riuscita": "Vorgang fehlgeschlagen", - "Operazioni": "Vorgänge", - "Opere": "Werke", - "Oppure accedere a /installer/?force=1 per forzare una nuova procedura": "Oder gehen Sie zu /installer/?force=1, um eine Neuinstallation zu erzwingen", - "Oppure naviga per categorie": "Oder nach Kategorien durchsuchen", - "Oppure naviga per categorie:": "Oder nach Kategorien durchsuchen:", - "Oppure usa il terminale SSH del tuo hosting (cPanel, Plesk, etc.)": "Oder verwenden Sie das SSH-Terminal Ihres Hostings (cPanel, Plesk, etc.)", - "Ops, qualcosa è andato storto": "Hoppla, etwas ist schiefgelaufen", - "Opzionale": "Optional", - "Opzionale per amministratori": "Optional für Administratoren", - "Opzione 1:": "Option 1:", - "Opzione 2:": "Option 2:", - "Opzione 3:": "Option 3:", - "Ora Evento": "Veranstaltungszeit", - "Ora puoi accedere con la tua nuova password.": "Sie können sich jetzt mit Ihrem neuen Passwort anmelden.", - "Ora puoi ricaricare questa pagina - il warning sparirà se tutto è OK.": "Sie können diese Seite jetzt neu laden – die Warnung verschwindet, wenn alles in Ordnung ist.", - "Ordina Sezioni Homepage": "Homepage-Bereiche sortieren", - "Ordina per": "Sortieren nach", - "Ordinamento": "Sortierung", - "Ordinamento libri": "Büchersortierung", - "Ordine salvato con successo!": "Reihenfolge erfolgreich gespeichert!", - "Ordine:": "Reihenfolge:", - "Organizza e gestisci i generi letterari della biblioteca": "Literarische Genres der Bibliothek organisieren und verwalten", - "Organizza scaffali, mensole e posizioni per la biblioteca fisica": "Regale, Regalböden und Positionen für die physische Bibliothek organisieren", - "Ospite": "Gast", - "Ottieni le chiavi da Google reCAPTCHA": "Schlüssel von Google reCAPTCHA erhalten", - "Ottimizza l'evento per i motori di ricerca e i social media": "Veranstaltung für Suchmaschinen und soziale Medien optimieren", - "Ottimizzato": "Optimiert", - "Ottimizzazione": "Optimierung", - "Ottimizzazione Indici Database": "Datenbank-Indexoptimierung", - "Ottimizzazione SEO (Meta Tags)": "SEO-Optimierung (Meta-Tags)", - "Ottimizzazione SEO e Social Media": "SEO- und Social-Media-Optimierung", - "Output atteso: cartella vendor/ con sottocartelle (slim, monolog, etc.)": "Erwartete Ausgabe: Ordner vendor/ mit Unterordnern (slim, monolog, etc.)", - "PDF": "PDF", - "PDF generato!": "PDF erstellt!", - "PDF o ePub, max 100 MB": "PDF oder ePub, max. 100 MB", - "PDF prestito non generato": "Ausleih-PDF nicht erstellt", - "PHP mail()": "PHP mail()", - "PHP mail() - Predefinito": "PHP mail() – Standard", - "PHPMailer": "PHPMailer", - "PNG, SVG, JPG o WebP (max 2MB)": "PNG, SVG, JPG oder WebP (max. 2 MB)", - "Pacchetto di aggiornamento non valido: manca %s": "Ungültiges Aktualisierungspaket: %s fehlt", - "Paese": "Land", - "Pagina": "Seite", - "Pagina Cookie": "Cookie-Seite", - "Pagina Cookie Policy": "Cookie-Richtlinien-Seite", - "Pagina Non Trovata": "Seite nicht gefunden", - "Pagina \\": "Seite \\", - "Pagina aggiornata con successo.": "Seite erfolgreich aktualisiert.", - "Pagina attiva (visibile sul sito)": "Aktive Seite (auf der Website sichtbar)", - "Pagina non trovata.": "Seite nicht gefunden.", - "Pagina precedente": "Vorherige Seite", - "Pagina successiva": "Nächste Seite", - "Paginazione eventi": "Veranstaltungspaginierung", - "Pagine": "Seiten", - "Pannello": "Bereich", - "Panoramica completa di prestiti, ritiri e prenotazioni": "Vollständige Übersicht über Ausleihen, Abholungen und Vormerkungen", - "Panoramica generale": "Allgemeine Übersicht", - "Panoramica generale di Pinakes": "Allgemeine Übersicht über Pinakes", - "Paragrafo": "Absatz", - "Paragraph": "Absatz", - "Parametri di Ricerca": "Suchparameter", - "Parametri non validi": "Ungültige Parameter.", - "Parametro ISBN mancante.": "Fehlender ISBN-Parameter.", - "Parametro category_id obbligatorio.": "Parameter category_id ist erforderlich.", - "Parametro code obbligatorio.": "Parameter code ist erforderlich.", - "Parametro cover_url mancante.": "Fehlender Parameter cover_url.", - "Parametro division_id obbligatorio.": "Parameter division_id ist erforderlich.", - "Parole Chiave": "Schlüsselwörter", - "Parole Chiave SEO": "SEO-Schlüsselwörter", - "Parole chiave": "Schlüsselwörter", - "Parole chiave SEO": "SEO-Schlüsselwörter", - "Parole chiave per i motori di ricerca (impatto SEO limitato). Separate da virgola.": "Schlüsselwörter für Suchmaschinen (begrenzter SEO-Einfluss). Durch Komma getrennt.", - "Passo": "Schritt", - "Password": "Passwort", - "Password aggiornata con successo.": "Passwort erfolgreich aktualisiert.", - "Password dimenticata": "Passwort vergessen", - "Password dimenticata?": "Passwort vergessen?", - "Password iniziale": "Anfangspasswort", - "Password resettata con successo!": "Passwort erfolgreich zurückgesetzt!", - "Password troppo lunga (massimo 128 caratteri)": "Passwort zu lang (maximal 128 Zeichen)", - "Pattern URL": "URL-Muster", - "Pendente": "Ausstehend", - "Pending": "Ausstehend", - "Per aggiornare automaticamente la sitemap ogni giorno:": "Um die Sitemap täglich automatisch zu aktualisieren:", - "Per assistenza, contatta l'amministrazione della biblioteca.": "Für Unterstützung wenden Sie sich an die Bibliotheksverwaltung.", - "Per inserire il codice JavaScript Analytics (Google Analytics, Matomo, ecc.), vai su {{variabile}}
          per inserire dati dinamici.": "Passen Sie den Inhalt der automatischen E-Mails mit dem TinyMCE-Editor an. Verwenden Sie Platzhalter {{variable}}, um dynamische Daten einzufügen.", - "Personalizza il contenuto delle mail automatiche con l'editor TinyMCE. Usa i segnaposto sospeso e richiede approvazione. Scegli un'opzione:": "Dieser Benutzer ist im Status gesperrt und erfordert Genehmigung. Wählen Sie eine Option:", - "Radice": "Stammverzeichnis", - "Rallenta l'importazione": "Verlangsamt den Import", - "Recati in biblioteca durante gli orari di apertura per ritirare il libro.": "Besuchen Sie die Bibliothek während der Öffnungszeiten, um das Buch abzuholen.", - "Recensione (opzionale)": "Rezension (optional)", - "Recensione approvata": "Rezension genehmigt", - "Recensione del": "Rezension vom", - "Recensione eliminata": "Rezension gelöscht", - "Recensione inviata con successo!": "Rezension erfolgreich eingereicht!", - "Recensione inviata con successo! Sarà pubblicata dopo l'approvazione di un amministratore.": "Rezension erfolgreich eingereicht! Sie wird nach der Genehmigung durch einen Administrator veröffentlicht.", - "Recensione inviata!": "Rezension eingereicht!", - "Recensione per \"%s\" da %s - %s": "Rezension für \"%s\" von %s – %s", - "Recensione rifiutata": "Rezension abgelehnt", - "Recensioni": "Rezensionen", - "Recensioni Approvate": "Genehmigte Rezensionen", - "Recensioni Rifiutate": "Abgelehnte Rezensionen", - "Recensioni utenti": "Benutzerrezensionen", - "Recente": "Aktuell", - "Recupera Password": "Passwort wiederherstellen", - "Referente": "Ansprechperson", - "Registra Restituzione": "Rückgabe erfassen", - "Registra prestito": "Ausleihe erfassen", - "Registra restituzione": "Rückgabe erfassen", - "Registra restituzione prestito": "Ausleih-Rückgabe erfassen", - "Registra una prenotazione per permettere ad un utente di riservare un libro specifico": "Erfassen Sie eine Vormerkung, um einem Benutzer die Reservierung eines bestimmten Buches zu ermöglichen", - "Registrati": "Registrieren", - "Registrati Ora": "Jetzt registrieren", - "Registrato da": "Registriert von", - "Registrato il": "Registriert am", - "Registrazione": "Registrierung", - "Registrazione Completata": "Registrierung abgeschlossen", - "Registrazione completata": "Registrierung abgeschlossen", - "Registrazione completata! Effettua l'accesso": "Registrierung abgeschlossen! Bitte melden Sie sich an", - "Registrazione ricevuta": "Registrierung eingegangen", - "Registro delle migrazioni database applicate": "Register der angewendeten Datenbankmigrationen", - "Reimposta password": "Passwort zurücksetzen", - "Reindirizza automaticamente tutte le richieste HTTP a HTTPS": "Alle HTTP-Anfragen automatisch auf HTTPS umleiten", - "Reindirizzamento verso dominio non autorizzato bloccato.": "Weiterleitung zu einer nicht autorisierten Domain blockiert.", - "Reinstalla da Capo": "Von Grund auf neu installieren", - "Remoto": "Remote", - "Report": "Bericht", - "Report Integrità Dati": "Datenintegritätsbericht", - "Report e analisi": "Berichte und Analysen", - "Requisiti": "Anforderungen", - "Requisiti del plugin:": "Plugin-Anforderungen:", - "Requisiti di Sistema": "Systemanforderungen", - "Requisiti di sistema non soddisfatti": "Systemanforderungen nicht erfüllt", - "Requisiti:": "Voraussetzungen:", - "Requisito '%s' non soddisfatto": "Voraussetzung '%s' nicht erfüllt", - "Reset": "Zurücksetzen", - "Reset Filtri": "Filter zurücksetzen", - "Reset anni": "Jahre zurücksetzen", - "Resetta Password": "Passwort zurücksetzen", - "Recupera la tua password": "Stellen Sie Ihr Passwort wieder her", - "Abbiamo ricevuto una richiesta di reset della password per il tuo account.": "Wir haben eine Anfrage zum Zurücksetzen des Passworts für Ihr Konto erhalten.", - "Clicca sul pulsante qui sotto per resettare la tua password:": "Klicken Sie auf die Schaltfläche unten, um Ihr Passwort zurückzusetzen:", - "Oppure copia e incolla questo link nel tuo browser:": "Oder kopieren Sie diesen Link und fügen Sie ihn in Ihren Browser ein:", - "Questo link scadrà tra 2 ore.": "Dieser Link läuft in 2 Stunden ab.", - "Se non hai richiesto il reset della password, puoi ignorare questa email. Il tuo account rimane sicuro.": "Wenn Sie kein Zurücksetzen des Passworts angefordert haben, können Sie diese E-Mail ignorieren. Ihr Konto bleibt sicher.", - "Ciao": "Hallo", - "Restituito": "Zurückgegeben", - "Restituito in ritardo": "Verspätet zurückgegeben", - "Restituito regolarmente": "Fristgerecht zurückgegeben", - "Restituzione": "Rückgabe", - "Restituzione prestito": "Ausleih-Rückgabe", - "Restituzione prestito #%s": "Ausleih-Rückgabe #%s", - "Retention: 90 giorni": "Aufbewahrung: 90 Tage", - "Revocate %d sessioni": "%d Sitzungen widerrufen", - "Riassegnazione copia fallita": "Exemplar-Neuzuweisung fehlgeschlagen", - "Riassegnazione prenotazione nuova copia fallita": "Neuzuweisung der Vormerkung auf neues Exemplar fehlgeschlagen", - "Ricalcola Disponibilità": "Verfügbarkeit neu berechnen", - "Ricarica Dewey (seed)": "Dewey neu laden (Seed)", - "Ricarica Pagina": "Seite neu laden", - "Ricerca": "Suche", - "Ricerca Libro": "Buch suchen", - "Ricerca Utente": "Benutzer suchen", - "Ricerca in corso...": "Suche läuft...", - "Ricerca rapida": "Schnellsuche", - "Ricerche recenti": "Kürzliche Suchen", - "Riceverai un link di reset via email. Il link sarà valido per 24 ore.": "Sie erhalten einen Zurücksetzungslink per E-Mail. Der Link ist 24 Stunden gültig.", - "Riceverai una conferma via email appena la richiesta sarà approvata.": "Sie erhalten eine E-Mail-Bestätigung, sobald die Anfrage genehmigt wurde.", - "Ricevuta di Prestito": "Ausleihquittung", - "Ricevuta di prestito bibliotecario": "Bibliotheks-Ausleihquittung", - "Ricevuto": "Empfangen", - "Richiede App:": "Erfordert App:", - "Richiede PHP:": "Erfordert PHP:", - "Richiedi Prestito": "Ausleihe anfordern", - "Richiedi approvazione admin dopo la conferma email": "Administrator-Genehmigung nach E-Mail-Bestätigung erforderlich", - "Richiedono attenzione immediata": "Erfordern sofortige Aufmerksamkeit", - "Richiesta Inviata!": "Anfrage gesendet!", - "Richiesta Pendente": "Ausstehende Anfrage", - "Richiesta Prestito": "Ausleihanfrage", - "Richiesta del %s": "Anfrage vom %s", - "Richiesta di prestito dal %1$s al %2$s": "Ausleihanfrage vom %1$s bis %2$s", - "Richiesta di prestito dal %s per 1 mese": "Ausleihanfrage ab %s für 1 Monat", - "Richiesta di prestito inviata con successo": "Ausleihanfrage erfolgreich gesendet", - "Richiesta di prestito per \"%s\" da %s dal %s al %s": "Ausleihanfrage für \"%s\" von %s vom %s bis %s", - "Richiesta di prestito per \\": "Ausleihanfrage für \\", - "Richiesta fallita:": "Anfrage fehlgeschlagen:", - "Richiesta inviata con successo!": "Anfrage erfolgreich gesendet!", - "Richiesta inviata!": "Anfrage gesendet!", - "Richiesta manuale": "Manuelle Anfrage", - "Richiesta prestito": "Ausleihanfrage", - "Richiesta rifiutata": "Anfrage abgelehnt", - "Richieste Manuali": "Manuelle Anfragen", - "Richieste Pendenti": "Ausstehende Anfragen", - "Richieste di Prestito": "Ausleihanfragen", - "Richieste di Prestito in Attesa": "Ausstehende Ausleihanfragen", - "Richieste in Attesa": "Ausstehende Anfragen", - "Richieste in Sospeso": "Ausstehende Anfragen", - "Richieste in sospeso": "Ausstehende Anfragen", - "Richieste pendenti": "Ausstehende Anfragen", - "Richiesto": "Erforderlich", - "Richiesto il": "Angefordert am", - "Richiesto il %s": "Angefordert am %s", - "Richiesto:": "Erforderlich:", - "Ricordami": "Angemeldet bleiben", - "Ricordi la password?": "Erinnern Sie sich an Ihr Passwort?", - "Riepilogo Installazione": "Installationszusammenfassung", - "Riepilogo wishlist": "Wunschlisten-Zusammenfassung", - "Rifiuta": "Ablehnen", - "Rifiuta Prestito?": "Ausleihe ablehnen?", - "Rifiuta non essenziali": "Nicht-essentielle ablehnen", - "Rifiuta prestito": "Ausleihe ablehnen", - "Rifiuta recensione": "Rezension ablehnen", - "Rifiutata": "Abgelehnt", - "Rifiutata il": "Abgelehnt am", - "Rifiutato": "Abgelehnt", - "Rifiuterai questa richiesta di prestito?": "Möchten Sie diese Ausleihanfrage ablehnen?", - "Riga %d (%s): %s": "Zeile %d (%s): %s", - "Riga %d: numero di colonne non corrispondente": "Zeile %d: Spaltenanzahl stimmt nicht überein", - "Rigenera Sitemap": "Sitemap neu generieren", - "Rigenera adesso": "Jetzt neu generieren", - "Rimuovere dalla wishlist?": "Von der Wunschliste entfernen?", - "Rimuovere i libri associati prima di eliminare l'autore": "Entfernen Sie die zugehörigen Bücher, bevor Sie den Autor löschen", - "Rimuovere i libri dell'editore prima di eliminarlo": "Entfernen Sie die Bücher des Verlags, bevor Sie ihn löschen", - "Rimuovi": "Entfernen", - "Rimuovi dai Preferiti": "Aus Favoriten entfernen", - "Rimuovi dalla wishlist": "Von der Wunschliste entfernen", - "Rimuovi editore": "Verlag entfernen", - "Rimuovi filtro": "Filter entfernen", - "Rimuovi immagine": "Bild entfernen", - "Rimuovi immagine attuale": "Aktuelles Bild entfernen", - "Rimuovi immagine di sfondo attuale": "Aktuelles Hintergrundbild entfernen", - "Rimuovi logo attuale": "Aktuelles Logo entfernen", - "Rimuovi tutti i filtri": "Alle Filter entfernen", - "Rinnova": "Verlängern", - "Rinnova prestito (+14 giorni)": "Ausleihe verlängern (+14 Tage)", - "Rinnova prestito?": "Ausleihe verlängern?", - "Rinnovare il prestito? La scadenza verrà estesa di 14 giorni.": "Ausleihe verlängern? Das Fälligkeitsdatum wird um 14 Tage verlängert.", - "Rinnovi": "Verlängerungen", - "Rinnovi Effettuati:": "Durchgeführte Verlängerungen:", - "Rinnovi effettuati": "Durchgeführte Verlängerungen", - "Rinnovo prestito fallito": "Ausleihverlängerung fehlgeschlagen", - "Riordina trascinando gli elementi": "Durch Ziehen der Elemente neu anordnen", - "Ripara automaticamente gli errori rilevati": "Erkannte Fehler automatisch reparieren", - "Ripeti la password": "Passwort wiederholen", - "Ripristina": "Zurücksetzen", - "Ripristina Default": "Standard wiederherstellen", - "Ripristinare i colori?": "Farben zurücksetzen?", - "Ripristinare questo backup?": "Diese Sicherung wiederherstellen?", - "Ripristinato": "Wiederhergestellt", - "Ripristino": "Wiederherstellung", - "Riprova": "Erneut versuchen", - "Riservato": "Reserviert", - "Risolvi i problemi indicati sopra e ricarica la pagina.": "Beheben Sie die oben angegebenen Probleme und laden Sie die Seite neu.", - "Risorsa": "Ressource", - "Risorse esterne": "Externe Ressourcen", - "Rispettiamo il tuo diritto alla privacy. Puoi scegliere di non consentire alcuni tipi di cookie. Le tue preferenze si applicheranno all'intero sito web.": "Wir respektieren Ihr Recht auf Datenschutz. Sie können bestimmte Arten von Cookies ablehnen. Ihre Einstellungen gelten für die gesamte Website.", - "Rispondi": "Antworten", - "Risposta": "Antwort", - "Risposta JSON": "JSON-Antwort", - "Risposta non valida dal servizio ISBN.": "Ungültige Antwort vom ISBN-Dienst.", - "Risposta non valida. Controlla la console per dettagli.": "Ungültige Antwort. Überprüfen Sie die Konsole für Details.", - "Risultati": "Ergebnisse", - "Risultati per '%s' - Catalogo Biblioteca": "Ergebnisse für '%s' – Bibliothekskatalog", - "Ritiri da Confermare": "Zu bestätigende Abholungen", - "Ritiri scaduti elaborati": "Abgelaufene Abholungen verarbeitet", - "Ritiro annullato": "Abholung storniert", - "Ritiro annullato con successo": "Abholung erfolgreich storniert", - "Ritiro confermato con successo": "Abholung erfolgreich bestätigt", - "Ritiro confermato!": "Abholung bestätigt!", - "Ritiro confermato! Il prestito è ora in corso.": "Abholung bestätigt! Die Ausleihe ist jetzt aktiv.", - "Ritiro già confermato o modificato": "Abholung bereits bestätigt oder geändert", - "Ritiro non effettuato": "Abholung nicht erfolgt", - "Ritiro non effettuato entro il termine previsto": "Abholung nicht innerhalb der Frist erfolgt", - "Ritiro scaduto": "Abholung abgelaufen", - "Ritiro scaduto il": "Abholung abgelaufen am", - "Rossi": "Mustermann", - "Route Comuni": "Allgemeine Routen", - "Route Tradotte": "Übersetzte Routen", - "Route aggiornate con successo": "Routen erfolgreich aktualisiert", - "Ruolo": "Rolle", - "Ruolo:": "Rolle:", - "SBN Italia - Integrato": "SBN Italien - Integriert", - "SDK": "SDK", - "SEO - Meta Description": "SEO – Meta-Beschreibung", - "SEO Base": "SEO-Grundlagen", - "SEO Base (Meta Tags)": "SEO-Grundlagen (Meta-Tags)", - "SMTP (custom)": "SMTP (benutzerdefiniert)", - "SMTP Host": "SMTP-Host", - "SMTP Password": "SMTP-Passwort", - "SMTP Personalizzato": "Benutzerdefiniertes SMTP", - "SMTP Port": "SMTP-Port", - "SMTP Username": "SMTP-Benutzername", - "SMTP personalizzato": "Benutzerdefiniertes SMTP", - "SSL": "SSL", - "Salva": "Speichern", - "Salva API Key": "API-Schlüssel speichern", - "Salva Autore": "Autor speichern", - "Salva Configurazione": "Konfiguration speichern", - "Salva Contatti": "Kontakte speichern", - "Salva Editore": "Verlag speichern", - "Salva Identità": "Identität speichern", - "Salva Impostazioni": "Einstellungen speichern", - "Salva Impostazioni Avanzate": "Erweiterte Einstellungen speichern", - "Salva Libro": "Buch speichern", - "Salva Lingua": "Sprache speichern", - "Salva Modifiche": "Änderungen speichern", - "Salva Privacy Policy": "Datenschutzerklärung speichern", - "Salva Route": "Routen speichern", - "Salva Template": "Vorlage speichern", - "Salva Testi Cookie Banner": "Cookie-Banner-Texte speichern", - "Salva filtri correnti": "Aktuelle Filter speichern", - "Salva identità": "Identität speichern", - "Salva impostazioni email": "E-Mail-Einstellungen speichern", - "Salva impostazioni etichette": "Etiketteneinstellungen speichern", - "Salva in UTF-8": "Als UTF-8 speichern", - "Salva la API key in un luogo sicuro. Non sarà possibile visualizzarla nuovamente dopo la creazione.": "Speichern Sie den API-Schlüssel an einem sicheren Ort. Er kann nach der Erstellung nicht erneut angezeigt werden.", - "Salva modifiche": "Änderungen speichern", - "Salva modifiche Homepage": "Homepage-Änderungen speichern", - "Salva template": "Vorlage speichern", - "Salva testi banner": "Banner-Texte speichern", - "Salva utente": "Benutzer speichern", - "Salvataggio in corso...": "Wird gespeichert...", - "Salvataggio...": "Wird gespeichert...", - "Salvato con successo.": "Erfolgreich gespeichert.", - "Sarà pubblicata dopo l'approvazione di un amministratore.": "Wird nach der Genehmigung durch einen Administrator veröffentlicht.", - "Sarà utilizzata per accedere al sistema": "Wird für die Anmeldung am System verwendet", - "Sarà visualizzato nell'header e in tutto il sito": "Wird in der Kopfzeile und auf der gesamten Website angezeigt", - "Scade": "Läuft ab", - "Scadenza": "Fälligkeitsdatum", - "Scadenza Mancante": "Fehlendes Fälligkeitsdatum", - "Scadenza prenotazione": "Ablauf der Vormerkung", - "Scadenza ritiro": "Abholfrist", - "Scadenza ritiro:": "Abholfrist:", - "Scadenza tessera": "Kartenablauf", - "Scadenza:": "Fälligkeitsdatum:", - "Scadenza: %s": "Ablauf: %s", - "Scaduta": "Abgelaufen", - "Scaduta il": "Abgelaufen am", - "Scaduto": "Abgelaufen", - "Scaduto il:": "Abgelaufen am:", - "Scaffale": "Regal", - "Scaffale *": "Regal *", - "Scaffale Narrativa": "Belletristik-Regal", - "Scaffale creato": "Schrank erstellt", - "Scaffale eliminato": "Schrank gelöscht", - "Scaffale obbligatorio": "Schrank erforderlich", - "Scaffali": "Regale", - "Scaffali e mensole": "Regale und Regalböden", - "Scarica": "Herunterladen", - "Scarica Audiobook": "Hörbuch herunterladen", - "Scarica Errori": "Fehler herunterladen", - "Scarica JSON": "JSON herunterladen", - "Scarica PDF": "PDF herunterladen", - "Scarica Ricevuta PDF": "PDF-Quittung herunterladen", - "Scarica Script SQL": "SQL-Skript herunterladen", - "Scarica automaticamente la ricevuta PDF dopo la creazione del prestito.": "Die PDF-Quittung nach der Erstellung der Ausleihe automatisch herunterladen.", - "Scarica copertine": "Cover abrufen", - "Scarica eBook": "eBook herunterladen", - "Scarica esempio_import_libri.csv": "beispiel_import_buecher.csv herunterladen", - "Scarica il CSV di esempio con 3 libri già compilati per capire il formato corretto e iniziare subito.": "Laden Sie die Beispiel-CSV-Datei mit 3 vorausgefüllten Büchern herunter, um das richtige Format zu verstehen und sofort loszulegen.", - "Scarica il file CSV di esempio": "Beispiel-CSV-Datei herunterladen", - "Scarica il report CSV per analizzare gli errori in dettaglio": "Laden Sie den CSV-Bericht herunter, um Fehler im Detail zu analysieren", - "Scarica l'eBook in formato digitale": "Das eBook im digitalen Format herunterladen", - "Scarica ricevuta PDF": "PDF-Quittung herunterladen", - "Scaricamento copertine...": "Cover werden abgerufen...", - "Scarso": "Mangelhaft", - "Scegli": "Auswählen", - "Scegli Icona Font Awesome": "Font Awesome Icon auswählen", - "Scegli come inviare le email dal sistema. Puoi usare la funzione PHP mail(), PHPMailer o un server SMTP esterno.": "Wählen Sie, wie E-Mails vom System gesendet werden sollen. Sie können die PHP-Funktion mail(), PHPMailer oder einen externen SMTP-Server verwenden.", - "Scegli come inviare le email dal sistema. Puoi usare la funzione PHP /usr/bin/php con il percorso corretto di PHP sul tuo server": "Ersetzen Sie /usr/bin/php durch den korrekten PHP-Pfad auf Ihrem Server", - "Sottocategoria": "Unterkategorie", - "Sottodomini devono supportare HTTPS (se usati)": "Subdomains müssen HTTPS unterstützen (falls verwendet)", - "Sottogenere": "Untergenre", - "Sottogenere specifico (opzionale)": "Spezifisches Untergenre (optional)", - "Sottogeneri": "Untergenres", - "Sottotitolo": "Untertitel", - "Sottotitolo CTA": "CTA-Untertitel", - "Sottotitolo del libro (opzionale)": "Buchuntertitel (optional)", - "Sottotitolo sezione": "Bereichsuntertitel", - "Spazio libero": "Freier Speicherplatz", - "Staff": "Mitarbeiter", - "Staff:": "Mitarbeiter:", - "Stai per aggiornare Pinakes alla versione": "Sie sind dabei, Pinakes auf Version zu aktualisieren", - "Stai per eliminare": "Sie sind dabei zu löschen", - "Stai per unire": "Sie sind dabei zusammenzuführen", - "Stai utilizzando l'ultima versione disponibile.": "Sie verwenden die neueste verfügbare Version.", - "Stai utilizzando l'ultima versione.": "Sie verwenden die neueste Version.", - "Stampa": "Drucken", - "Stampa etichetta": "Etikett drucken", - "Standard": "Standard", - "Standard Tirrenia catalogazione": "Standard Tirrenia-Katalogisierung", - "Standard dorso libri (più comune)": "Standard-Buchrücken (am häufigsten)", - "Statistiche": "Statistiken", - "Statistiche Prestiti": "Ausleihstatistiken", - "Statistiche Rapide": "Schnellstatistiken", - "Statistiche aggiornate per": "Statistiken aktualisiert für", - "Statistiche:": "Statistiken:", - "Stato": "Status", - "Stato API": "API-Status", - "Stato API key aggiornato con successo.": "API-Schlüssel-Status erfolgreich aktualisiert.", - "Stato Incongruente": "Statusabweichung", - "Stato aggiornato per %d libri": "Status für %d Bücher aktualisiert", - "Stato attuale:": "Aktueller Status:", - "Stato dell'installazione:": "Installationsstatus:", - "Stato della copia": "Exemplar-Status", - "Stato della copia aggiornato con successo.": "Exemplar-Status erfolgreich aktualisiert.", - "Stato e Gestione": "Status und Verwaltung", - "Stato non valido": "Ungültiger Status", - "Stato non valido.": "Ungültiger Status.", - "Stato prestito": "Ausleihstatus", - "Stato prestito corrente": "Aktueller Ausleihstatus", - "Stato prestito non valido.": "Ungültiger Ausleihstatus.", - "Stato:": "Status:", - "Status attuale di questa copia del libro": "Aktueller Status dieses Buchexemplars", - "Step 1: Creazione backup": "Schritt 1: Backup erstellen", - "Step 2: Download aggiornamento": "Schritt 2: Aktualisierung herunterladen", - "Step 3: Installazione aggiornamento": "Schritt 3: Aktualisierung installieren", - "Storico Import": "Importverlauf", - "Storico Prestiti": "Ausleihverlauf", - "Nella stessa collana": "In derselben Reihe", - "Volumi di quest'opera": "Bände dieses Werks", - "volumi": "Bände", - "Questo libro è il volume %s dell'opera": "Dieses Buch ist Band %s des Werks", - "Gestione Collane": "Reihenverwaltung", - "Gestisci le collane e le serie di libri": "Buchreihen und Serien verwalten", - "Collane totali": "Reihen insgesamt", - "Libri nelle collane": "Bücher in Reihen", - "Nessuna collana trovata. Aggiungi una collana a un libro per iniziare.": "Keine Reihen gefunden. Fügen Sie einem Buch eine Reihe hinzu.", - "Collane": "Reihen", - "Serie e collane di libri": "Serien und Buchreihen", - "Rinomina collana": "Reihe umbenennen", - "Rinomina": "Umbenennen", - "Unisci con altra collana": "Mit anderer Reihe zusammenführen", - "Nome collana di destinazione": "Name der Zielreihe", - "Unisci": "Zusammenführen", - "Sei sicuro? Tutti i libri verranno spostati nella collana di destinazione.": "Sind Sie sicher? Alle Bücher werden in die Zielreihe verschoben.", - "Crea opera multi-volume": "Mehrbändiges Werk erstellen", - "Crea un libro padre che raccoglie tutti i volumi di questa collana.": "Erstellen Sie ein übergeordnetes Buch, das alle Bände dieser Reihe enthält.", - "Titolo dell'opera completa": "Titel des Gesamtwerks", - "Crea opera": "Werk erstellen", - "Collana rinominata: %d libri aggiornati": "Reihe umbenannt: %d Bücher aktualisiert", - "Nome collana non valido": "Ungültiger Reihenname", - "Collane unite: %d libri spostati in \"%s\"": "Reihen zusammengeführt: %d Bücher in \"%s\" verschoben", - "Parametri non validi per l'unione": "Ungültige Parameter für Zusammenführung", - "Opera \"%s\" creata con %d volumi": "Werk \"%s\" erstellt mit %d Bänden", - "Errore nella creazione dell'opera": "Fehler beim Erstellen des Werks", - "Aggiungi volume": "Band hinzufügen", - "Cartaceo": "Druckausgabe", - "eBook": "eBook", - "Audiolibro": "Hörbuch", - "CD Audio": "Audio-CD", - "Vinile": "Schallplatte", - "LP": "LP", - "Cassetta": "Kassette", - "DVD": "DVD", - "Blu-ray": "Blu-ray", - "Digitale": "Digital", - "Cerca libro": "Buch suchen", - "Titolo o ISBN...": "Titel oder ISBN...", - "Numero volume": "Bandnummer", - "Seleziona un libro": "Buch auswählen", - "Volume aggiunto": "Band hinzugefügt", - "Rimuovi volume?": "Band entfernen?", - "Il libro non sarà eliminato, solo la relazione.": "Das Buch wird nicht gelöscht, nur die Verknüpfung.", - "Volume rimosso": "Band entfernt", - "Configura come opera multi-volume": "Als mehrbändiges Werk konfigurieren", - "Errore database": "Datenbankfehler", - "Nuova Collana": "Neue Reihe", - "Collana \"%s\" creata": "Reihe \"%s\" erstellt", - "Descrizione della collana...": "Beschreibung der Reihe...", - "Salva descrizione": "Beschreibung speichern", - "Descrizione salvata": "Beschreibung gespeichert", - "Assegna collana": "Reihe zuweisen", - "Collana assegnata": "Reihe zugewiesen", - "%d libri assegnati alla collana \"%s\"": "%d Bücher der Reihe \"%s\" zugewiesen", - "Elimina collana": "Reihe löschen", - "Rimuove la collana da tutti i libri. I libri non verranno eliminati.": "Entfernen Sie die Reihe von allen Büchern. Die Bücher werden nicht gelöscht.", - "Sei sicuro? La collana verrà rimossa da tutti i libri.": "Sind Sie sicher? Die Reihe wird von allen Büchern entfernt.", - "Collana \"%s\" eliminata (%d libri aggiornati)": "Reihe \"%s\" gelöscht (%d Bücher aktualisiert)", - "International Standard Serial Number (per periodici)": "International Standard Serial Number (für Zeitschriften)", - "ISSN Non Valido": "Ungültige ISSN", - "ISSN deve essere nel formato XXXX-XXXX (8 cifre, l'ultima può essere X).": "ISSN muss im Format XXXX-XXXX sein (8 Ziffern, die letzte kann X sein).", - "ISSN non valido. Il formato corretto è XXXX-XXXX (8 cifre, l'ultima può essere X).": "Ungültige ISSN. Das korrekte Format ist XXXX-XXXX (8 Ziffern; die letzte kann X sein).", - "Relazione ciclica: questo libro è già opera padre del libro selezionato": "Zyklische Beziehung: Dieses Buch ist bereits ein übergeordnetes Werk des ausgewählten Buches", - "Assegna": "Zuweisen", - "es. 1234-5678": "z.B. 1234-5678", - "es. Harry Potter": "z.B. Harry Potter", - "Identificatori": "Kennungen", - "Inserisci un nome": "Namen eingeben", - "Nome della collana": "Reihenname", - "ISSN": "ISSN", - "Volumi": "Bände", - "Successiva": "Nächste", - "Successivo": "Nächste", - "Successo": "Erfolg", - "Successo!": "Erfolg!", - "Suggerimenti": "Tipps", - "Suggerimento": "Tipp", - "Suggerimento:": "Tipp:", - "Suggerisci collocazione": "Standort vorschlagen", - "Suggerito scaffale #${data.scaffale_id}": "Vorgeschlagenes Regal #${data.scaffale_id}", - "Suggerito:": "Vorgeschlagen:", - "Summary (Immagine Piccola)": "Summary (kleines Bild)", - "Summary Large Image (Immagine Grande)": "Summary Large Image (großes Bild)", - "Supporto": "Support", - "Sì": "Ja", - "Sì, Aggiorna": "Ja, aktualisieren", - "Sì, Annulla": "Ja, stornieren", - "Sì, Salva": "Ja, speichern", - "Sì, aggiorna": "Ja, aktualisieren", - "Sì, applica": "Ja, anwenden", - "Sì, approva": "Ja, genehmigen", - "Sì, attiva": "Ja, aktivieren", - "Sì, correggi": "Ja, beheben", - "Sì, crea indici": "Ja, Indizes erstellen", - "Sì, crea tabelle": "Ja, Tabellen erstellen", - "Sì, disattiva": "Ja, deaktivieren", - "Sì, disinstalla": "Ja, deinstallieren", - "Sì, elimina": "Ja, löschen", - "Sì, elimina!": "Ja, löschen!", - "Sì, esegui": "Ja, ausführen", - "Sì, rimuovi": "Ja, entfernen", - "Sì, sincronizza": "Ja, synchronisieren", - "TLS": "TLS", - "Tabella": "Tabelle", - "Tabella %s creata": "Tabelle %s erstellt", - "Tabelle create:": "Erstellte Tabellen:", - "Tabelle di Sistema": "Systemtabellen", - "Tabelle richieste per l'aggiornamento": "Für Aktualisierungen erforderliche Tabellen", - "Tag": "Tag", - "Telefono": "Telefon", - "Telefono *": "Telefon *", - "Telefono Referente": "Telefon Ansprechpartner", - "Telefono:": "Telefon:", - "Tema": "Design", - "Tema Attivo": "Aktives Theme", - "Tema attivato con successo": "Theme erfolgreich aktiviert", - "Tema non trovato": "Theme nicht gefunden", - "Tema salvato con successo": "Theme erfolgreich gespeichert", - "Temi": "Themes", - "Temi Disponibili": "Verfügbare Themes", - "Template": "Vorlagen", - "Template Email": "E-Mail-Vorlagen", - "Template aggiornato con successo!": "Vorlage erfolgreich aktualisiert!", - "Template email": "E-Mail-Vorlagen", - "Termini": "Bedingungen", - "Termini di Servizio": "Nutzungsbedingungen", - "Tessera biblioteca": "Bibliotheksausweis", - "Test": "Test", - "Test Connessione": "Verbindungstest", - "Test Endpoint": "Endpoint testen", - "Test del cron job:": "Cron-Job-Test:", - "Testi Banner": "Banner-Texte", - "Testi Banner Cookie": "Cookie-Banner-Texte", - "Testi Banner Iniziale": "Texte des initialen Banners", - "Testi Cookie Banner": "Cookie-Banner-Texte", - "Testi Modale Preferenze": "Texte des Einstellungsdialogs", - "Testi categorie cookie": "Texte der Cookie-Kategorien", - "Testo Bottone": "Schaltflächentext", - "Testo Privacy": "Datenschutztext", - "Testo che apparirà nel footer del sito": "Text, der in der Fußzeile der Website angezeigt wird", - "Testo checkbox": "Checkbox-Text", - "Testo della checkbox privacy nel form": "Datenschutz-Checkbox-Text im Formular", - "Testo introduttivo": "Einleitungstext", - "Testo principale mostrato nel banner. Puoi usare HTML.": "Haupttext im Banner. Sie können HTML verwenden.", - "Testo pulsante": "Schaltflächentext", - "Testo pulsante \"Accetta tutti\"": "Schaltflächentext \"Alle akzeptieren\"", - "Testo pulsante \"Preferenze\"": "Schaltflächentext \"Einstellungen\"", - "Testo pulsante \"Rifiuta non essenziali\"": "Schaltflächentext \"Nicht erforderliche ablehnen\"", - "Testo pulsante \"Salva selezionati\"": "Schaltflächentext \"Auswahl speichern\"", - "Ti abbiamo inviato un'email con il link per confermare l'indirizzo.": "Wir haben Ihnen eine E-Mail mit dem Bestätigungslink gesendet.", - "Timeout (secondi)": "Timeout (Sekunden)", - "Timestamp": "Zeitstempel", - "Tipo": "Typ", - "Tipo Acquisizione": "Erwerbungsart", - "Tipo Card": "Kartentyp", - "Tipo Contenuto": "Inhaltstyp", - "Tipo MIME non valido. Solo file CSV sono accettati.": "Ungültiger MIME-Typ. Es werden nur CSV-Dateien akzeptiert.", - "Tipo OG": "OG-Typ", - "Tipo Twitter Card": "Twitter Card-Typ", - "Tipo Utente": "Benutzertyp", - "Tipo acquisizione": "Erwerbungsart", - "Tipo di contenuto per Open Graph. Scegli 'Website' per la homepage.": "Inhaltstyp für Open Graph. Wählen Sie 'Website' für die Startseite.", - "Tipo di file non consentito. Sono ammessi solo: %s": "Dateityp nicht erlaubt. Nur erlaubt: %s", - "Tipo di file non supportato. Solo JPEG e PNG sono consentiti.": "Nicht unterstützter Dateityp. Nur JPEG und PNG sind erlaubt.", - "Tipo di file non valido.": "Ungültiger Dateityp.", - "Tipo di file non valido. Carica un'immagine reale.": "Ungültiger Dateityp. Bitte laden Sie ein echtes Bild hoch.", - "Tipo di issue non valido": "Ungültiger Problem-Typ", - "Tipo non valido": "Ungültiger Typ.", - "Tipo utente": "Benutzertyp", - "Tipologia account": "Kontotyp", - "Tipologia:": "Typ:", - "Titolo": "Titel", - "Titolo (opzionale)": "Titel (optional)", - "Titolo 1": "Überschrift 1", - "Titolo 2": "Überschrift 2", - "Titolo 3": "Überschrift 3", - "Titolo A-Z": "Titel A–Z", - "Titolo CTA": "CTA-Titel", - "Titolo Evento": "Veranstaltungstitel", - "Titolo Modale": "Dialog-Titel", - "Titolo OG": "OG-Titel", - "Titolo Open Graph": "Open-Graph-Titel", - "Titolo Pagina": "Seitentitel", - "Titolo SEO": "SEO-Titel", - "Titolo Twitter": "Twitter-Titel", - "Titolo Z-A": "Titel Z–A", - "Titolo del libro": "Buchtitel", - "Titolo della sezione e le 4 card con le caratteristiche": "Bereichstitel und die 4 Funktionskarten", - "Titolo e descrizione mostrati sopra i caroselli dei generi": "Titel und Beschreibung über den Genre-Karussells", - "Titolo libro": "Buchtitel", - "Titolo modale": "Modal-Titel", - "Titolo mostrato quando condividi su Facebook/LinkedIn. Se vuoto, usa il titolo SEO o hero.": "Titel, der beim Teilen auf Facebook/LinkedIn angezeigt wird. Wenn leer, wird der SEO- oder Hero-Titel verwendet.", - "Titolo non disponibile": "Titel nicht verfügbar", - "Titolo obbligatorio mancante": "Pflichtfeld Titel fehlt", - "Titolo pagina": "Seitentitel", - "Titolo per Twitter/X. Se vuoto, usa il titolo Open Graph.": "Titel für Twitter/X. Wenn leer, wird der Open Graph-Titel verwendet.", - "Titolo principale (H1)": "Haupttitel (H1)", - "Titolo sezione": "Bereichstitel", - "Titolo troppo lungo (max 255 caratteri)": "Titel zu lang (max. 255 Zeichen)", - "Titolo, sottotitolo, descrizione...": "Titel, Untertitel, Beschreibung...", - "Titolo...": "Titel...", - "Titolo:": "Titel:", - "Toggle menu": "Menü umschalten", - "Toggle search": "Suche umschalten", - "Token CSRF non valido": "Ungültiges CSRF-Token.", - "Token CSRF non valido. Riprova.": "Ungültiges CSRF-Token. Bitte versuchen Sie es erneut.", - "Token configurato": "Token konfiguriert", - "Token configurato — lascia vuoto per mantenere": "Token konfiguriert — leer lassen zum Beibehalten", - "Token di sicurezza non valido. Riprova.": "Ungültiges Sicherheitstoken. Bitte versuchen Sie es erneut.", - "Top 10 Lettori Più Attivi": "Top 10 der aktivsten Leser", - "Top 10 Libri Più Prestati": "Top 10 der am häufigsten ausgeliehenen Bücher", - "Torna Indietro": "Zurück", - "Torna agli Eventi": "Zurück zu Veranstaltungen", - "Torna agli eventi": "Zurück zu Veranstaltungen", - "Torna ai Libri": "Zurück zu Bücher", - "Torna ai Prestiti": "Zurück zu Ausleihen", - "Torna ai temi": "Zurück zu den Themes", - "Torna al login": "Zurück zur Anmeldung", - "Torna all'Applicazione": "Zurück zur Anwendung", - "Torna all'elenco": "Zurück zur Liste", - "Torna alla Configurazione Database": "Zurück zur Datenbankkonfiguration", - "Torna alla Home": "Zurück zur Startseite", - "Torna alla categoria superiore": "Zurück zur übergeordneten Kategorie", - "Torna alla dashboard": "Zurück zum Dashboard", - "Torna alla lista": "Zurück zur Liste", - "Torna alla panoramica eventi": "Zurück zur Veranstaltungsübersicht", - "Torna alle Impostazioni": "Zurück zu Einstellungen", - "Torna alle Impostazioni CMS": "Zurück zu CMS-Einstellungen", - "Torna alle Lingue": "Zurück zu Sprachen", - "Torna alle Prenotazioni": "Zurück zu Vormerkungen", - "Total users:": "Benutzer gesamt:", - "Totale": "Gesamt", - "Totale Autori": "Autoren gesamt", - "Totale Generi": "Genres gesamt", - "Totale Libri": "Bücher gesamt", - "Totale Prestiti": "Ausleihen gesamt", - "Totale autori": "Autoren gesamt", - "Totale editori:": "Verlage gesamt:", - "Totale libri": "Bücher gesamt", - "Totale libri presenti": "Bücher im Bestand gesamt", - "Totale utenti:": "Benutzer gesamt:", - "Totale: %s righe": "Gesamt: %s Zeilen", - "Totali": "Gesamt", - "Tracce": "Titel", - "Tracklist": "Titelliste", - "Traduttore": "Übersetzer", - "Traduzioni e localizzazione": "Übersetzungen und Lokalisierung", - "Trascina le sezioni per riordinarle. L'ordine sarà salvato automaticamente e rispecchiato nella homepage.": "Ziehen Sie die Bereiche zum Neuordnen. Die Reihenfolge wird automatisch gespeichert und auf der Startseite übernommen.", - "Trascina per riordinare • Il codice deve essere univoco": "Zum Neuordnen ziehen – Der Code muss eindeutig sein", - "Trascina per riordinare • Ogni scaffale + livello deve essere univoco": "Zum Neuordnen ziehen – Jede Regal- und Fachkombination muss eindeutig sein", - "Trascina qui il file CSV o %{browse}": "CSV-Datei hierher ziehen oder %{browse}", - "Trascina qui il file ZIP del plugin o %{browse}": "Plugin-ZIP-Datei hierher ziehen oder %{browse}", - "Trascina qui il logo o %{browse}": "Logo hierher ziehen oder %{browse}", - "Trascina qui l'immagine di sfondo o %{browse}": "Hintergrundbild hierher ziehen oder %{browse}", - "Trascina qui l'immagine o %{browse}": "Bild hierher ziehen oder %{browse}", - "Trascina qui l'immagine, %{browse} o importa da": "Bild hierher ziehen, %{browse} oder importieren von", - "Trascina qui la copertina del libro o %{browse}": "Buchcover hierher ziehen oder %{browse}", - "Trascina qui la copertina del libro o clicca per selezionare": "Buchcover hierher ziehen oder klicken zum Auswählen", - "Trasforma Pinakes in un catalogo di sola consultazione": "Pinakes in einen reinen Katalog umwandeln", - "Trigger database configurati": "Datenbank-Trigger konfiguriert", - "Trigger database: azione manuale richiesta": "Datenbank-Trigger: manuelle Aktion erforderlich", - "Trigger importati OK": "Trigger erfolgreich importiert", - "Troppi errori durante l'import dei dati (%d errori). Primi errori:\n%s": "Zu viele Fehler beim Daten-Import (%d Fehler). Erste Fehler:\n%s", - "Troppi errori durante l'import dello schema (%d errori). Primi errori:\n%s": "Zu viele Fehler beim Schema-Import (%d Fehler). Erste Fehler:\n%s", - "Troppi tentativi. Attendi qualche minuto prima di riprovare": "Zu viele Versuche. Bitte warten Sie einige Minuten, bevor Sie es erneut versuchen", - "Trovate tabelle da backuppare": "Zu sichernde Tabellen gefunden", - "Trovato": "Gefunden", - "Tutorial": "Anleitung", - "Tutte le copie di questo libro hanno già un prestito attivo o prenotato. Attendi che una copia venga restituita.": "Alle Exemplare dieses Buches haben bereits eine aktive oder geplante Ausleihe. Bitte warten Sie, bis ein Exemplar zurückgegeben wird.", - "Tutte le copie in prestito": "Alle Exemplare ausgeliehen", - "Tutte le copie prenotate": "Alle Exemplare vorgemerkt", - "Tutte le date sono in formato ISO 8601 (YYYY-MM-DD HH:MM:SS)": "Alle Daten sind im ISO-8601-Format (YYYY-MM-DD HH:MM:SS)", - "Tutte le mensole": "Alle Fächer", - "Tutte le notifiche del sistema": "Alle Systembenachrichtigungen", - "Tutte le richieste sono state gestite.": "Alle Anfragen wurden bearbeitet.", - "Tutte le risorse del sito devono essere HTTPS": "Alle Website-Ressourcen müssen über HTTPS geladen werden", - "Tutte le route devono iniziare con": "Alle Routen müssen beginnen mit", - "Tutte le tabelle di sistema sono presenti!": "Alle Systemtabellen sind vorhanden!", - "Tutti": "Alle", - "Tutti gli anni": "Alle Jahre", - "Tutti gli autori": "Alle Autoren", - "Tutti gli editori": "Alle Verlage", - "Tutti gli eventi": "Alle Veranstaltungen", - "Tutti gli indici di performance sono presenti.": "Alle Performance-Indizes sind vorhanden.", - "Tutti gli scaffali": "Alle Regale", - "Tutti gli stati": "Alle Status", - "Tutti i controlli di integrità sono passati con successo!": "Alle Integritätsprüfungen wurden erfolgreich bestanden!", - "Tutti i diritti riservati.": "Alle Rechte vorbehalten.", - "Tutti i filtri sono stati rimossi": "Alle Filter wurden entfernt", - "Tutti i generi": "Alle Genres", - "Tutti i libri": "Alle Bücher", - "Tutti i messaggi ricevuti tramite il form contatti": "Alle über das Kontaktformular eingegangenen Nachrichten", - "Tutti i requisiti sono soddisfatti! Puoi procedere con l'installazione.": "Alle Anforderungen sind erfüllt! Sie können mit der Installation fortfahren.", - "Tutti i ruoli": "Alle Rollen", - "Tutti soddisfatti": "Alle erfüllt", - "Tutto": "Alle", - "Tutto aggiornato!": "Alles auf dem neuesten Stand!", - "Tutto sotto controllo!": "Alles unter Kontrolle!", - "Twitter": "Twitter", - "Twitter Card": "Twitter Card", - "Twitter Cards (X)": "Twitter Cards (X)", - "URL Canonico": "Kanonische URL", - "URL Canonico (opzionale)": "Kanonische URL (optional)", - "URL Canonico Mancante": "Fehlende kanonische URL", - "URL Canonico Non Valido": "Ungültige kanonische URL", - "URL Canonico Vuoto": "Leere kanonische URL", - "URL Endpoint API": "API-Endpoint-URL", - "URL Endpoint SRU": "SRU-Endpoint-URL", - "URL Non Valido": "Ungültige URL", - "URL OG": "OG-URL", - "URL completo del sito (es: https://biblioteca.example.com). Usato per link nelle email (verifica account, reset password). Se lasciato vuoto, verrà auto-rilevato.": "Vollständige Website-URL (z. B. https://biblioteca.example.com). Wird für Links in E-Mails verwendet (Kontobestätigung, Passwort zurücksetzen). Wenn leer, wird sie automatisch erkannt.", - "URL completo della pagina (auto-generato se vuoto)": "Vollständige Seiten-URL (wird automatisch generiert, wenn leer)", - "URL della pagina con la cookie policy": "URL der Seite mit der Cookie-Richtlinie", - "URL della pagina con le tecnologie dei cookie": "URL der Seite mit den Cookie-Technologien", - "URL di download non trovato": "Download-URL nicht gefunden", - "URL non valido o non permesso.": "Ungültige oder nicht erlaubte URL.", - "URL non valido.": "Ungültige URL.", - "URL principale del sito. Se vuoto, usa l'URL corrente.": "Haupt-URL der Website. Wenn leer, wird die aktuelle URL verwendet.", - "URL pubblico:": "Öffentliche URL:", - "URL sito web...": "Website-URL...", - "URL...": "URL...", - "Ultima": "Letzte", - "Ultima Versione": "Neueste Version", - "Ultima generazione:": "Letzte Generierung:", - "Ultima modifica": "Zuletzt geändert", - "Ultimi Arrivi": "Neueste Zugänge", - "Ultimi Libri Aggiunti": "Zuletzt hinzugefügte Bücher", - "Ultimi Libri Inseriti": "Zuletzt hinzugefügte Bücher", - "Ultimi aggiunti (data creazione)": "Zuletzt hinzugefügt (Erstellungsdatum)", - "Ultimi modificati (data aggiornamento)": "Zuletzt bearbeitet (Aktualisierungsdatum)", - "Ultimo": "Letzter", - "Ultimo Aggiornamento": "Letzte Aktualisierung", - "Ultimo accesso": "Letzter Zugriff", - "Ultimo aggiornamento": "Letzte Aktualisierung", - "Ultimo uso:": "Letzte Nutzung:", - "Ultimo utilizzo": "Zuletzt verwendet", - "Umberto Eco": "Umberto Eco", - "Un altro aggiornamento è già in corso. Riprova più tardi.": "Ein anderes Update läuft bereits. Bitte versuchen Sie es später erneut.", - "Un backup viene creato automaticamente prima di salvare": "Vor dem Speichern wird automatisch ein Backup erstellt", - "Un'esperienza di lettura moderna, intuitiva e sempre a portata di mano": "Ein modernes, intuitives Leseerlebnis – immer griffbereit", - "Una chiave è attualmente salvata e funzionante. Puoi aggiornarla inserendo un nuovo valore o lasciarla vuota per rimuoverla.": "Ein Schlüssel ist derzeit gespeichert und funktioniert. Sie können ihn aktualisieren, indem Sie einen neuen Wert eingeben, oder leer lassen, um ihn zu entfernen.", - "Una chiave è già salvata. Inserisci un nuovo valore per aggiornarla oppure lascia vuoto per rimuoverla.": "Ein Schlüssel ist bereits gespeichert. Geben Sie einen neuen Wert ein, um ihn zu aktualisieren, oder lassen Sie das Feld leer, um ihn zu entfernen.", - "Una descrizione completa aiuta gli utenti a conoscere meglio l'autore": "Eine ausführliche Beschreibung hilft den Benutzern, den Autor besser kennenzulernen", - "Una mensola con livello %d esiste già in questo scaffale. Usa un livello diverso.": "Ein Fach mit Ebene %d existiert bereits in diesem Regal. Verwenden Sie eine andere Ebene.", - "Una panoramica dei libri che hai salvato per non perderli di vista.": "Eine Übersicht der Bücher, die Sie gespeichert haben, um sie im Blick zu behalten.", - "Unisci autori": "Autoren zusammenführen", - "Unisci editori": "Verlage zusammenführen", - "Unisciti alla nostra community di lettori e scopri il piacere della lettura con la nostra piattaforma moderna.": "Werden Sie Teil unserer Lesergemeinschaft und entdecken Sie die Freude am Lesen mit unserer modernen Plattform.", - "Upload non valido": "Ungültiger Upload", - "Uploader non disponibile": "Uploader nicht verfügbar", - "Usa": "Verwenden", - "Usa 'localhost' (raccomandato, rileva automaticamente TCP/socket). Puoi forzare '127.0.0.1' per TCP.": "Verwenden Sie 'localhost' (empfohlen, erkennt TCP/Socket automatisch). Sie können '127.0.0.1' für TCP erzwingen.", - "Usa codici semplici (A, B, C...)": "Verwenden Sie einfache Codes (A, B, C...)", - "Usa formato: 599 oppure 599.9 oppure 599.93": "Format verwenden: 599 oder 599.9 oder 599.93", - "Usa gli endpoint specifici per il formato legacy": "Verwenden Sie die spezifischen Endpoints für das Legacy-Format", - "Usa i servizi online per precompilare automaticamente i dati del libro": "Nutzen Sie Online-Dienste, um die Buchdaten automatisch auszufüllen", - "Usa il pulsante \"Rigenera adesso\" per crearla": "Verwenden Sie die Schaltfläche \"Jetzt neu generieren\", um sie zu erstellen", - "Usa il separatore %s": "Verwenden Sie das Trennzeichen %s", - "Usa l'editor per formattare il testo, aggiungere link, immagini e altro": "Verwenden Sie den Editor, um Text zu formatieren, Links, Bilder und mehr hinzuzufügen", - "Usa l'editor per formattare il testo, aggiungere link, immagini e altro.": "Verwenden Sie den Editor, um Text zu formatieren, Links, Bilder und mehr hinzuzufügen.", - "Usa le frecce ← → per saltare": "Verwenden Sie die Pfeiltasten ← →, um zu springen", - "Usa questa azione dopo aver importato un grande numero di libri o modifiche ai contenuti CMS.": "Verwenden Sie diese Aktion nach dem Import einer großen Anzahl von Büchern oder CMS-Inhaltsänderungen.", - "Usa questo campo per personalizzare lo stile del sito senza modificare i file di tema.": "Verwenden Sie dieses Feld, um den Stil der Website anzupassen, ohne die Theme-Dateien zu ändern.", - "Usata per login e comunicazioni.": "Wird für Anmeldung und Kommunikation verwendet.", - "Username": "Benutzername", - "Users": "Benutzer", - "Utente": "Benutzer", - "Utente %s (%s) si è registrato": "Benutzer %s (%s) hat sich registriert", - "Utente admin creato:": "Admin-Benutzer erstellt:", - "Utente aggiornato con successo!": "Benutzer erfolgreich aktualisiert!", - "Utente approvato con successo!": "Benutzer erfolgreich genehmigt!", - "Utente attivato direttamente!": "Benutzer direkt aktiviert!", - "Utente creato con successo!": "Benutzer erfolgreich erstellt!", - "Utente eliminato con successo.": "Benutzer erfolgreich gelöscht.", - "Utente prenotante": "Vormerkender Benutzer", - "Utente preselezionato": "Vorausgewählter Benutzer", - "Utente sconosciuto": "Unbekannter Benutzer", - "Utente senza nome": "Unbenannter Benutzer", - "Utente:": "Benutzer:", - "Utenti": "Benutzer", - "Utenti Attivi": "Aktive Benutzer", - "Utenti in Attesa di Approvazione": "Benutzer mit ausstehender Genehmigung", - "Utenti registrati": "Registrierte Benutzer", - "Utilizza l'editor TinyMCE per formattare il testo e Uppy per caricare immagini di alta qualità. Le modifiche saranno immediatamente visibili nella pagina pubblica.": "Verwenden Sie den TinyMCE-Editor, um Text zu formatieren, und Uppy, um hochwertige Bilder hochzuladen. Änderungen werden sofort auf der öffentlichen Seite sichtbar.", - "Utilizziamo i cookie per migliorare la tua esperienza. Continuando a visitare questo sito, accetti il nostro uso dei cookie.": "Wir verwenden Cookies, um Ihre Erfahrung zu verbessern. Durch die weitere Nutzung dieser Website akzeptieren Sie unsere Verwendung von Cookies.", - "Vai": "Los", - "Vai al Login": "Zur Anmeldung", - "Vai al login": "Zur Anmeldung", - "Vai all'Applicazione": "Zur Anwendung", - "Vai all'applicazione": "Zur Anwendung", - "Vai alla Home": "Zur Startseite", - "Validazione prestito fallita": "Ausleihvalidierung fehlgeschlagen", - "Valore applicato": "Wert übernommen", - "Valore compreso tra 1 e 30 giorni. Consigliato: 3 giorni": "Wert zwischen 1 und 30 Tagen. Empfohlen: 3 Tage", - "Valore non valido": "Ungültiger Wert", - "Valutazione *": "Bewertung *", - "Valutazione non valida (1-5 stelle)": "Ungültige Bewertung (1–5 Sterne)", - "Variabili disponibili:": "Verfügbare Variablen:", - "Vecchio": "Alt", - "Vedi": "Anzeigen", - "Vedi Dettagli": "Details anzeigen", - "Vedi alternative": "Alternativen anzeigen", - "Vedi dettagli": "Details anzeigen", - "Vedi istruzioni sotto per correggere manualmente.": "Siehe Anleitung unten zur manuellen Korrektur.", - "Vedi tutte le notifiche": "Alle Benachrichtigungen anzeigen", - "Vedi tutti": "Alle anzeigen", - "Vedi tutti gli eventi": "Alle Veranstaltungen anzeigen", - "Verifica Leggibilità": "Lesbarkeit prüfen", - "Verifica che il database sia accessibile e configurato correttamente nel file .env": "Überprüfen Sie, ob die Datenbank erreichbar und in der .env-Datei korrekt konfiguriert ist", - "Verifica che le credenziali del database nel file .env siano corrette": "Überprüfen Sie, ob die Datenbank-Zugangsdaten in der .env-Datei korrekt sind", - "Verifica coerenza e integrità del database": "Datenbankkonsistenz und -integrität prüfen", - "Verifica completata OK": "Überprüfung erfolgreich abgeschlossen", - "Verifica i permessi di esecuzione: chmod +x cron/automatic-notifications.php": "Überprüfen Sie die Ausführungsberechtigungen: chmod +x cron/automatic-notifications.php", - "Verifica in corso...": "Überprüfung läuft...", - "Verifica installazione...": "Installation wird überprüft...", - "Verifica reCAPTCHA fallita. Riprova.": "reCAPTCHA-Überprüfung fehlgeschlagen. Bitte versuchen Sie es erneut.", - "Verifica versioni": "Versionen prüfen", - "Verificato": "Verifiziert", - "Verrà creato automaticamente un backup prima dell'aggiornamento.": "Vor der Aktualisierung wird automatisch ein Backup erstellt.", - "Verrà creato un backup completo del database.": "Es wird ein vollständiges Datenbank-Backup erstellt.", - "Versione": "Version", - "Versione Installata": "Installierte Version", - "Versione Installer:": "Installer-Version:", - "Versione non specificata": "Version nicht angegeben", - "Versione non trovata": "Version nicht gefunden", - "Versione:": "Version:", - "Via Roma 123, 00100 Roma RM, Italia": "Musterstraße 123, 10115 Berlin, Deutschland", - "Via, numero civico, città, CAP": "Straße, Hausnummer, Stadt, PLZ", - "Via, numero...": "Straße, Nummer...", - "Video": "Video", - "Video tutorial": "Video-Tutorial", - "Visibile": "Sichtbar", - "Visibile pubblicamente sulla pagina contatti": "Öffentlich sichtbar auf der Kontaktseite", - "Visibilità Sezione Eventi": "Sichtbarkeit des Veranstaltungsbereichs", - "Visibilità aggiornata!": "Sichtbarkeit aktualisiert!", - "Visita il sito ufficiale": "Offizielle Website besuchen", - "Vista griglia": "Rasteransicht", - "Vista tabella": "Tabellenansicht", - "Visualizza": "Anzeigen", - "Visualizza Libro": "Buch anzeigen", - "Visualizza Tutte le Categorie": "Alle Kategorien anzeigen", - "Visualizza Tutto il Catalogo": "Gesamten Katalog anzeigen", - "Visualizza dettagli": "Details anzeigen", - "Visualizza dettagli libro": "Buchdetails anzeigen", - "Visualizza e esporta l'elenco dei libri per posizione fisica": "Bücherliste nach physischem Standort anzeigen und exportieren", - "Visualizza e gestisci tutti i prestiti della biblioteca": "Alle Ausleihen der Bibliothek anzeigen und verwalten", - "Visualizza la cronologia degli import CSV e LibraryThing con report errori dettagliati": "Zeigen Sie den Verlauf der CSV- und LibraryThing-Importe mit detaillierten Fehlerberichten an", - "Visualizza pagina live": "Live-Seite anzeigen", - "Visualizzazione da _START_ a _END_ di _TOTAL_ libri": "Anzeige von _START_ bis _END_ von _TOTAL_ Büchern", - "Visualizzazione gerarchica di generi e sottogeneri": "Hierarchische Ansicht von Genres und Untergenres", - "Voci totali": "Einträge gesamt", - "Vuoi aggiornare il libro \"${title}\"?": "Möchten Sie das Buch \"${title}\" aktualisieren?", - "Vuoi aggiornare il libro \"%s\"?": "Möchten Sie das Buch \"%s\" aktualisieren?", - "Vuoi aggiornare lo stato di questa copia?": "Möchten Sie den Status dieses Exemplars aktualisieren?", - "Vuoi approvare questa recensione e renderla visibile sul sito?": "Möchten Sie diese Rezension genehmigen und auf der Website sichtbar machen?", - "Vuoi attivare questo plugin?": "Möchten Sie dieses Plugin aktivieren?", - "Vuoi aumentare il numero di copie di questo libro?": "Möchten Sie die Anzahl der Exemplare dieses Buches erhöhen?", - "Vuoi correggere automaticamente i problemi di integrità rilevati?": "Möchten Sie die erkannten Integritätsprobleme automatisch beheben?", - "Vuoi creare gli indici mancanti? Questa operazione migliorerà le performance del database.": "Möchten Sie die fehlenden Indizes erstellen? Dieser Vorgang verbessert die Datenbankleistung.", - "Vuoi creare le tabelle di sistema mancanti? Queste sono necessarie per il sistema di aggiornamento.": "Möchten Sie die fehlenden Systemtabellen erstellen? Diese sind für das Aktualisierungssystem erforderlich.", - "Vuoi disattivare questo plugin?": "Möchten Sie dieses Plugin deaktivieren?", - "Vuoi disconnettere questo dispositivo?": "Möchten Sie dieses Gerät abmelden?", - "Vuoi disconnettere tutti i dispositivi? Dovrai effettuare nuovamente l'accesso su ogni dispositivo.": "Möchten Sie alle Geräte abmelden? Sie müssen sich auf jedem Gerät erneut anmelden.", - "Vuoi eliminare definitivamente questa recensione? Questa azione non può essere annullata.": "Möchten Sie diese Rezension endgültig löschen? Diese Aktion kann nicht rückgängig gemacht werden.", - "Vuoi eliminare questo elemento?": "Möchten Sie dieses Element löschen?", - "Vuoi eseguire la manutenzione completa del sistema? Questa operazione potrebbe richiedere alcuni minuti.": "Möchten Sie die vollständige Systemwartung ausführen? Dieser Vorgang kann einige Minuten dauern.", - "Vuoi impostare APP_CANONICAL_URL a:": "Möchten Sie APP_CANONICAL_URL setzen auf:", - "Vuoi procedere?": "Möchten Sie fortfahren?", - "Vuoi rifiutare questa recensione? L'utente verrà avvisato dell'esito.": "Möchten Sie diese Rezension ablehnen? Der Benutzer wird über das Ergebnis benachrichtigt.", - "WCAG AA Conforme": "WCAG AA konform", - "Website (Sito Web)": "Website", - "Wishlist": "Wunschliste", - "Wishlist disponibile": "Wunschliste verfügbar", - "Working...": "In Bearbeitung...", - "Yes, fix": "Ja, beheben", - "Yes, run": "Ja, ausführen", - "Zona Pericolosa": "Gefahrenbereich", - "acquisto": "Kauf", - "agosto": "August", - "al": "bis", - "altamente consigliato": "dringend empfohlen", - "aprile": "April", - "attivata": "aktiviert", - "autori": "Autoren", - "autori. Questa azione non può essere annullata.": "Autoren. Diese Aktion kann nicht rückgängig gemacht werden.", - "autori. Tutti i libri verranno assegnati all'autore risultante.": "Autoren. Alle Bücher werden dem resultierenden Autor zugeordnet.", - "biblioteca, prestito libri, catalogo online, scopri libri, prenotazioni": "Bibliothek, Buchausleihe, Online-Katalog, Bücher entdecken, Vormerkungen", - "bottoni nelle card": "Schaltflächen in Karten", - "bottoni principali": "Hauptschaltflächen", - "chiavi": "Schlüssel", - "chiavi tradotte": "übersetzte Schlüssel", - "classe principale": "Hauptklasse", - "come nuovo autore": "als neuer Autor", - "completamento": "Abschluss", - "con successo": "erfolgreich", - "copi": "Exemplar(e)", - "copia": "Exemplar", - "copie": "Exemplare", - "crontab -e": "crontab -e", - "danneggiato": "beschädigt", - "della lingua desiderata.": "der gewünschten Sprache.", - "deve iniziare con": "muss beginnen mit", - "di": "von", - "di %s": "von %s", - "dicembre": "Dezember", - "directory": "Verzeichnisse", - "disattivata": "deaktiviert", - "disponibile": "verfügbar", - "disponibili ora": "jetzt verfügbar", - "donazione": "Spende", - "dopo aver completato l'installazione.": "nach Abschluss der Installation.", - "eBook (PDF/ePub)": "eBook (PDF/ePub)", - "eBook caricato!": "eBook hochgeladen!", - "eBook disponibile": "eBook verfügbar", - "editori": "Verlage", - "editori. Questa azione non può essere annullata.": "Verlage. Diese Aktion kann nicht rückgängig gemacht werden.", - "editori. Tutti i libri verranno assegnati all'editore risultante.": "Verlage. Alle Bücher werden dem resultierenden Verlag zugeordnet.", - "elementi": "Elemente", - "elemento": "Element", - "elimina la cartella": "den Ordner löschen", - "errore di comunicazione con il server": "Kommunikationsfehler mit dem Server", - "es. 0.450": "z. B. 0,450", - "es. 15": "z. B. 15", - "es. 19.90": "z. B. 19,90", - "es. 2020": "z. B. 2020", - "es. 2024": "z. B. 2024", - "es. 2025": "z. B. 2025", - "es. 21x14 cm": "z. B. 21x14 cm", - "es. 26 agosto 2025": "z. B. 26. August 2025", - "es. 320": "z. B. 320", - "es. 599.9, 004.6782, 641.5945": "z.B. 599.9, 004.6782, 641.5945", - "es. 599.9, 004.6782, 641.5945, 599.1": "z.B. 599.9, 004.6782, 641.5945, 599.1", - "es. 8842935786": "z. B. 8842935786", - "es. 978-88-429-3578-0": "z. B. 978-88-429-3578-0", - "es. 9788842935780": "z. B. 9788842935780", - "es. Acquisto, Donazione, Prestito": "z. B. Kauf, Spende, Ausleihe", - "es. Biblioteca Civica": "z. B. Stadtbibliothek", - "es. Copertina rigida, Brossura": "z. B. Hardcover, Taschenbuch", - "es. Fantasy contemporaneo": "z. B. Zeitgenössische Fantasy", - "es. Gianni De Conno": "z. B. Gianni De Conno", - "es. I Classici": "z. B. Die Klassiker", - "es. INV-2024-001": "z. B. INV-2024-001", - "es. Integrazione Sito Web": "z. B. Website-Integration", - "es. Italiano, Inglese": "z. B. Italienisch, Englisch", - "es. La morale anarchica": "z. B. Die anarchistische Moral", - "es. Mario Rossi": "z. B. Max Mustermann", - "es. Noir mediterraneo": "z. B. Mediterraner Noir", - "es. Prima edizione": "z. B. Erstausgabe", - "es. RSSMRA80A01H501U": "z. B. RSSMRA80A01H501U", - "es. Urban fantasy": "z. B. Urban Fantasy", - "es. noreply@biblioteca.local": "z. B. noreply@bibliothek.local", - "es. romanzo, fantasy, avventura (separare con virgole)": "z. B. Roman, Fantasy, Abenteuer (mit Kommas trennen)", - "eventi": "Veranstaltungen", - "eventi, biblioteca, cultura": "Veranstaltungen, Bibliothek, Kultur", - "fallite.": "fehlgeschlagen.", - "fas fa-users": "fas fa-users", - "febbraio": "Februar", - "gennaio": "Januar", - "giorni prima della scadenza": "Tage vor Ablauf", - "giugno": "Juni", - "https://www.editore.com": "https://www.verlag.de", - "icone disponibili": "verfügbare Symbole", - "in attesa": "ausstehend", - "in_corso": "laufend", - "in_ritardo": "überfällig", - "info@editore.com": "info@verlag.de", - "installazione inglese usa": "Englische Installation verwendet", - "kg": "kg", - "libri": "Bücher", - "libri eliminati": "Bücher gelöscht", - "libri trovati": "Bücher gefunden", - "libri. Questa azione non può essere annullata.": "Bücher. Diese Aktion kann nicht rückgängig gemacht werden.", - "libro": "Buch", - "libro trovato": "Buch gefunden", - "linea": "Zeile", - "lingue": "Sprachen", - "lingue. Errori:": "Sprachen. Fehler:", - "link, accenti": "Links, Akzente", - "luglio": "Juli", - "maggio": "Mai", - "manutenzione": "Wartung", - "mario.rossi@email.it": "max.mustermann@email.de", - "marzo": "März", - "minuti fa": "vor Minuten", - "nell'header. Non includere i tag": "im Header. Fügen Sie keine Tags ein", - "nella directory dell'applicazione.": "im Anwendungsverzeichnis.", - "nella nostra biblioteca.": "in unserer Bibliothek.", - "nella root del progetto impedisce qualsiasi accesso non autorizzato.": "im Projektstammverzeichnis verhindert jeden unbefugten Zugriff.", - "non può contenere spazi": "darf keine Leerzeichen enthalten", - "non può essere vuota": "darf nicht leer sein", - "novembre": "November", - "o multipli separati da |": "oder mehrere getrennt durch |", - "o multipli: Engels;Marx": "oder mehrere: Engels;Marx", - "opzionale": "optional", - "opzionali": "optional", - "ordine:": "Reihenfolge:", - "ore fa": "vor Stunden", - "ottobre": "Oktober", - "pagina": "Seite", - "pagine": "Seiten", - "per conformità GDPR.": "zur DSGVO-Konformität.", - "per evitare blocchi (delay di 3 secondi tra ogni richiesta).": "um Blockierungen zu vermeiden (3 Sekunden Verzögerung zwischen jeder Anfrage).", - "per il giorno": "für den Tag", - "per pagina": "pro Seite", - "perso": "verloren", - "preferiti": "Favoriten", - "premi Invio per crearne uno nuovo.": "drücken Sie die Eingabetaste, um einen neuen zu erstellen.", - "prenotato": "vorgemerkt", - "prenotazione attiva": "aktive Vormerkung", - "prenotazioni": "Vormerkungen", - "prenotazioni attive": "aktive Vormerkungen", - "prestato": "ausgeliehen", - "prestiti attivi": "aktive Ausleihen", - "prestiti passati": "vergangene Ausleihen", - "prestiti totali": "Ausleihen gesamt", - "prestito attivo": "aktive Ausleihe", - "prestito passato": "vergangene Ausleihe", - "prima di procedere.": "bevor Sie fortfahren.", - "recensione": "Rezension", - "recensioni": "Rezensionen", - "referente@editore.com": "kontakt@verlag.de", - "restituito": "zurückgegeben", - "richiesta in sospeso": "ausstehende Anfrage", - "richieste in sospeso": "ausstehende Anfragen", - "risultati": "Ergebnisse", - "risultato": "Ergebnis", - "secondi (min: 5, max: 60)": "Sekunden (min: 5, max: 60)", - "seleziona": "durchsuchen", - "seleziona file": "Datei auswählen", - "selezionati": "ausgewählt", - "sessioni attive": "aktive Sitzungen", - "settembre": "September", - "sfoglia": "durchsuchen", - "sottogeneri": "Untergenres", - "sul server tramite SSH.": "auf dem Server über SSH.", - "titoli": "Titel", - "utente@example.com": "benutzer@beispiel.de", - "utenti": "Benutzer", - "verranno automaticamente selezionati.": "werden automatisch ausgewählt.", - "visualizzazione per copia": "Ansicht nach Exemplar", - "Български (BG)": "Bulgarisch (BG)", - "עברית (HE)": "Hebräisch (HE)", - "– Nessuno –": "– Keine –", - "••••••••": "••••••••", - "⚙️ Comportamento Automatico: Se inserisci codice in \"JavaScript Analitici\" o \"JavaScript Marketing\", i rispettivi toggle in Impostazioni Privacy verranno automaticamente selezionati.": "⚙️ Automatisches Verhalten: Wenn Sie Code in \"Analytics JavaScript\" oder \"Marketing JavaScript\" einfügen, werden die entsprechenden Schalter in den Datenschutzeinstellungen automatisch aktiviert.", - "⚠️ AZIONE RICHIESTA: Installazione Dipendenze PHP": "⚠️ AKTION ERFORDERLICH: Installation der PHP-Abhängigkeiten", - "⚠️ Privacy: Le mappe esterne vengono caricate solo se l'utente accetta i cookie Analytics.": "⚠️ Datenschutz: Externe Karten werden nur geladen, wenn der Benutzer Analytics-Cookies akzeptiert.", - "✅ Dipendenze PHP installate correttamente": "✅ PHP-Abhängigkeiten korrekt installiert", - "✓ Connessione riuscita! Database è vuoto e pronto per l'installazione.": "✓ Verbindung erfolgreich! Datenbank ist leer und bereit für die Installation.", - "✓ Crea autori mancanti": "✓ Fehlende Autoren erstellen", - "✓ Crea editori mancanti": "✓ Fehlende Verlage erstellen", - "✓ Report errori": "✓ Fehlerbericht", - "✓ Validazione dati": "✓ Datenvalidierung", - "❌ Errore di comunicazione con il server": "Kommunikationsfehler mit dem Server", - "💡 Non hai accesso SSH?": "💡 Sie haben keinen SSH-Zugang?", - "📋 Importante: Devi elencare manualmente i cookie tracciati da questi script nella Pagina Cookie per conformità GDPR.": "📋 Wichtig: Sie müssen die von diesen Skripten erfassten Cookies manuell auf der Cookie-Seite auflisten, um die DSGVO-Konformität zu gewährleisten.", - "📋 Istruzioni SSH (Click per espandere/chiudere)": "📋 SSH-Anleitung (Klicken zum Ein-/Ausklappen)", - "🔒 Sicurezza Importante": "🔒 Wichtige Sicherheit", - "Leggi PDF": "PDF lesen", - "Chiudi Visualizzatore": "Viewer schließen", - "Visualizzatore PDF": "PDF-Viewer", - "Usa la funzione di ricerca del browser per trovare testo nel documento": "Verwenden Sie die Suchfunktion des Browsers, um Text im Dokument zu finden", - "Usa il controllo schermo intero del viewer o del browser": "Verwenden Sie die Vollbildsteuerung des Viewers oder Browsers", - "Condivisione": "Teilen", - "Seleziona i pulsanti di condivisione da mostrare nella pagina del libro.": "Wählen Sie die Teilen-Schaltflächen aus, die auf der Buchseite angezeigt werden sollen.", - "Nessun pulsante selezionato": "Keine Schaltflächen ausgewählt", - "Salva impostazioni condivisione": "Freigabeeinstellungen speichern", - "Impostazioni di condivisione aggiornate.": "Freigabeeinstellungen aktualisiert.", - "Condividi su X": "Auf X teilen", - "Condividi su Telegram": "Auf Telegram teilen", - "Condividi su LinkedIn": "Auf LinkedIn teilen", - "Condividi su Reddit": "Auf Reddit teilen", - "Condividi su Pinterest": "Auf Pinterest teilen", - "Condividi su Threads": "Auf Threads teilen", - "Condividi su Bluesky": "Auf Bluesky teilen", - "Condividi su Tumblr": "Auf Tumblr teilen", - "Salva su Pocket": "Auf Pocket speichern", - "Condividi su VK": "Auf VK teilen", - "Condividi su LINE": "Auf LINE teilen", - "Invia via SMS": "Per SMS senden", - "Invia per email": "Per E-Mail senden", - "Copia link": "Link kopieren", - "Collezione: %d libri, %d autori, %d editori.": "Sammlung: %d Bücher, %d Autoren, %d Verlage.", - "Catalogo bibliotecario gestito con [Pinakes](https://github.com/fabiodalez-dev/Pinakes). Disponibile in: %s.": "Bibliothekskatalog betrieben mit [Pinakes](https://github.com/fabiodalez-dev/Pinakes). Verfügbar in: %s.", - "Pagine Principali": "Hauptseiten", - "Sfoglia e cerca la collezione completa": "Die gesamte Buchsammlung durchsuchen", - "Informazioni sulla biblioteca": "Über diese Bibliothek", - "Calendario eventi culturali": "Kulturveranstaltungskalender", - "Informativa sulla privacy": "Datenschutzerklärung", - "Feed e Scoperta": "Feeds & Entdecken", - "Feed RSS": "RSS-Feed", - "Ultime aggiunte al catalogo (RSS 2.0)": "Neueste Katalogeinträge (RSS 2.0)", - "Indice completo degli URL": "Vollständiges URL-Verzeichnis", - "Interoperabilità bibliotecaria (MARCXML, Dublin Core)": "Bibliotheksinteroperabilität (MARCXML, Dublin Core)", - "Autenticazione utente": "Benutzeranmeldung", - "Registrazione nuovo utente": "Neue Benutzerregistrierung", - "Genera automaticamente un file llms.txt per rendere la biblioteca comprensibile ai modelli linguistici (LLM)": "Automatische Generierung einer llms.txt-Datei, damit die Bibliothek für große Sprachmodelle (LLMs) verständlich wird", - "Cos'è llms.txt:": "Was ist llms.txt:", - "È uno standard emergente (llmstxt.org) che fornisce ai motori AI un sommario strutturato del sito in formato Markdown. Quando attivo, il file viene generato dinamicamente con le statistiche della biblioteca, le pagine pubbliche e le informazioni API.": "Ein aufkommender Standard (llmstxt.org), der KI-Systemen eine strukturierte Markdown-Zusammenfassung der Website bereitstellt. Wenn aktiviert, wird die Datei dynamisch mit Bibliotheksstatistiken, öffentlichen Seiten und API-Informationen generiert.", - "Abilita llms.txt": "llms.txt aktivieren", - "Rende disponibile /llms.txt e lo aggiunge a robots.txt": "Macht /llms.txt verfügbar und fügt es zur robots.txt hinzu", - "Disattivato": "Deaktiviert", - "Tipo Media": "Medientyp", - "Disco": "Schallplatte", - "Tutti i media": "Alle Medien" + "\"%s\" prestato a %s è in ritardo di %d giorni": "\"%s\" ausgeliehen an %s ist %d Tage überfällig", + "$1": "$1", + "$2": "$2", + "%d Indici Mancanti": "%d fehlende Indizes", + "%d Problemi": "%d Probleme", + "%d Tabelle Mancanti": "%d fehlende Tabellen", + "%d autori eliminati": "%d Autoren gelöscht", + "%d copie disponibili su %d": "%d Exemplare von %d verfügbar", + "%d editori eliminati": "%d Verlage gelöscht", + "%d file sensibili protetti": "%d sensible Dateien geschützt", + "%d giorni": "%d Tage", + "%d import logs eliminati (più vecchi di %d giorni)": "%d Importprotokolle gelöscht (älter als %d Tage)", + "%d import registrati": "%d Importe aufgezeichnet", + "%d import registrato": "%d Import aufgezeichnet", + "%d indici creati con successo": "%d Indizes erfolgreich erstellt", + "%d indici mancanti trovati": "%d fehlende Indizes gefunden", + "%d libri eliminati": "%d Bücher gelöscht", + "%d minuti fa": "vor %d Minuten", + "%d minuto fa": "vor %d Minute", + "%d notifica non letta": "%d ungelesene Benachrichtigung", + "%d notifiche non lette": "%d ungelesene Benachrichtigungen", + "%d ora fa": "vor %d Stunde", + "%d ore fa": "vor %d Stunden", + "%d prenotazione attiva": "%d aktive Vormerkung", + "%d prenotazioni attive": "%d aktive Vormerkungen", + "%d prestiti attivi": "%d aktive Ausleihen", + "%d prestiti in ritardo": "%d überfällige Ausleihen", + "%d prestiti passati": "%d vergangene Ausleihen", + "%d prestito attivo": "%d aktive Ausleihe", + "%d prestito in ritardo": "%d überfällige Ausleihe", + "%d prestito passato": "%d vergangene Ausleihe", + "%d problemi rilevati": "%d Probleme erkannt", + "%d recensione": "%d Rezension", + "%d recensioni": "%d Rezensionen", + "%d richiesta in sospeso": "%d ausstehende Anfrage", + "%d richieste in sospeso": "%d ausstehende Anfragen", + "%d tabelle create con successo": "%d Tabellen erfolgreich erstellt", + "%d titoli": "%d Titel", + "%s ha prenotato \"%s\"": "%s hat \"%s\" vorgemerkt", + "%s non è valido": "%s ist ungültig", + "%s è richiesto": "%s ist erforderlich", + "%s è richiesta": "%s ist erforderlich", + "%s deve essere di almeno 8 caratteri": "%s muss mindestens 8 Zeichen lang sein", + "%s non può superare i 72 caratteri": "%s darf nicht länger als 72 Zeichen sein", + "(codici ISO e nomi inglesi accettati)": "(ISO-Codes und englische Namen akzeptiert)", + "(filtrati da _MAX_ libri totali)": "(gefiltert von insgesamt _MAX_ Büchern)", + "(opzionale - URL completo)": "(optional – vollständige URL)", + "(opzionale - max 160 caratteri)": "(optional – max. 160 Zeichen)", + "(opzionale - max 200 caratteri)": "(optional - max. 200 Zeichen)", + "(opzionale - max 60 caratteri)": "(optional – max. 60 Zeichen)", + "(opzionale - max 70 caratteri)": "(optional - max. 70 Zeichen)", + "(opzionale - separate da virgola)": "(optional – kommagetrennt)", + "(opzionale)": "(optional)", + "(percorso legacy)": "(Legacy-Pfad)", + "+ 15 campi aggiuntivi disponibili (vedi CSV di esempio)": "+ 15 zusätzliche Felder verfügbar (siehe Beispiel-CSV)", + "+ Aggiungi da preset...": "+ Aus Vorlage hinzufügen...", + "+39 02 1234567": "+49 30 1234567", + "+39 123 456 7890": "+49 123 456 7890", + ", %d errori": ", %d Fehler", + ", %d libri arricchiti con scraping": ", %d Bücher per Scraping angereichert", + "-- Seleziona --": "-- Auswählen --", + "-- Seleziona un template --": "-- Vorlage auswählen --", + "... e altri %d errori": "... und %d weitere Fehler", + ".env caricato OK": ".env erfolgreich geladen", + "/* Inserisci il tuo codice CSS qui */\n/* Esempio: */\n/* body { font-size: 16px; } */": "/* Geben Sie hier Ihren CSS-Code ein */\n/* Beispiel: */\n/* body { font-size: 16px; } */", + "// Script analytics (es. Google Analytics)\n// Esempio Google Analytics 4:\n// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n// ga('create', 'UA-XXXXX-Y', 'auto');\n// ga('send', 'pageview');": "// Analytics-Skripte (z. B. Google Analytics)\n// Google Analytics 4 Beispiel:\n// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n// ga('create', 'UA-XXXXX-Y', 'auto');\n// ga('send', 'pageview');", + "// Script essenziali (es. chat, accessibility)\n// Esempio:\n// console.log('Essential JS loaded');": "// Essentielle Skripte (z. B. Chat, Barrierefreiheit)\n// Beispiel:\n// console.log('Essential JS loaded');", + "// Script marketing (es. Facebook Pixel)\n// Esempio Facebook Pixel:\n// !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n// n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n// n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n// t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n// document,'script','https://connect.facebook.net/en_US/fbevents.js');\n// fbq('init', 'YOUR_PIXEL_ID');\n// fbq('track', 'PageView');": "// Marketing-Skripte (z. B. Facebook Pixel)\n// Facebook Pixel Beispiel:\n// !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n// n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n// n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n// t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n// document,'script','https://connect.facebook.net/en_US/fbevents.js');\n// fbq('init', 'YOUR_PIXEL_ID');\n// fbq('track', 'PageView');", + "/catalogo": "/catalog", + "0-10 libri": "0–10 Bücher", + "1 copia disponibile su %d": "1 Exemplar von %d verfügbar", + "1 evento": "1 Veranstaltung", + "1. Accesso al server": "1. Serverzugang", + "1. Collegati al server via SSH:": "1. Verbinden Sie sich per SSH mit dem Server:", + "101-500 libri": "101–500 Bücher", + "11-50 libri": "11–50 Bücher", + "2. Aggiungi una delle configurazioni seguenti:": "2. Fügen Sie eine der folgenden Konfigurationen hinzu:", + "2. Vai nella directory dell'applicazione:": "2. Wechseln Sie in das Anwendungsverzeichnis:", + "3. Installa le dipendenze con Composer:": "3. Installieren Sie die Abhängigkeiten mit Composer:", + "4. Verifica che le dipendenze siano state installate:": "4. Überprüfen Sie, ob die Abhängigkeiten installiert wurden:", + "51-100 libri": "51–100 Bücher", + ": attiva per ordinare la colonna in ordine crescente": ": aktivieren, um die Spalte aufsteigend zu sortieren", + ": attiva per ordinare la colonna in ordine decrescente": ": aktivieren, um die Spalte absteigend zu sortieren", + "A": "A", + "AA Testo Grande": "AA Großer Text", + "API": "API", + "API Key": "API-Schlüssel", + "API Key già configurata": "API-Schlüssel bereits konfiguriert", + "API Keys": "API-Schlüssel", + "API Pubblica": "Öffentliche API", + "API abilitata con successo.": "API erfolgreich aktiviert.", + "API configurata": "API konfiguriert", + "API disabilitata con successo.": "API erfolgreich deaktiviert.", + "API key creata con successo.": "API-Schlüssel erfolgreich erstellt.", + "API key eliminata con successo.": "API-Schlüssel erfolgreich gelöscht.", + "APP_CANONICAL_URL configurato con valore non valido: '%s'. Link nelle email potrebbero non funzionare. Valore suggerito: %s": "APP_CANONICAL_URL mit ungültigem Wert konfiguriert: '%s'. E-Mail-Links funktionieren möglicherweise nicht. Empfohlener Wert: %s", + "APP_CANONICAL_URL configurato ma vuoto nel file .env. Link nelle email useranno fallback a HTTP_HOST. Valore suggerito: %s": "APP_CANONICAL_URL konfiguriert, aber leer in der .env-Datei. E-Mail-Links verwenden HTTP_HOST als Fallback. Empfohlener Wert: %s", + "APP_CANONICAL_URL non configurato nel file .env. Link nelle email potrebbero non funzionare correttamente. Valore suggerito: %s": "APP_CANONICAL_URL nicht in der .env-Datei konfiguriert. Links in E-Mails funktionieren möglicherweise nicht korrekt. Empfohlener Wert: %s", + "ATTENZIONE: Disinstallazione Irreversibile": "ACHTUNG: Unwiderrufliche Deinstallation", + "AVVISO Trigger:": "Trigger-WARNUNG:", + "Abilita": "Aktivieren", + "Abilita Client SRU": "SRU-Client aktivieren", + "Abilita Cookie Banner": "Cookie-Banner aktivieren", + "Abilita HSTS": "HSTS aktivieren", + "Abilita Modalità Catalogo": "Katalogmodus aktivieren", + "Abilita Modalità Solo Catalogo": "Reinen Katalogmodus aktivieren", + "Abilita Plugin": "Plugin aktivieren", + "Abilita Server SRU": "SRU-Server aktivieren", + "Abilita o disabilita l'accesso all'API pubblica": "Öffentlichen API-Zugang aktivieren oder deaktivieren", + "Abilitata": "Aktiviert", + "Abilitata - Visibile nel frontend": "Aktiviert – Im Frontend sichtbar", + "Abilitato": "Aktiviert", + "Accedi": "Anmelden", + "Accedi a /installer/?force=1 per forzare una reinstallazione": "Rufen Sie /installer/?force=1 auf, um eine Neuinstallation zu erzwingen", + "Accedi al server tramite SSH e modifica il crontab:": "Greifen Sie per SSH auf den Server zu und bearbeiten Sie den Crontab:", + "Accedi al tuo account": "Melden Sie sich bei Ihrem Konto an", + "Accedi all'area admin con le credenziali sopra indicate": "Melden Sie sich mit den oben angegebenen Zugangsdaten im Adminbereich an", + "Accedi e Procedi": "Anmelden und fortfahren", + "Accedi per Prenotare": "Anmelden zum Vormerken", + "Accedi per aggiungere ai Preferiti": "Melden Sie sich an, um zu den Favoriten hinzuzufügen", + "Accento": "Akzent", + "Accesso": "Anmeldung", + "Accesso Richiesto": "Anmeldung erforderlich", + "Accesso in corso...": "Anmeldung läuft...", + "Accesso negato. Permessi insufficienti.": "Zugriff verweigert. Unzureichende Berechtigungen.", + "Accesso non autorizzato": "Unbefugter Zugriff", + "Accetta selezionati": "Ausgewählte akzeptieren", + "Accetta tutti": "Alle akzeptieren", + "Accetto la": "Ich akzeptiere die", + "Account": "Konto", + "Account In Attesa": "Konto ausstehend", + "Account Sospeso": "Konto gesperrt", + "Account attivato": "Konto aktiviert", + "Account creato con successo! Verifica la tua email.": "Konto erfolgreich erstellt! Überprüfen Sie Ihre E-Mail.", + "Account creato! In attesa di approvazione da parte dell'amministratore.": "Konto erstellt! Warten auf Genehmigung durch den Administrator.", + "Acquisito a": "Erworben um", + "Acquisito da": "Erworben von", + "Acquisto": "Kauf", + "Adesso": "Gerade eben", + "Admin": "Admin", + "Admin Dewey": "Dewey-Verwaltung", + "Aggiorna": "Aktualisieren", + "Aggiorna Dati": "Daten aktualisieren", + "Aggiorna Evento": "Veranstaltung aktualisieren", + "Aggiorna Ora": "Jetzt aktualisieren", + "Aggiorna Statistiche": "Statistiken aktualisieren", + "Aggiorna da ISBN": "Von ISBN aktualisieren", + "Aggiorna i dettagli del libro:": "Buchdetails aktualisieren:", + "Aggiorna i dettagli dell'autore: %s": "Autorendetails aktualisieren: %s", + "Aggiorna i dettagli dell'editore:": "Verlagsdetails aktualisieren:", + "Aggiorna il conteggio delle copie disponibili": "Anzahl der verfügbaren Exemplare aktualisieren", + "Aggiorna le informazioni del profilo selezionato.": "Ausgewählte Profilinformationen aktualisieren.", + "Aggiorna password": "Passwort aktualisieren", + "Aggiornamenti": "Aktualisierungen", + "Aggiornamento alla versione %s completato": "Aktualisierung auf Version %s abgeschlossen", + "Aggiornamento completato con successo": "Aktualisierung erfolgreich abgeschlossen", + "Aggiornamento completato!": "Aktualisierung abgeschlossen!", + "Aggiornamento disponibile!": "Aktualisierung verfügbar!", + "Aggiornamento fallito": "Aktualisierung fehlgeschlagen", + "Aggiornamento già in corso": "Aktualisierung läuft bereits", + "Aggiornamento in corso. Riprova tra qualche minuto.": "Aktualisierung läuft. Bitte versuchen Sie es in einigen Minuten erneut.", + "Aggiornamento in corso...": "Aktualisierung läuft...", + "Aggiornamento...": "Aktualisierung...", + "Aggiornata in base a scaffale, mensola e posizione.": "Aktualisiert basierend auf Regal, Regalboden und Position.", + "Aggiornate %d righe": "%d Zeilen aktualisiert", + "Aggiornati": "Aktualisiert", + "Aggiungere una Nuova Lingua": "Eine neue Sprache hinzufügen", + "Aggiungi": "Hinzufügen", + "Aggiungi Genere Rapido": "Genre schnell hinzufügen", + "Aggiungi Lingua": "Sprache hinzufügen", + "Aggiungi Nuova Lingua": "Neue Sprache hinzufügen", + "Aggiungi Nuovo Autore": "Neuen Autor hinzufügen", + "Aggiungi Nuovo Editore": "Neuen Verlag hinzufügen", + "Aggiungi Nuovo Libro": "Neues Buch hinzufügen", + "Aggiungi Prima Lingua": "Erste Sprache hinzufügen", + "Aggiungi Sottogenere": "Untergenre hinzufügen", + "Aggiungi ai Preferiti": "Zu Favoriten hinzufügen", + "Aggiungi al file .env: APP_CANONICAL_URL=%s": "In der .env-Datei hinzufügen: APP_CANONICAL_URL=%s", + "Aggiungi alla collezione": "Zur Sammlung hinzufügen", + "Aggiungi decimale": "Dezimalstelle hinzufügen", + "Aggiungi eventuali note sul prestito": "Fügen Sie eventuelle Anmerkungen zur Ausleihe hinzu", + "Aggiungi eventuali note...": "Anmerkungen hinzufügen...", + "Aggiungi i libri che ti interessano dalla scheda di dettaglio per ricevere un promemoria quando tornano disponibili.": "Fügen Sie Bücher, die Sie interessieren, über die Detailseite hinzu, um eine Erinnerung zu erhalten, wenn sie wieder verfügbar sind.", + "Aggiungi la tua API key per interrogare Google Books quando importi un ISBN. Google viene utilizzato prima di Open Library, ma dopo Scraping Pro.": "Fügen Sie Ihren API-Schlüssel hinzu, um Google Books bei ISBN-Importen abzufragen. Google wird vor Open Library, aber nach Scraping Pro verwendet.", + "Aggiungi le mensole (livelli) a ogni scaffale": "Fügen Sie jedem Regal Regalböden (Ebenen) hinzu", + "Aggiungi nuovo libro": "Neues Buch hinzufügen", + "Aggiungi primo libro": "Erstes Buch hinzufügen", + "Aggiungi scaffali e mensole per la tua biblioteca": "Fügen Sie Regale und Regalböden für Ihre Bibliothek hinzu", + "Aggiungi un motivo (opzionale)": "Grund hinzufügen (optional)", + "Aggiungi un nuovo titolo per arricchire il catalogo di questo editore.": "Fügen Sie einen neuen Titel hinzu, um den Katalog dieses Verlags zu erweitern.", + "Aggiunti di recente al catalogo": "Kürzlich zum Katalog hinzugefügt", + "Aggiunto il": "Hinzugefügt am", + "Aiuto": "Hilfe", + "Al": "Bis", + "Al momento non ci sono eventi attivi. Continua a seguirci per restare aggiornato sui prossimi appuntamenti.": "Derzeit gibt es keine aktiven Veranstaltungen. Folgen Sie uns weiterhin, um über kommende Termine informiert zu bleiben.", + "Al momento non ci sono eventi programmati. Torna a visitare questa pagina per scoprire i prossimi appuntamenti.": "Derzeit sind keine Veranstaltungen geplant. Besuchen Sie diese Seite erneut, um kommende Termine zu entdecken.", + "Al:": "Bis:", + "Alcune date richieste non sono disponibili": "Einige angeforderte Termine sind nicht verfügbar", + "Alcuni mancanti": "Einige fehlen", + "Alcuni requisiti non sono soddisfatti. Risolvi i problemi prima di continuare.": "Einige Anforderungen sind nicht erfüllt. Beheben Sie die Probleme, bevor Sie fortfahren.", + "Alert prestito in ritardo (Admin)": "Überfällige Ausleihe – Warnung (Admin)", + "Allegato": "Anhang", + "Almeno uno dei seguenti parametri è richiesto:": "Mindestens einer der folgenden Parameter ist erforderlich:", + "Altri eventi in programma": "Weitere geplante Veranstaltungen", + "Altri filtri": "Weitere Filter", + "Altro": "Sonstiges", + "Amministratore": "Administrator", + "Analitici:": "Analyse:", + "Anni di Vita": "Lebensjahre", + "Anno": "Jahr", + "Anno (YYYY)": "Jahr (JJJJ)", + "Anno a": "Jahr bis", + "Anno da": "Jahr von", + "Anno di Pubblicazione": "Erscheinungsjahr", + "Anno di pubblicazione": "Erscheinungsjahr", + "Anno di Uscita": "Erscheinungsjahr", + "Anno max": "Jahr max.", + "Anno min": "Jahr min.", + "Anno numerico (usato per filtri e ordinamento)": "Numerisches Jahr (wird für Filter und Sortierung verwendet)", + "Anno pubblicazione": "Erscheinungsjahr", + "Anno pubblicazione a": "Erscheinungsjahr bis", + "Anno pubblicazione da": "Erscheinungsjahr von", + "Anno:": "Jahr:", + "Annulla": "Abbrechen", + "Annulla Prestito": "Ausleihe stornieren", + "Annulla Prestito Scaduto": "Überfällige Ausleihe stornieren", + "Annulla prenotazione": "Vormerkung stornieren", + "Annullare il prestito scaduto?": "Die überfällige Ausleihe stornieren?", + "Annullare questa prenotazione?": "Diese Vormerkung stornieren?", + "Annullata": "Storniert", + "Annullato": "Storniert", + "Anteprima": "Vorschau", + "Anteprima Banner": "Banner-Vorschau", + "Anteprima copertina": "Covervorschau", + "Anteprima immagine caricata": "Vorschau des hochgeladenen Bildes", + "Anteprima logo": "Logo-Vorschau", + "Anteprima non disponibile": "Vorschau nicht verfügbar", + "Anteprima:": "Vorschau:", + "Apparirà nei risultati di ricerca Google. Se vuoto, usa il titolo hero o il nome dell'app.": "Erscheint in den Google-Suchergebnissen. Wenn leer, wird der Hero-Titel oder der App-Name verwendet.", + "Apparirà sotto il titolo nei risultati di ricerca. Se vuoto, usa il sottotitolo hero o una descrizione generica.": "Erscheint unter dem Titel in den Suchergebnissen. Wenn leer, wird der Hero-Untertitel oder eine allgemeine Beschreibung verwendet.", + "Applica": "Anwenden", + "Applica Filtri": "Filter anwenden", + "Applica Fix": "Fix anwenden", + "Applicazione Già Installata": "Anwendung bereits installiert", + "Applicazione configurata:": "Anwendung konfiguriert:", + "Applicazione del fix...": "Fix wird angewendet...", + "Applicazione già installata": "Anwendung bereits installiert", + "Approva": "Genehmigen", + "Approva Prestiti": "Ausleihen genehmigen", + "Approva Prestito?": "Ausleihe genehmigen?", + "Approva e Invia Email Attivazione": "Genehmigen und Aktivierungs-E-Mail senden", + "Approva o rifiuta le recensioni degli utenti": "Benutzerrezensionen genehmigen oder ablehnen", + "Approva o rifiuta le richieste degli utenti": "Benutzeranfragen genehmigen oder ablehnen", + "Approva prestito?": "Ausleihe genehmigen?", + "Approva recensione": "Rezension genehmigen", + "Approvata": "Genehmigt", + "Approvata il": "Genehmigt am", + "Approvato": "Genehmigt", + "Approvato il %s": "Genehmigt am %s", + "Approvato!": "Genehmigt!", + "Approverai questa richiesta di prestito?": "Möchten Sie diese Ausleihanfrage genehmigen?", + "Apri": "Öffnen", + "Apri Editor": "Editor öffnen", + "Apri Google Cloud Console": "Google Cloud Console öffnen", + "Apri file": "Datei öffnen", + "Apri menu": "Menü öffnen", + "Archivia": "Archivieren", + "Archiviato": "Archiviert", + "Archivio": "Archiv", + "Arricchimento automatico dati": "Automatische Datenanreicherung", + "Arricchisci dati con scraping web (copertine, descrizioni, etc.)": "Daten mit Web-Scraping anreichern (Cover, Beschreibungen usw.)", + "Article (Articolo/Blog)": "Article (Artikel/Blog)", + "Articolo": "Artikel", + "Artista": "Künstler", + "Artista sconosciuto": "Unbekannter Künstler", + "Artisti": "Künstler", + "Ascolta Audiobook": "Hörbuch anhören", + "Ascolta l'audiobook": "Hörbuch anhören", + "Assicurati che corrisponda al tipo di carta per etichette che utilizzi.": "Stellen Sie sicher, dass es mit dem von Ihnen verwendeten Etikettenpapier übereinstimmt.", + "Assicurati che il path assoluto dello script sia corretto": "Stellen Sie sicher, dass der absolute Pfad zum Skript korrekt ist", + "Assicurati che sia configurato correttamente per evitare URL duplicati.": "Stellen Sie sicher, dass die Konfiguration korrekt ist, um doppelte URLs zu vermeiden.", + "At least one search parameter is required (ean, isbn13, isbn10, or author)": "At least one search parameter is required (ean, isbn13, isbn10, or author)", + "Attendere prego": "Bitte warten", + "Attendere prego...": "Bitte warten...", + "Attenzione": "Achtung", + "Attenzione!": "Achtung!", + "Attenzione:": "Achtung:", + "Attenzione: %d prestiti in ritardo": "Achtung: %d überfällige Ausleihen", + "Attenzione: %d prestito in ritardo": "Achtung: %d überfällige Ausleihe", + "Attenzione: Azione Manuale Richiesta": "Achtung: Manueller Eingriff erforderlich", + "Attenzione: Non è stato possibile rimuovere tutte le copie richieste. Alcune copie sono attualmente in prestito.": "Achtung: Es konnten nicht alle angeforderten Exemplare entfernt werden. Einige Exemplare sind derzeit ausgeliehen.", + "Attiva": "Aktiv", + "Attiva Direttamente": "Direkt aktivieren", + "Attiva HTTP Strict Transport Security (max-age: 1 anno, include sottodomini)": "HTTP Strict Transport Security aktivieren (max-age: 1 Jahr, einschließlich Subdomains)", + "Attiva HTTPS solo se hai un certificato SSL valido installato. Attivare HSTS rende permanente il reindirizzamento HTTPS nel browser.": "Aktivieren Sie HTTPS nur, wenn ein gültiges SSL-Zertifikat installiert ist. Die Aktivierung von HSTS macht die HTTPS-Weiterleitung im Browser dauerhaft.", + "Attiva questa opzione solo se il tuo server supporta HTTPS. Se il tuo hosting forza già HTTPS automaticamente, non è necessario abilitarla (potrebbe causare redirect loop).": "Aktivieren Sie diese Option nur, wenn Ihr Server HTTPS unterstützt. Falls Ihr Hosting bereits automatisch HTTPS erzwingt, müssen Sie sie nicht aktivieren (könnte eine Weiterleitungsschleife verursachen).", + "Attivando questa modalità verranno disabilitati completamente i prestiti, le prenotazioni e la wishlist. Gli utenti potranno solo consultare il catalogo.": "Durch Aktivierung dieses Modus werden Ausleihen, Vormerkungen und Wunschliste vollständig deaktiviert. Benutzer können nur den Katalog einsehen.", + "Attivare questo tema?": "Dieses Theme aktivieren?", + "Attivato:": "Aktiviert:", + "Attivi": "Aktiv", + "Attività": "Aktivität", + "Attivo": "Aktiv", + "Attivo:": "Aktiv:", + "Attuale": "Aktuell", + "Attualmente prestati": "Derzeit ausgeliehen", + "Audio": "Audio", + "Audio URL": "Audio-URL", + "Audiobook": "Hörbuch", + "Audiobook (MP3/M4A/OGG)": "Hörbuch (MP3/M4A/OGG)", + "Audiobook caricato!": "Hörbuch hochgeladen!", + "Audiobook disponibile": "Hörbuch verfügbar", + "Aumenta Copie": "Exemplare erhöhen", + "Autenticazione": "Authentifizierung", + "Autenticazione Admin Richiesta": "Admin-Authentifizierung erforderlich", + "Autenticazione Richiesta": "Authentifizierung erforderlich", + "Autenticazione richiesta.": "Authentifizierung erforderlich.", + "Auto": "Auto", + "Auto-attivazione:": "Auto-Aktivierung:", + "Auto-attivazione: Se compili questo campo, il toggle \"Mostra Cookie Analitici\" in Privacy verrà attivato automaticamente.": "Automatische Aktivierung: Wenn Sie dieses Feld ausfüllen, wird der Schalter \"Analyse-Cookies anzeigen\" unter Datenschutz automatisch aktiviert.", + "Auto-attivazione: Se compili questo campo, il toggle \"Mostra Cookie Marketing\" in Privacy verrà attivato automaticamente.": "Automatische Aktivierung: Wenn Sie dieses Feld ausfüllen, wird der Schalter \"Marketing-Cookies anzeigen\" unter Datenschutz automatisch aktiviert.", + "Auto-detect se vuoto": "Automatische Erkennung wenn leer", + "Automatismi": "Automatisierungen", + "Autore": "Autor", + "Autore \"${normalizedLabel}\" pronto per essere creato": "Autor \"${normalizedLabel}\" bereit zur Erstellung", + "Autore \"${normalizedLabel}\" è già selezionato": "Autor \"${normalizedLabel}\" ist bereits ausgewählt", + "Autore \"%s\" pronto per essere creato": "Autor \"%s\" bereit zur Erstellung", + "Autore \"%s\" è già selezionato": "Autor \"%s\" ist bereits ausgewählt", + "Autore A-Z": "Autor A–Z", + "Autore Z-A": "Autor Z–A", + "Autore eliminato con successo.": "Autor erfolgreich gelöscht.", + "Autore non specificato": "Autor nicht angegeben", + "Autore principale": "Hauptautor", + "Autore sconosciuto": "Unbekannter Autor", + "Autore/i:": "Autor(en):", + "Autore:": "Autor:", + "Autori": "Autoren", + "Autori con biografie": "Autoren mit Biografien", + "Autori ed editori vengono creati automaticamente": "Autoren und Verlage werden automatisch erstellt", + "Autori multipli separati da %s": "Mehrere Autoren getrennt durch %s", + "Autori multipli separati da %s o %s": "Mehrere Autoren getrennt durch %s oder %s", + "Autori pubblicati": "Veröffentlichte Autoren", + "Autori uniti": "Autoren zusammengeführt", + "Autori uniti con successo": "Autoren erfolgreich zusammengeführt", + "Autori:": "Autoren:", + "Avanti": "Weiter", + "Avanzate": "Erweitert", + "Avvio aggiornamento": "Aktualisierung wird gestartet", + "Avvio backup database": "Datenbank-Backup wird gestartet", + "Avvisa gli amministratori quando un prestito entra in ritardo.": "Warnt Administratoren, wenn eine Ausleihe überfällig wird.", + "Avvisi scadenza prestiti (configurabile in Impostazioni → Avanzate, default 3 giorni prima)": "Erinnerungen zum Ablauf der Ausleihe (konfigurierbar unter Einstellungen → Erweitert, Standard 3 Tage vorher)", + "Avviso": "Warnung", + "Azione richiesta:": "Erforderliche Aktion:", + "Azioni": "Aktionen", + "Azioni Rapide": "Schnellaktionen", + "Azioni Veloci": "Schnellaktionen", + "Azioni di Approvazione": "Genehmigungsaktionen", + "Azioni di Manutenzione": "Wartungsaktionen", + "Azzera": "Zurücksetzen", + "Backup": "Backup", + "Backup Automatico": "Automatisches Backup", + "Backup Salvati": "Gespeicherte Backups", + "Backup completato": "Backup abgeschlossen", + "Backup creato con successo": "Backup erfolgreich erstellt", + "Backup creato!": "Sicherung erstellt!", + "Backup database completato": "Datenbank-Backup abgeschlossen", + "Backup disponibili": "Verfügbare Backups", + "Backup e Sicurezza": "Backup und Sicherheit", + "Backup eliminato": "Backup gelöscht", + "Backup eliminato con successo": "Sicherung erfolgreich gelöscht", + "Backup fallito": "Backup fehlgeschlagen", + "Backup non trovato": "Backup nicht gefunden", + "Backup non trovato.": "Sicherung nicht gefunden.", + "Backup ripristinato con successo.": "Sicherung erfolgreich wiederhergestellt.", + "Backup tabella": "Tabelle wird gesichert", + "Barcode": "Barcode", + "Barra laterale": "Seitenleiste", + "Benvenuto": "Willkommen", + "Benvenuto nell'Installer": "Willkommen beim Installer", + "Benvenuto, %s!": "Willkommen, %s!", + "Biblioteca": "Bibliothek", + "Biblioteca Digitale": "Digitale Bibliothek", + "Biblioteca Digitale - La tua biblioteca online": "Digitale Bibliothek – Ihre Online-Bibliothek", + "Biblioteca Digitale - Scopri e Prenota i Tuoi Libri Preferiti": "Digitale Bibliothek – Entdecken und reservieren Sie Ihre Lieblingsbücher", + "Biblioteca digitale con catalogo completo di libri disponibili per il prestito": "Digitale Bibliothek mit vollständigem Katalog ausleihbarer Bücher", + "Biografia": "Biografie", + "Biografia dell'autore": "Autorenbiografie", + "Bluesky": "Bluesky", + "Books": "Books", + "Bottone": "Schaltfläche", + "Bottone CTA": "CTA-Schaltfläche", + "Bottone Primario": "Primäre Schaltfläche", + "Breadcrumb": "Breadcrumb", + "Breve descrizione per i motori di ricerca": "Kurzbeschreibung für Suchmaschinen", + "Breve descrizione per i motori di ricerca (max 160 caratteri)": "Kurzbeschreibung für Suchmaschinen (max. 160 Zeichen)", + "Buono": "Gut", + "CAP": "PLZ", + "CMS": "CMS", + "CSRF": "CSRF", + "CSRF Fallito": "CSRF fehlgeschlagen", + "CSRF non valido.": "Ungültiges CSRF-Token.", + "CSS Personalizzato": "Benutzerdefiniertes CSS", + "CSV": "CSV", + "Calendario Disponibilità": "Verfügbarkeitskalender", + "Calendario Prestiti e Prenotazioni": "Kalender für Ausleihen und Vormerkungen", + "Calendario eventi": "Veranstaltungskalender", + "Calendario non disponibile": "Kalender nicht verfügbar", + "Call to Action": "Call to Action", + "Call to Action (CTA)": "Call to Action (CTA)", + "Cambia lingua": "Sprache ändern", + "Cambia password": "Passwort ändern", + "Cambia vista": "Ansicht wechseln", + "Campi Database": "Datenbankfelder", + "Campi Supportati": "Unterstützte Felder", + "Campo": "Feld", + "Campo %s obbligatorio": "Feld %s ist erforderlich", + "Campo Obbligatorio": "Pflichtfeld", + "Campo obbligatorio": "Pflichtfeld", + "Campo obbligatorio mancante: %s": "Fehlendes Pflichtfeld: %s", + "Cancel": "Abbrechen", + "Cancella": "Löschen", + "Cancella filtri": "Filter löschen", + "Cancella tutti i filtri": "Alle Filter löschen", + "Caratteristica": "Eigenschaft", + "Carica": "Hochladen", + "Carica %{smart_count} file": "%{smart_count} Datei hochladen", + "Carica Altri": "Mehr laden", + "Carica File CSV": "CSV-Datei hochladen", + "Carica File JSON": "JSON-Datei hochladen", + "Carica File LibraryThing": "LibraryThing-Datei hochladen", + "Carica Nuovo File JSON": "Neue JSON-Datei hochladen", + "Carica Plugin": "Plugin hochladen", + "Carica il file JSON di traduzione (opzionale)": "Übersetzungs-JSON-Datei hochladen (optional)", + "Carica il file usando l'uploader": "Laden Sie die Datei mit dem Uploader hoch", + "Carica logo (PNG, JPG, SVG)": "Logo hochladen (PNG, JPG, SVG)", + "Carica o collega eBook (PDF/ePub) e audiobook (MP3/M4A) per renderli disponibili agli utenti.": "Laden Sie E-Books (PDF/ePub) und Hörbücher (MP3/M4A) hoch oder verknüpfen Sie diese, um sie den Benutzern zur Verfügung zu stellen.", + "Carica un file CSV per importare più libri contemporaneamente": "Laden Sie eine CSV-Datei hoch, um mehrere Bücher gleichzeitig zu importieren", + "Carica un file ZIP contenente il plugin. Il file deve includere un %s con le informazioni del plugin.": "Laden Sie eine ZIP-Datei mit dem Plugin hoch. Die Datei muss eine %s mit den Plugin-Informationen enthalten.", + "Carica un nuovo file per aggiornare le traduzioni (opzionale). Verrà creato un backup del file precedente.": "Laden Sie eine neue Datei hoch, um die Übersetzungen zu aktualisieren (optional). Ein Backup der vorherigen Datei wird erstellt.", + "Caricamento .env...": ".env wird geladen...", + "Caricamento automatico:": "Automatisches Laden:", + "Caricamento backup...": "Backups werden geladen...", + "Caricamento categorie...": "Kategorien werden geladen...", + "Caricamento completato": "Upload abgeschlossen", + "Caricamento condizionale:": "Bedingtes Laden:", + "Caricamento del logo non riuscito. Verifica le dimensioni e il formato del file.": "Logo-Upload fehlgeschlagen. Überprüfen Sie Dateigröße und Format.", + "Caricamento fallito": "Upload fehlgeschlagen", + "Caricamento file...": "Datei wird hochgeladen...", + "Caricamento in corso...": "Wird hochgeladen...", + "Caricamento libri...": "Bücher werden geladen...", + "Caricamento non riuscito. Riprova.": "Upload fehlgeschlagen. Bitte versuchen Sie es erneut.", + "Caricamento sessioni...": "Sitzungen werden geladen...", + "Caricamento...": "Wird geladen...", + "Caroselli Generi": "Genre-Karussells", + "Casa Editrice": "Verlag", + "Case editrici": "Verlage", + "Catalogo": "Katalog", + "Catalogo Completo Libri - Biblioteca Digitale": "Vollständiger Buchkatalog – Digitale Bibliothek", + "Catalogo Libri": "Buchkatalog", + "Catalogo Libri - Biblioteca": "Buchkatalog – Bibliothek", + "Catalogo libri": "Buchkatalog", + "Català (CA)": "Katalanisch (CA)", + "Categoria": "Kategorie", + "Categorie": "Kategorien", + "Categorie Cookie": "Cookie-Kategorien", + "Centro Impostazioni": "Einstellungscenter", + "Cerca": "Suchen", + "Cerca IP...": "IP suchen...", + "Cerca Libri": "Bücher suchen", + "Cerca Libro": "Buch suchen", + "Cerca Utente": "Benutzer suchen", + "Cerca autore...": "Autor suchen...", + "Cerca autori esistenti o aggiungine di nuovi...": "Vorhandene Autoren suchen oder neue hinzufügen...", + "Cerca codice o nome...": "Code oder Name suchen...", + "Cerca editore esistente o inserisci nuovo...": "Vorhandenen Verlag suchen oder neuen eingeben...", + "Cerca editore...": "Verlag suchen...", + "Cerca email...": "E-Mail suchen...", + "Cerca genere...": "Genre suchen...", + "Cerca icona... (es. user, home, book)": "Symbol suchen... (z. B. user, home, book)", + "Cerca libri, autori, ISBN...": "Bücher, Autoren, ISBN suchen...", + "Cerca libri, autori, editori, utenti...": "Bücher, Autoren, Verlage, Benutzer suchen...", + "Cerca libri, autori, editori...": "Bücher, Autoren, Verlage suchen...", + "Cerca libri, autori...": "Bücher, Autoren suchen...", + "Cerca libri...": "Bücher suchen...", + "Cerca nella biblioteca": "In der Bibliothek suchen", + "Cerca per ISBN-10": "Nach ISBN-10 suchen", + "Cerca per ISBN-13": "Nach ISBN-13 suchen", + "Cerca per codice EAN": "Nach EAN-Code suchen", + "Cerca per nome autore (corrispondenza parziale)": "Nach Autorenname suchen (Teilübereinstimmung)", + "Cerca per nome, cognome, telefono, email o tessera": "Nach Name, Nachname, Telefon, E-Mail oder Ausweis suchen", + "Cerca per nome...": "Nach Name suchen...", + "Cerca per pseudonimo...": "Nach Pseudonym suchen...", + "Cerca per titolo o sottotitolo": "Nach Titel oder Untertitel suchen", + "Cerca per titolo o stato (es. disponibile)": "Nach Titel oder Status suchen (z. B. verfügbar)", + "Cerca per titolo, ISBN o EAN": "Nach Titel, ISBN oder EAN suchen", + "Cerca posizione...": "Standort suchen...", + "Cerca pseudonimo...": "Pseudonym suchen...", + "Cerca rapido...": "Schnellsuche...", + "Cerca testo": "Text suchen", + "Cerca titoli": "Titel suchen", + "Cerca titoli, autori, ISBN...": "Titel, Autoren, ISBN suchen...", + "Cerca...": "Suchen...", + "Cerca:": "Suchen:", + "Certificato SSL/TLS valido": "Gültiges SSL/TLS-Zertifikat", + "Chi Siamo": "Über uns", + "Chiave": "Schlüssel", + "Chiave API Google Books": "Google Books API-Schlüssel", + "Chiave Google Books aggiornata.": "Google Books-Schlüssel aktualisiert.", + "Chiave Google Books rimossa.": "Google Books-Schlüssel entfernt.", + "Chiave Google Books salvata correttamente.": "Google Books-Schlüssel erfolgreich gespeichert.", + "Chiave Route": "Routen-Schlüssel", + "Chiedi al tuo amministratore di database di eseguire i comandi contenuti nel file": "Bitten Sie Ihren Datenbankadministrator, die in der Datei enthaltenen Befehle auszuführen", + "Chiudi": "Schließen", + "Chiudi Player": "Player schließen", + "Chiudi alternative": "Alternativen schließen", + "Chiudi menu": "Menü schließen", + "Citazione": "Zitat", + "Città": "Stadt", + "Classe (000-900)": "Klasse (000–900)", + "Classe principale mancante: %s.": "Fehlende Hauptklasse: %s.", + "Classi principali": "Hauptklassen", + "Classificazione Dewey": "Dewey-Klassifikation", + "Classificazione selezionata:": "Ausgewählte Klassifikation:", + "Clicca o trascina per caricare un logo": "Klicken oder ziehen Sie, um ein Logo hochzuladen", + "Clicca per selezionare": "Zum Auswählen klicken", + "Clicca su \"Esegui Manutenzione\" per correggere automaticamente i problemi riparabili.": "Klicken Sie auf \"Wartung ausführen\", um behebbare Probleme automatisch zu korrigieren.", + "Clicca su 'Aggiungi Lingua'": "Klicken Sie auf 'Sprache hinzufügen'", + "Clicca su \\": "Klicken Sie auf \\", + "Clicca su \\\"Esegui Manutenzione\\\" per correggere automaticamente i problemi riparabili.": "Klicken Sie auf \\\"Wartung ausführen\\\", um behebbare Probleme automatisch zu korrigieren.", + "Clicca su un'icona per selezionarla": "Klicken Sie auf ein Symbol, um es auszuwählen", + "Close menu": "Menü schließen", + "Coda": "Warteschlange", + "Codice": "Code", + "Codice *": "Code *", + "Codice CSS": "CSS-Code", + "Codice CSS da applicare a tutte le pagine del frontend": "CSS-Code, der auf alle Frontend-Seiten angewendet wird", + "Codice Dewey": "Dewey-Code", + "Codice Dewey non trovato": "Dewey-Code nicht gefunden", + "Codice Dewey selezionato:": "Ausgewählter Dewey-Code:", + "Codice Dewey trovato e impostato": "Dewey-Code gefunden und gesetzt", + "Codice Fiscale": "Steuernummer", + "Codice ISBN o EAN": "ISBN- oder EAN-Code", + "Codice ISO 2 lettere (es: IT, FR, GB)": "ISO-2-Buchstaben-Code (z. B. IT, FR, GB)", + "Codice JavaScript": "JavaScript-Code", + "Codice JavaScript Analytics": "Analytics-JavaScript-Code", + "Codice Lingua": "Sprachcode", + "Codice Tessera": "Ausweisnummer", + "Codice Tessera:": "Ausweisnummer:", + "Codice embed completo": "Vollständiger Einbettungscode", + "Codice fiscale": "Steuernummer", + "Codice fiscale dell'editore (opzionale)": "Steuernummer des Verlags (optional)", + "Codice fiscale italiano (opzionale)": "Italienische Steuernummer (optional)", + "Codice parent non trovato.": "Übergeordneter Code nicht gefunden.", + "Codice postale...": "Postleitzahl...", + "Codice scaffale obbligatorio": "Regalcode erforderlich", + "Codice tessera": "Ausweisnummer", + "Cognome": "Nachname", + "Collana": "Reihe", + "Collocazione": "Standort", + "Collocazione calcolata": "Berechneter Standort", + "Collocazione suggerita": "Vorgeschlagener Standort", + "Collocazione:": "Standort:", + "Colonne": "Spalten", + "Colore Bottoni CTA": "CTA-Schaltflächenfarbe", + "Colore Primario": "Primärfarbe", + "Colore Secondario": "Sekundärfarbe", + "Colore Testo Bottoni": "Schaltflächen-Textfarbe", + "Colore non valido": "Ungültige Farbe", + "Colori Tema": "Theme-Farben", + "Colori ripristinati ai valori predefiniti": "Farben auf Standardwerte zurückgesetzt", + "Come Esportare da LibraryThing": "So exportieren Sie aus LibraryThing", + "Come Funziona": "So funktioniert es", + "Come ottenere il codice": "So erhalten Sie den Code", + "Commento": "Kommentar", + "Communication error with the server": "Kommunikationsfehler mit dem Server", + "Compila con i dati dei tuoi libri": "Füllen Sie die Daten Ihrer Bücher aus", + "Compila i dettagli del libro per aggiungerlo alla biblioteca": "Füllen Sie die Buchdetails aus, um es zur Bibliothek hinzuzufügen", + "Compila i dettagli dell'autore per aggiungerlo alla biblioteca": "Füllen Sie die Autorendetails aus, um ihn zur Bibliothek hinzuzufügen", + "Compila i dettagli della casa editrice per aggiungerla alla biblioteca": "Füllen Sie die Verlagsdetails aus, um ihn zur Bibliothek hinzuzufügen", + "Compila nome e URL per tutti i server.": "Füllen Sie Name und URL für alle Server aus.", + "Compila tutti i campi obbligatori prima di salvare.": "Füllen Sie alle Pflichtfelder aus, bevor Sie speichern.", + "Compila tutti i campi obbligatori.": "Füllen Sie alle Pflichtfelder aus.", + "Compila tutti i campi per creare una nuova prenotazione": "Füllen Sie alle Felder aus, um eine neue Vormerkung zu erstellen", + "Compila tutti i campi richiesti": "Füllen Sie alle erforderlichen Felder aus", + "Completamento": "Fertigstellung", + "Completata": "Abgeschlossen", + "Completati": "Abgeschlossen", + "Completato": "Abgeschlossen", + "Completato!": "Abgeschlossen!", + "Complete": "Vollständig", + "Completo": "Vollständig", + "Complimenti!": "Herzlichen Glückwunsch!", + "Componente": "Komponente", + "Con valore 3, un prestito che scade il 15 Gennaio riceverà l'avviso il 12 Gennaio": "Bei Wert 3 erhält eine Ausleihe, die am 15. Januar abläuft, die Benachrichtigung am 12. Januar", + "Condividi": "Teilen", + "Condividi la tua opinione su questo libro...": "Teilen Sie Ihre Meinung zu diesem Buch...", + "Condividi su Facebook": "Auf Facebook teilen", + "Condividi su Twitter": "Auf Twitter teilen", + "Condividi su WhatsApp": "Auf WhatsApp teilen", + "Condiviso": "Geteilt", + "Condizioni": "Bedingungen", + "Conferma": "Bestätigen", + "Conferma Aggiornamento": "Aktualisierung bestätigen", + "Conferma Annullamento": "Stornierung bestätigen", + "Conferma Disinstallazione": "Deinstallation bestätigen", + "Conferma Password": "Passwort bestätigen", + "Conferma Ritiro": "Abholung bestätigen", + "Conferma Salvataggio": "Speichern bestätigen", + "Conferma aggiornamento": "Aktualisierung bestätigen", + "Conferma eliminazione": "Löschung bestätigen", + "Conferma la tua email": "Bestätigen Sie Ihre E-Mail", + "Conferma modifica": "Änderung bestätigen", + "Conferma password": "Passwort bestätigen", + "Conferma restituzione": "Rückgabe bestätigen", + "Confermare il ritiro?": "Abholung bestätigen?", + "Confermi di voler attivare direttamente questo utente senza richiedere verifica email?": "Möchten Sie diesen Benutzer wirklich direkt aktivieren, ohne eine E-Mail-Verifizierung zu verlangen?", + "Confermi di voler attivare direttamente questo utente?": "Sind Sie sicher, dass Sie diesen Benutzer direkt aktivieren möchten?", + "Confermi l'eliminazione dell'editore?": "Verlag wirklich löschen?", + "Confermi l'operazione?": "Vorgang bestätigen?", + "Confermi?": "Bestätigen?", + "Confermo di voler disinstallare il plugin e di aver effettuato un backup dei dati": "Ich bestätige, dass ich das Plugin deinstallieren möchte und eine Datensicherung durchgeführt habe", + "Configura API": "API konfigurieren", + "Configura Google Books": "Google Books konfigurieren", + "Configura Z39.50": "Z39.50 konfigurieren", + "Configura i testi mostrati all'interno del pannello delle preferenze dei cookie.": "Konfigurieren Sie die Texte, die im Cookie-Einstellungen-Panel angezeigt werden.", + "Configura i testi visualizzati agli utenti in ogni parte del cookie banner.": "Konfigurieren Sie die Texte, die den Benutzern in jedem Teil des Cookie-Banners angezeigt werden.", + "Configura i testi visualizzati agli utenti nel banner iniziale.": "Konfigurieren Sie die Texte, die den Benutzern im anfänglichen Banner angezeigt werden.", + "Configura l'identità dell'applicazione, i metodi di invio email e personalizza i template delle notifiche automatiche.": "Konfigurieren Sie die Anwendungsidentität, E-Mail-Versandmethoden und passen Sie die Vorlagen für automatische Benachrichtigungen an.", + "Configura le date della prenotazione": "Vormerkungsdaten konfigurieren", + "Configura le impostazioni di sicurezza per le connessioni HTTPS": "Sicherheitseinstellungen für HTTPS-Verbindungen konfigurieren", + "Configura le impostazioni email per l'invio di notifiche agli utenti.": "Konfigurieren Sie die E-Mail-Einstellungen für den Versand von Benachrichtigungen an Benutzer.", + "Configura le impostazioni rimanenti (privacy, contatti, etc.)": "Konfigurieren Sie die verbleibenden Einstellungen (Datenschutz, Kontakte usw.)", + "Configura quando inviare l'avviso di scadenza prestiti agli utenti": "Konfigurieren Sie, wann die Fälligkeitserinnerung für Ausleihen an die Benutzer gesendet werden soll", + "Configurazione": "Konfiguration", + "Configurazione Cron Job": "Cron-Job-Konfiguration", + "Configurazione Database": "Datenbank-Konfiguration", + "Configurazione Email": "E-Mail-Konfiguration", + "Configurazione Etichette Libri": "Buchetiketten-Konfiguration", + "Configurazione SMTP": "SMTP-Konfiguration", + "Configurazione aggiornata con successo!": "Konfiguration erfolgreich aktualisiert!", + "Configurazione del banner cookie": "Cookie-Banner-Konfiguration", + "Configurazione guidata in pochi passaggi.": "Geführte Konfiguration in wenigen Schritten.", + "Configurazione invio": "Versandkonfiguration", + "Configurazione sistema": "Systemkonfiguration", + "Confirm?": "Bestätigen?", + "Connessione al database fallita": "Datenbankverbindung fehlgeschlagen", + "Connessione database non disponibile": "Datenbankverbindung nicht verfügbar", + "Connessione fallita": "Verbindung fehlgeschlagen", + "Connesso": "Verbunden", + "Consegna immediata": "Sofortige Übergabe", + "Conserva queste informazioni in un luogo sicuro!": "Bewahren Sie diese Informationen an einem sicheren Ort auf!", + "Consigliato": "Empfohlen", + "Consigliato JPG o PNG ad alta risoluzione (min 1920x1080px). Max 5MB.": "Empfohlen: hochauflösendes JPG oder PNG (min. 1920x1080px). Max. 5MB.", + "Consigliato JPG, PNG o WebP (min 800x600px). Max 5MB.": "Empfohlen: JPG, PNG oder WebP (min. 800x600px). Max. 5MB.", + "Consigliato PNG o SVG con sfondo trasparente. Dimensione massima 2MB.": "Empfohlen: PNG oder SVG mit transparentem Hintergrund. Maximale Größe 2MB.", + "Consigliato: 150-160 caratteri": "Empfohlen: 150-160 Zeichen", + "Consigliato: 50-60 caratteri": "Empfohlen: 50-60 Zeichen", + "Consigliato: PHP mail() per semplicità, SMTP per maggiore controllo": "Empfohlen: PHP mail() für Einfachheit, SMTP für mehr Kontrolle", + "Consigliato: Summary Large Image per homepage.": "Empfohlen: Summary Large Image für die Startseite.", + "Contatta il tuo provider di hosting e chiedi di eseguire": "Kontaktieren Sie Ihren Hosting-Anbieter und bitten Sie ihn, Folgendes auszuführen", + "Contattaci": "Kontaktieren Sie uns", + "Contatti": "Kontakt", + "Contatti e accesso": "Kontakt und Zugang", + "Contenuti Digitali": "Digitale Inhalte", + "Contenuti homepage aggiornati con successo!": "Homepage-Inhalte erfolgreich aktualisiert!", + "Contenuto": "Inhalt", + "Contenuto Cookie Policy": "Cookie-Richtlinie Inhalt", + "Contenuto Pagina": "Seiteninhalt", + "Contenuto Privacy Policy": "Datenschutzrichtlinie Inhalt", + "Contenuto Testuale": "Textinhalt", + "Contenuto della pagina": "Seiteninhalt", + "Contenuto della pagina /cookies accessibile dal banner": "Inhalt der Seite /cookies, erreichbar über das Banner", + "Contenuto pagina": "Seiteninhalt", + "Contenuto testuale HTML con editor avanzato": "HTML-Textinhalt mit erweitertem Editor", + "Continua": "Weiter", + "Contrasto": "Kontrast", + "Contrasto insufficiente tra bottone e testo (minimo 3:1). Attuale": "Unzureichender Kontrast zwischen Schaltfläche und Text (Minimum 3:1). Aktuell", + "Controlla Aggiornamenti": "Auf Updates prüfen", + "Controlla la tua casella di posta e clicca sul link per resettare la password. Il link sarà valido per 2 ore.": "Überprüfen Sie Ihren Posteingang und klicken Sie auf den Link, um Ihr Passwort zurückzusetzen. Der Link ist 2 Stunden gültig.", + "Controllo aggiornamenti": "Suche nach Updates", + "Controllo pre-aggiornamento fallito": "Vorab-Aktualisierungsprüfung fehlgeschlagen", + "Cookie Analitici": "Analyse-Cookies", + "Cookie Banner": "Cookie-Banner", + "Cookie Essenziali": "Essentielle Cookies", + "Cookie di Marketing": "Marketing-Cookies", + "Cookies": "Cookies", + "Copertina": "Cover", + "Copertina Attuale": "Aktuelles Cover", + "Copertina applicata": "Cover übernommen", + "Copertina attuale": "Aktuelles Cover", + "Copertina del Libro": "Buchcover", + "Copertina del libro": "Buchcover", + "Copertina del libro \"%s\"": "Buchcover von \"%s\"", + "Copertina non trovata online:": "Cover online nicht gefunden:", + "Copertina recuperata automaticamente": "Cover automatisch abgerufen", + "Copertina:": "Cover:", + "Copertine già presenti: %s": "Bereits vorhandene Cover: %s", + "Copertine scaricate (LibraryThing):": "Heruntergeladene Cover (LibraryThing):", + "Copertine scaricate:": "Cover abgerufen:", + "Copertine sincronizzate: %s": "Synchronisierte Cover: %s", + "Copia": "Kopieren", + "Copia %d di %d": "Exemplar %d von %d", + "Copia Link": "Link kopieren", + "Copia eliminata con successo.": "Exemplar erfolgreich gelöscht.", + "Copia link negli appunti": "Link in die Zwischenablage kopieren", + "Copia non trovata.": "Exemplar nicht gefunden.", + "Copiato!": "Kopiert!", + "Copie": "Exemplare", + "Copie Aggiunte!": "Exemplare hinzugefügt!", + "Copie Disponibili": "Verfügbare Exemplare", + "Copie Eccessive": "Überschüssige Exemplare", + "Copie Fisiche": "Physische Exemplare", + "Copie Negative": "Negative Exemplare", + "Copie Totali": "Exemplare gesamt", + "Copie disponibili": "Verfügbare Exemplare", + "Copie disponibili:": "Verfügbare Exemplare:", + "Copie totali": "Exemplare gesamt", + "Copie totali:": "Exemplare gesamt:", + "Copyright": "Copyright", + "Corpo Email": "E-Mail-Text", + "Corpo email": "E-Mail-Text", + "Correggi Permessi Automaticamente": "Berechtigungen automatisch korrigieren", + "Correggi Problemi": "Probleme beheben", + "Correggi nel file .env: APP_CANONICAL_URL=%s": "In der .env-Datei korrigieren: APP_CANONICAL_URL=%s", + "Corrente": "Aktuell", + "Correzione Automatica Permessi": "Automatische Berechtigungskorrektur", + "Correzione Manuale via SSH (se automatica fallisce)": "Manuelle Korrektur per SSH (falls automatisch fehlschlägt)", + "Correzione parziale:": "Teilweise Korrektur:", + "Correzioni applicate: %d record aggiornati": "Korrekturen angewendet: %d Datensätze aktualisiert", + "Cos'è la Collocazione?": "Was ist die Standortbezeichnung?", + "Cosa fare:": "Was zu tun ist:", + "Cosa ne pensi di questo libro?": "Was denken Sie über dieses Buch?", + "Cosa sono le Route?": "Was sind Routen?", + "Cosa viene nascosto:": "Was ausgeblendet wird:", + "Cover": "Cover", + "Crea": "Erstellen", + "Crea API Key": "API-Key erstellen", + "Crea Admin": "Admin erstellen", + "Crea Backup": "Sicherung erstellen", + "Crea Backup Manuale": "Manuelles Backup erstellen", + "Crea Evento": "Veranstaltung erstellen", + "Crea Indici Automaticamente": "Indizes automatisch erstellen", + "Crea Nuova API Key": "Neuen API-Key erstellen", + "Crea Nuova Prenotazione": "Neue Vormerkung erstellen", + "Crea Nuovo Evento": "Neue Veranstaltung erstellen", + "Crea Nuovo Genere": "Neues Genre erstellen", + "Crea Nuovo Prestito": "Neue Ausleihe erstellen", + "Crea Prenotazione": "Vormerkung erstellen", + "Crea Prestito": "Ausleihe erstellen", + "Crea Prima API Key": "Ersten API-Key erstellen", + "Crea Primo Genere": "Erstes Genre erstellen", + "Crea Tabelle Mancanti": "Fehlende Tabellen erstellen", + "Crea Utente Admin": "Admin-Benutzer erstellen", + "Crea Utente Amministratore": "Administratorbenutzer erstellen", + "Crea e gestisci gli eventi della biblioteca": "Erstellen und verwalten Sie Bibliotheksveranstaltungen", + "Crea gli scaffali (es: A, B, C)": "Erstellen Sie Regale (z.B.: A, B, C)", + "Crea il primo utente amministratore. Questo account avrà accesso completo a tutte le funzionalità del sistema.": "Erstellen Sie den ersten Administratorbenutzer. Dieses Konto hat vollen Zugriff auf alle Systemfunktionen.", + "Crea il tuo primo evento": "Erstellen Sie Ihre erste Veranstaltung", + "Crea la cartella logs se non esiste: mkdir -p logs": "Erstellen Sie den Ordner logs, falls er nicht existiert: mkdir -p logs", + "Crea nuovo": "Neu erstellen", + "Crea nuovo \"${item.label}\"": "Neu erstellen \"${item.label}\"", + "Crea un backup manuale o attendi il prossimo aggiornamento.": "Erstellen Sie ein manuelles Backup oder warten Sie auf die nächste Aktualisierung.", + "Crea un nuovo account": "Neues Konto erstellen", + "Crea un nuovo profilo amministratore o lettore.": "Erstellen Sie ein neues Administrator- oder Leserprofil.", + "Creare backup?": "Backup erstellen?", + "Creata": "Erstellt", + "Creata il": "Erstellt am", + "Creata:": "Erstellt:", + "Creato il": "Erstellt am", + "Creazione backup database": "Datenbank-Backup wird erstellt", + "Creazione backup...": "Backup wird erstellt...", + "Creazione indici di ottimizzazione...": "Optimierungsindizes werden erstellt...", + "Creazione indici...": "Indizes werden erstellt...", + "Creazione tabelle...": "Tabellen werden erstellt...", + "Credenziali": "Zugangsdaten", + "Credenziali Admin:": "Admin-Zugangsdaten:", + "Credenziali Errate": "Ungültige Zugangsdaten", + "Credenziali non valide o utente non admin": "Ungültige Zugangsdaten oder Benutzer ist kein Administrator", + "Crediti": "Danksagungen", + "Crescente": "Aufsteigend", + "Crittografia": "Verschlüsselung", + "Cronologia": "Verlauf", + "Cronologia Aggiornamenti": "Update-Verlauf", + "Cronologia Import": "Importverlauf", + "Cronologia degli aggiornamenti eseguiti": "Verlauf der durchgeführten Aktualisierungen", + "Da": "Von", + "Da %s (%s)": "Von %s (%s)", + "Da Inventariare": "Zu inventarisieren", + "Da Ritirare": "Zur Abholung bereit", + "Da approvare": "Zu genehmigen", + "Da approvare o rifiutare": "Zu genehmigen oder abzulehnen", + "Da consegnare": "Auszuliefern", + "Da creare": "Zu erstellen", + "Da prenotazione": "Aus Vormerkung", + "Da prenotazioni": "Aus Vormerkungen", + "Da qui puoi gestire tutte le lingue disponibili nell'applicazione. Carica file JSON di traduzione e abilita/disabilita lingue.": "Von hier aus können Sie alle verfügbaren Sprachen in der Anwendung verwalten. Laden Sie JSON-Übersetzungsdateien hoch und aktivieren/deaktivieren Sie Sprachen.", + "Da ritirare": "Zur Abholung bereit", + "Dal": "Vom", + "Dal %s al %s": "Vom %s bis %s", + "Dal:": "Vom:", + "Danneggiato": "Beschädigt", + "Dansk (DA)": "Dänisch (DA)", + "Dashboard": "Dashboard", + "Data": "Datum", + "Data Acq.": "Erw.-Datum", + "Data Acquisizione": "Erwerbungsdatum", + "Data Evento": "Veranstaltungsdatum", + "Data Fine": "Enddatum", + "Data Inizio": "Startdatum", + "Data Prenotazione": "Vormerkungsdatum", + "Data Prestito": "Ausleihdatum", + "Data Prestito:": "Ausleihdatum:", + "Data Pubblicazione": "Erscheinungsdatum", + "Data Restituzione": "Rückgabedatum", + "Data Restituzione:": "Rückgabedatum:", + "Data Scadenza": "Fälligkeitsdatum", + "Data Scadenza:": "Fälligkeitsdatum:", + "Data acquisizione": "Erwerbungsdatum", + "Data acquisizione a": "Erwerbungsdatum bis", + "Data acquisizione da": "Erwerbungsdatum von", + "Data creazione": "Erstellt am", + "Data di Pubblicazione": "Erscheinungsdatum", + "Data di inizio della prenotazione (default: oggi)": "Startdatum der Vormerkung (Standard: heute)", + "Data di morte": "Sterbedatum", + "Data di nascita": "Geburtsdatum", + "Data di pubblicazione": "Erscheinungsdatum", + "Data di scadenza della prenotazione (default: +30 giorni)": "Ablaufdatum der Vormerkung (Standard: +30 Tage)", + "Data fine": "Enddatum", + "Data inizio": "Startdatum", + "Data inizio richiesta mancante": "Angefordertes Startdatum fehlt", + "Data morte a": "Sterbedatum bis", + "Data morte da": "Sterbedatum von", + "Data nascita a": "Geburtsdatum bis", + "Data nascita da": "Geburtsdatum von", + "Data non valida.": "Ungültiges Datum.", + "Data originale di pubblicazione (formato italiano)": "Ursprüngliches Erscheinungsdatum (italienisches Format)", + "Data prestito": "Ausleihdatum", + "Data prestito (A)": "Ausleihdatum (Bis)", + "Data prestito (Da)": "Ausleihdatum (Von)", + "Data pubblicazione da": "Erscheinungsdatum von", + "Data scadenza prevista": "Voraussichtliches Fälligkeitsdatum", + "Data/Ora": "Datum/Uhrzeit", + "Data:": "Datum:", + "DataIntegrity warning (store loan)": "DataIntegrity-Warnung (Ausleihe speichern)", + "Database": "Datenbank", + "Database '%s' non esiste. Crealo prima di procedere.": "Datenbank '%s' existiert nicht. Bitte erstellen Sie sie, bevor Sie fortfahren.", + "Database installato (30 tabelle)": "Datenbank installiert (30 Tabellen)", + "Database installato (41 tabelle)": "Datenbank installiert (41 Tabellen)", + "Database installato (46 tabelle)": "Datenbank installiert (46 Tabellen)", + "Database:": "Datenbank:", + "Date": "Termine", + "Date Non Valide": "Ungültige Daten", + "Dati Account": "Kontodaten", + "Dati Utente": "Benutzerdetails", + "Dati alternativi disponibili": "Alternative Daten verfügbar", + "Dati bibliografici completi (titolo, sottotitolo, ISBN, EAN, ecc.)": "Vollständige bibliografische Daten (Titel, Untertitel, ISBN, EAN usw.)", + "Dati della Prenotazione": "Vormerkungsdetails", + "Dati di classificazione mancanti": "Klassifikationsdaten fehlen", + "Dati essenziali caricati": "Wesentliche Daten geladen", + "Dati generi mancanti": "Genre-Daten fehlen", + "Dati iniziali importati OK": "Anfangsdaten erfolgreich importiert", + "Dati libro recuperati con successo da Open Library": "Buchdaten erfolgreich von Open Library abgerufen", + "Dati mancanti": "Fehlende Daten", + "Dati personali": "Persönliche Daten", + "Dati validi.": "Gültige Daten.", + "Debug": "Debug", + "Debug Log:": "Debug-Log:", + "Deceduto il %s": "Verstorben am %s", + "Decimali": "Dezimalstellen", + "Decrescente": "Absteigend", + "Default: un mese dopo la data inizio": "Standard: ein Monat nach dem Startdatum", + "Definisce i privilegi dell'utente.": "Definiert die Berechtigungen des Benutzers.", + "Demo": "Demo", + "Descrivi l'utilizzo di questa API key...": "Beschreiben Sie die Verwendung dieses API-Keys...", + "Descrizione": "Beschreibung", + "Descrizione Banner": "Banner-Beschreibung", + "Descrizione Evento": "Veranstaltungsbeschreibung", + "Descrizione Modale": "Modal-Beschreibung", + "Descrizione OG": "OG-Beschreibung", + "Descrizione Open Graph": "Open-Graph-Beschreibung", + "Descrizione SEO": "SEO-Beschreibung", + "Descrizione Twitter": "Twitter-Beschreibung", + "Descrizione banner": "Banner-Beschreibung", + "Descrizione breve": "Kurzbeschreibung", + "Descrizione completa dell'evento con possibilità di formattazione HTML": "Vollständige Veranstaltungsbeschreibung mit HTML-Formatierungsmöglichkeiten", + "Descrizione cookie analitici": "Beschreibung der Analyse-Cookies", + "Descrizione cookie essenziali": "Beschreibung der essentiellen Cookies", + "Descrizione cookie marketing": "Beschreibung der Marketing-Cookies", + "Descrizione del libro...": "Buchbeschreibung...", + "Descrizione footer": "Footer-Beschreibung", + "Descrizione modale": "Modal-Beschreibung", + "Descrizione nella modale preferenze. Puoi usare HTML.": "Beschreibung im Einstellungen-Modal. Sie können HTML verwenden.", + "Descrizione per Twitter/X. Se vuoto, usa la descrizione Open Graph.": "Beschreibung für Twitter/X. Wenn leer, wird die Open Graph-Beschreibung verwendet.", + "Descrizione per anteprima social. Se vuoto, usa la descrizione SEO.": "Beschreibung für die Social-Media-Vorschau. Wenn leer, wird die SEO-Beschreibung verwendet.", + "Descrizione troppo lunga (max 2000 caratteri)": "Beschreibung zu lang (max. 2000 Zeichen)", + "Descrizione:": "Beschreibung:", + "Deseleziona tutti": "Alle abwählen", + "Dettagli": "Details", + "Dettagli Acquisizione": "Erwerbungsdetails", + "Dettagli Fisici": "Physische Details", + "Dettagli Libro": "Buchdetails", + "Dettagli Messaggio": "Nachrichtendetails", + "Dettagli del Prestito": "Ausleihdetails", + "Dettagli evento": "Veranstaltungsdetails", + "Dettagli principali dell'evento": "Wichtigste Veranstaltungsdetails", + "Dettagli restituzione": "Rückgabedetails", + "Deutsch (DE)": "Deutsch (DE)", + "Deve contenere maiuscole, minuscole e numeri": "Muss Groß-, Kleinbuchstaben und Zahlen enthalten", + "Deve iniziare con": "Muss beginnen mit", + "Devi accettare la Privacy Policy per procedere": "Sie müssen die Datenschutzrichtlinie akzeptieren, um fortzufahren", + "Devi elencare manualmente i cookie tracciati da questi script nella": "Sie müssen die von diesen Skripten erfassten Cookies manuell auflisten in der", + "Devi eseguire": "Sie müssen ausführen", + "Dewey": "Dewey", + "Dimensione": "Größe", + "Dimensioni": "Abmessungen", + "Dipendenze": "Abhängigkeiten", + "Directory Upload Pubblici": "Verzeichnis für öffentliche Uploads", + "Directory non scrivibile: %s": "Verzeichnis nicht beschreibbar: %s", + "Directory plugin già esistente.": "Plugin-Verzeichnis existiert bereits.", + "Directory sorgente non trovata": "Quellverzeichnis nicht gefunden", + "Disabilita": "Deaktivieren", + "Disabilita prestiti, prenotazioni e wishlist. Gli utenti potranno solo consultare il catalogo.": "Deaktiviert Ausleihen, Vormerkungen und Wunschliste. Die Benutzer können nur den Katalog durchsuchen.", + "Disabilita se il tuo sito non usa cookie analitici (es. Google Analytics)": "Deaktivieren, wenn Ihre Website keine Analyse-Cookies verwendet (z.B. Google Analytics)", + "Disabilita se il tuo sito non usa cookie di marketing/advertising": "Deaktivieren, wenn Ihre Website keine Marketing-/Werbe-Cookies verwendet", + "Disabilita tutte le funzionalità di prestito e prenotazione": "Alle Ausleih- und Vormerkungsfunktionen deaktivieren", + "Disabilitata": "Deaktiviert", + "Disabilitata - Nascosta nel frontend": "Deaktiviert – Im Frontend ausgeblendet", + "Disabilitato": "Deaktiviert", + "Disattiva": "Deaktivieren", + "Disattiva modalità manutenzione": "Wartungsmodus deaktivieren", + "Disattivata": "Inaktiv", + "Discografia": "Diskografie", + "Disconnesso": "Getrennt", + "Disconnetti": "Abmelden", + "Disconnetti tutti": "Alle abmelden", + "Disinstalla": "Deinstallieren", + "Disinstalla Plugin": "Plugin deinstallieren", + "Disponibile": "Verfügbar", + "Disponibile dal:": "Verfügbar ab:", + "Disponibile nella data selezionata": "Am gewählten Datum verfügbar", + "Disponibile ora": "Jetzt verfügbar", + "Disponibile per il prestito.": "Zur Ausleihe verfügbar.", + "Disponibile solo con driver SMTP": "Nur mit SMTP-Treiber verfügbar", + "Disponibili": "Verfügbar", + "Disponibili e in prestito": "Verfügbar und ausgeliehen", + "Disponibilità": "Verfügbarkeit", + "Disponibilità copie": "Exemplarverfügbarkeit", + "Dispositivo sconosciuto": "Unbekanntes Gerät", + "Divisione (010-990)": "Abteilung (010-990)", + "Divisioni": "Abteilungen", + "Do you want to automatically fix the detected integrity issues?": "Möchten Sie die erkannten Integritätsprobleme automatisch beheben?", + "Do you want to run full system maintenance? This may take a few minutes.": "Möchten Sie die vollständige Systemwartung ausführen? Dies kann einige Minuten dauern.", + "Documentazione": "Dokumentation", + "Documentazione API": "API-Dokumentation", + "Documento": "Dokument", + "Documento generato il %s alle %s": "Dokument erstellt am %s um %s", + "Donazione": "Spende", + "Dopo la conferma, un amministratore approverà la tua iscrizione.": "Nach der Bestätigung wird ein Administrator Ihre Registrierung genehmigen.", + "Dopo la rigenerazione, invia l'URL della sitemap a Google Search Console e Bing Webmaster Tools": "Senden Sie nach der Neugenerierung die Sitemap-URL an Google Search Console und Bing Webmaster Tools", + "Download aggiornamento": "Update wird heruntergeladen", + "Download completato": "Download abgeschlossen", + "Download copertina fallito": "Cover-Download fehlgeschlagen", + "Download fallito": "Download fehlgeschlagen", + "Driver": "Treiber", + "Driver Email": "E-Mail-Treiber", + "Durata": "Dauer", + "EAN": "EAN", + "EAN:": "EAN:", + "ERRORE:": "FEHLER:", + "Eccellente": "Ausgezeichnet", + "Eccezione creazione %s su %s:": "Ausnahme beim Erstellen von %s auf %s:", + "Eccezione creazione tabella %s:": "Ausnahme beim Erstellen der Tabelle %s:", + "Editor Classificazione Dewey": "Dewey-Klassifikationseditor", + "Editore": "Verlag", + "Editore \"${item.label}\" selezionato": "Verlag \"${item.label}\" ausgewählt", + "Editore \"${value}\" pronto per essere creato": "Verlag \"${value}\" bereit zur Erstellung", + "Editore \"%s\" pronto per essere creato": "Verlag \"%s\" bereit zur Erstellung", + "Editore \"%s\" selezionato": "Verlag \"%s\" ausgewählt", + "Editore %s": "Verlag %s", + "Editore applicato": "Verlag übernommen", + "Editore eliminato con successo.": "Verlag erfolgreich gelöscht.", + "Editore principale": "Hauptverlag", + "Editore sconosciuto": "Unbekannter Verlag", + "Editore selezionato:": "Ausgewählter Verlag:", + "Editore trovato:": "Verlag gefunden:", + "Editore:": "Verlag:", + "Editore: %s": "Verlag: %s", + "Editori": "Verlage", + "Editori uniti": "Verlage zusammengeführt", + "Editori uniti con successo": "Verlage erfolgreich zusammengeführt", + "Edizione": "Ausgabe", + "Elaborato da": "Bearbeitet von", + "Elaborazione lista attesa fallita": "Wartelistenverarbeitung fehlgeschlagen", + "Elaborazione...": "Verarbeitung...", + "Elementi": "Elemente", + "Elenco Autori": "Autorenliste", + "Elenco Autori - Biblioteca": "Autorenliste – Bibliothek", + "Elenco Editori": "Verlagsliste", + "Elenco Editori - Biblioteca": "Verlagsliste – Bibliothek", + "Elenco Libri": "Bücherliste", + "Elenco Libri - Biblioteca": "Bücherliste – Bibliothek", + "Elenco Prestiti": "Ausleihliste", + "Elenco Utenti": "Benutzerliste", + "Elenco Utenti - Biblioteca": "Benutzerliste – Bibliothek", + "Elimina": "Löschen", + "Elimina Installer": "Installer löschen", + "Elimina Installer (Richiede Composer)": "Installer löschen (erfordert Composer)", + "Elimina Lingua": "Sprache löschen", + "Elimina copia": "Exemplar löschen", + "Elimina il file .installed dalla root del progetto e riprova": "Löschen Sie die Datei .installed aus dem Projektstammverzeichnis und versuchen Sie es erneut", + "Elimina questa lingua. Questa azione non può essere annullata.": "Diese Sprache löschen. Diese Aktion kann nicht rückgängig gemacht werden.", + "Elimina recensione": "Rezension löschen", + "Eliminare i libri selezionati?": "Ausgewählte Bücher löschen?", + "Eliminare il file .installed dalla root del progetto e rieseguire l'installer": "Löschen Sie die Datei .installed aus dem Projektstammverzeichnis und führen Sie den Installer erneut aus", + "Eliminare il libro?": "Buch löschen?", + "Eliminare l'utente?": "Benutzer löschen?", + "Eliminare questa mensola? (Solo se vuota)": "Dieses Regalbrett löschen? (Nur wenn leer)", + "Eliminare questo backup?": "Dieses Backup löschen?", + "Eliminare questo scaffale? (Solo se vuoto)": "Dieses Regal löschen? (Nur wenn leer)", + "Eliminati": "Gelöscht", + "Eliminato!": "Gelöscht!", + "Eliminazione in corso...": "Wird gelöscht...", + "Email": "E-Mail", + "Email *": "E-Mail *", + "Email Admin": "Admin-E-Mail", + "Email Contatto": "Kontakt-E-Mail", + "Email Non Valida": "Ungültige E-Mail", + "Email Non Verificata": "Nicht verifizierte E-Mail", + "Email Referente": "E-Mail der Kontaktperson", + "Email associata al tuo account": "Mit Ihrem Konto verknüpfte E-Mail", + "Email configurata": "E-Mail konfiguriert", + "Email di contatto": "Kontakt-E-Mail", + "Email di recupero inviata con successo!": "Wiederherstellungs-E-Mail erfolgreich gesendet!", + "Email dove ricevere i messaggi dal form contatti": "E-Mail-Adresse für den Empfang von Nachrichten aus dem Kontaktformular", + "Email e telefono visibili sulla pagina contatti": "E-Mail und Telefon sichtbar auf der Kontaktseite", + "Email già registrata": "E-Mail bereits registriert", + "Email non trovata nel nostro sistema": "E-Mail in unserem System nicht gefunden", + "Email non valida. Verifica il formato": "Ungültige E-Mail. Überprüfen Sie das Format", + "Email non verificata. Controlla la tua casella di posta e clicca sul link di verifica": "E-Mail nicht verifiziert. Überprüfen Sie Ihren Posteingang und klicken Sie auf den Bestätigungslink", + "Email o password non corretti. Verifica le credenziali e riprova": "E-Mail oder Passwort falsch. Überprüfen Sie Ihre Zugangsdaten und versuchen Sie es erneut", + "Email per notifiche": "E-Mail für Benachrichtigungen", + "Email troppo lunga (massimo 255 caratteri)": "E-Mail zu lang (maximal 255 Zeichen)", + "Email utente": "Benutzer-E-Mail", + "Email verificata con successo! Il tuo account è ora in attesa di approvazione da parte dell'amministratore. Riceverai un'email quando sarà attivato.": "E-Mail erfolgreich verifiziert! Ihr Konto wartet nun auf die Genehmigung durch den Administrator. Sie erhalten eine E-Mail, wenn es aktiviert wird.", + "Email:": "E-Mail:", + "Embed della mappa (Google Maps o OpenStreetMap). Puoi inserire l'URL o il codice iframe completo.": "Karteneinbettung (Google Maps oder OpenStreetMap). Sie können die URL oder den vollständigen iframe-Code einfügen.", + "Emoji Bandiera": "Flaggen-Emoji", + "Emoji della bandiera del paese (opzionale)": "Landesflaggen-Emoji (optional)", + "Emoji della bandiera del paese (opzionale, default: 🌐)": "Landesflaggen-Emoji (optional, Standard: 🌐)", + "Encryption": "Encryption", + "Endpoint": "Endpoint", + "Endpoint SRU:": "SRU-Endpoint:", + "English (EN)": "Englisch (EN)", + "Errore": "Fehler", + "Errore Installazione": "Installationsfehler", + "Errore SQL durante migrazione %s: %s": "SQL-Fehler bei Migration %s: %s", + "Errore Upload": "Upload-Fehler", + "Errore aggiornamento log": "Fehler beim Aktualisieren des Protokolls", + "Errore annullamento prenotazione": "Fehler bei der Stornierung der Vormerkung", + "Errore annullamento prestito": "Fehler bei der Stornierung der Ausleihe", + "Errore attivazione prestito schedulato": "Fehler bei der Aktivierung der geplanten Ausleihe", + "Errore backup database": "Fehler beim Datenbank-Backup", + "Errore caricamento Audiobook": "Fehler beim Laden des Hörbuchs", + "Errore caricamento classificazione Dewey": "Fehler beim Laden der Dewey-Klassifikation", + "Errore caricamento eBook": "Fehler beim Laden des E-Books", + "Errore connessione database": "Datenbankverbindungsfehler", + "Errore correzione dati:": "Fehler bei der Datenkorrektur:", + "Errore creazione %s su %s:": "Fehler beim Erstellen von %s auf %s:", + "Errore creazione indici:": "Fehler bei der Indexerstellung:", + "Errore creazione tabella %s:": "Fehler beim Erstellen der Tabelle %s:", + "Errore creazione tabella migrazioni": "Fehler beim Erstellen der Migrationstabelle", + "Errore creazione tabella update_logs": "Fehler beim Erstellen der Tabelle update_logs", + "Errore database:": "Datenbankfehler:", + "Errore del Server": "Serverfehler", + "Errore del database": "Datenbankfehler", + "Errore del database durante la registrazione. Riprova più tardi": "Datenbankfehler bei der Registrierung. Bitte versuchen Sie es später erneut", + "Errore del server": "Serverfehler", + "Errore del server. Riprova più tardi.": "Serverfehler. Bitte versuchen Sie es später erneut.", + "Errore di comunicazione con il server": "Kommunikationsfehler mit dem Server", + "Errore di configurazione del server.": "Serverkonfigurationsfehler.", + "Errore di configurazione.": "Konfigurationsfehler.", + "Errore di connessione": "Verbindungsfehler", + "Errore di connessione durante l'importazione": "Verbindungsfehler während des Imports", + "Errore di connessione:": "Verbindungsfehler:", + "Errore di rete": "Netzwerkfehler", + "Errore di salvataggio": "Speicherfehler", + "Errore di salvataggio. Riprova più tardi.": "Fehler beim Speichern. Bitte versuchen Sie es später erneut.", + "Errore di sicurezza": "Sicherheitsfehler", + "Errore di sicurezza, riprova": "Sicherheitsfehler, versuchen Sie es erneut", + "Errore di sicurezza. Aggiorna la pagina e riprova": "Sicherheitsfehler. Aktualisieren Sie die Seite und versuchen Sie es erneut", + "Errore di sicurezza. Ricarica la pagina e riprova": "Sicherheitsfehler. Laden Sie die Seite neu und versuchen Sie es erneut", + "Errore di sicurezza. Ricarica la pagina e riprova.": "Sicherheitsfehler. Laden Sie die Seite neu und versuchen Sie es erneut.", + "Errore di sicurezza. Riprova.": "Sicherheitsfehler. Bitte versuchen Sie es erneut.", + "Errore di sistema.": "Systemfehler.", + "Errore durante il caricamento dei dettagli del plugin.": "Fehler beim Laden der Plugin-Details.", + "Errore durante il caricamento del file (code: %s).": "Fehler beim Hochladen der Datei (Code: %s).", + "Errore durante il caricamento del file.": "Fehler beim Hochladen der Datei.", + "Errore durante il controllo": "Fehler bei der Überprüfung", + "Errore durante il recupero dei dati": "Fehler beim Abrufen der Daten", + "Errore durante il recupero delle sessioni": "Fehler beim Abrufen der Sitzungen", + "Errore durante il ricalcolo:": "Fehler bei der Neuberechnung:", + "Errore durante il rifiuto": "Fehler bei der Ablehnung", + "Errore durante il salvataggio": "Fehler beim Speichern", + "Errore durante il salvataggio delle impostazioni.": "Fehler beim Speichern der Einstellungen.", + "Errore durante il salvataggio delle impostazioni:": "Fehler beim Speichern der Einstellungen:", + "Errore durante il salvataggio nel database.": "Fehler beim Speichern in der Datenbank.", + "Errore durante il salvataggio.": "Fehler beim Speichern.", + "Errore durante il salvataggio:": "Fehler beim Speichern:", + "Errore durante il seed": "Fehler beim Seeding", + "Errore durante l'aggiornamento": "Fehler bei der Aktualisierung", + "Errore durante l'aggiornamento dell'evento.": "Fehler beim Aktualisieren der Veranstaltung.", + "Errore durante l'aggiornamento della chiave Google Books.": "Fehler beim Aktualisieren des Google-Books-Schlüssels.", + "Errore durante l'annullamento del ritiro": "Fehler beim Stornieren der Abholung", + "Errore durante l'applicazione del fix:": "Fehler beim Anwenden des Fixes:", + "Errore durante l'approvazione": "Fehler bei der Genehmigung", + "Errore durante l'attivazione": "Fehler bei der Aktivierung", + "Errore durante l'attivazione del plugin.": "Fehler beim Aktivieren des Plugins.", + "Errore durante l'attivazione del tema": "Fehler bei der Aktivierung des Themes", + "Errore durante l'attivazione: %s": "Fehler bei der Aktivierung: %s", + "Errore durante l'eliminazione dell'evento.": "Fehler beim Löschen der Veranstaltung.", + "Errore durante l'estrazione del plugin.": "Fehler beim Entpacken des Plugins.", + "Errore durante l'import: %s": "Importfehler: %s", + "Errore durante l'importazione (HTTP": "Fehler beim Import (HTTP", + "Errore durante l'importazione (HTTP %d)": "Importfehler (HTTP %d)", + "Errore durante l'importazione dati": "Fehler beim Datenimport", + "Errore durante l'installazione del plugin.": "Fehler bei der Plugin-Installation.", + "Errore durante l'installazione:": "Fehler bei der Installation:", + "Errore durante l'installazione: %s": "Fehler bei der Installation: %s", + "Errore durante l'invio dell'email. Riprova più tardi": "Fehler beim Senden der E-Mail. Bitte versuchen Sie es später erneut", + "Errore durante l'unione degli autori": "Fehler beim Zusammenführen der Autoren", + "Errore durante l'unione degli editori": "Fehler beim Zusammenführen der Verlage", + "Errore durante l'upload.": "Upload-Fehler.", + "Errore durante la conferma del ritiro": "Fehler bei der Abholungsbestätigung", + "Errore durante la correzione:": "Fehler bei der Korrektur:", + "Errore durante la creazione degli indici": "Fehler beim Erstellen der Indizes", + "Errore durante la creazione degli indici:": "Fehler beim Erstellen der Indizes:", + "Errore durante la creazione del prestito.": "Fehler beim Erstellen der Ausleihe.", + "Errore durante la creazione dell'evento.": "Fehler beim Erstellen der Veranstaltung.", + "Errore durante la creazione dell'utente:": "Fehler beim Erstellen des Benutzers:", + "Errore durante la creazione delle tabelle:": "Fehler beim Erstellen der Tabellen:", + "Errore durante la disattivazione del plugin.": "Fehler beim Deaktivieren des Plugins.", + "Errore durante la disattivazione: %s": "Fehler bei der Deaktivierung: %s", + "Errore durante la disinstallazione del plugin.": "Fehler bei der Deinstallation des Plugins.", + "Errore durante la finalizzazione:": "Fehler bei der Fertigstellung:", + "Errore durante la manutenzione:": "Fehler bei der Wartung:", + "Errore durante la prenotazione": "Fehler bei der Vormerkung", + "Errore durante la registrazione": "Registrierungsfehler", + "Errore durante la revoca della sessione": "Fehler beim Widerrufen der Sitzung", + "Errore durante la revoca delle sessioni": "Fehler beim Widerrufen der Sitzungen", + "Errore durante la ricerca": "Fehler bei der Suche", + "Errore durante la ricerca su": "Fehler bei der Suche auf", + "Errore durante la rimozione dal database.": "Fehler beim Entfernen aus der Datenbank.", + "Errore durante la verifica dei libri associati": "Fehler bei der Überprüfung der zugehörigen Bücher", + "Errore durante la verifica dei prestiti attivi": "Fehler bei der Überprüfung der aktiven Ausleihen", + "Errore elaborazione restituzione": "Fehler bei der Rückgabeverarbeitung", + "Errore elaborazione ritiro scaduto": "Fehler bei der Verarbeitung der abgelaufenen Abholung", + "Errore export CSV": "CSV-Export-Fehler", + "Errore fatale durante aggiornamento": "Schwerwiegender Fehler bei der Aktualisierung", + "Errore generazione PDF prestito": "Fehler bei der Erstellung des Ausleih-PDF", + "Errore generazione calendario": "Fehler bei der Kalendererstellung", + "Errore gestione cambio stato copia": "Fehler bei der Verarbeitung der Exemplar-Statusänderung", + "Errore gestione copia non disponibile": "Fehler bei der Behandlung des nicht verfügbaren Exemplars", + "Errore imprevisto durante l'unione degli autori": "Unerwarteter Fehler beim Zusammenführen der Autoren", + "Errore imprevisto durante l'unione degli editori": "Unerwarteter Fehler beim Zusammenführen der Verlage", + "Errore interno del database": "Interner Datenbankfehler", + "Errore interno del database durante la verifica": "Interner Datenbankfehler während der Überprüfung", + "Errore interno del database. Riprova più tardi.": "Interner Datenbankfehler. Bitte versuchen Sie es später erneut.", + "Errore interno durante l'approvazione": "Interner Fehler bei der Genehmigung", + "Errore interno: %s": "Interner Fehler: %s", + "Errore invio notifica differita": "Fehler beim Senden der verzögerten Benachrichtigung", + "Errore invio notifica ritiro pronto": "Fehler beim Senden der Abholbereitschafts-Benachrichtigung", + "Errore invio notifica ritiro scaduto": "Fehler beim Senden der Benachrichtigung über abgelaufene Abholung", + "Errore lettura calendario": "Fehler beim Lesen des Kalenders", + "Errore modifica data prenotazione": "Fehler bei der Änderung des Vormerkungsdatums", + "Errore nel caricamento dei backup.": "Fehler beim Laden der Sicherungen.", + "Errore nel caricamento dei libri": "Fehler beim Laden der Bücher", + "Errore nel caricamento del file": "Fehler beim Hochladen der Datei", + "Aggiunge badge cliccabili alla scheda libro per cercare su Anna's Archive, Z-Library e Project Gutenberg con un click. Ispirato all'estensione browser GoodLib.": "Fügt anklickbare Badges zur Buchdetailseite hinzu, um mit einem Klick auf Anna's Archive, Z-Library und Project Gutenberg zu suchen. Inspiriert von der GoodLib-Browsererweiterung.", + "Anna's Archive": "Anna's Archive", + "Catalogo pubblico": "Öffentlicher Katalog", + "Configura Fonti": "Quellen konfigurieren", + "Domini mirror": "Mirror-Domains", + "Dominio non valido. Inserisci solo host o host:porta, senza percorsi.": "Ungültige Domain. Geben Sie nur Host oder Host:Port ohne Pfade ein.", + "Dominio personalizzato...": "Benutzerdefinierte Domain...", + "Errore durante l'aggiornamento del profilo.": "Fehler beim Aktualisieren des Profils.", + "Cerca su:": "Suche auf:", + "Predefinita del sito": "Website-Standard", + "Cerca \"%s\" su %s": "Suche \"%s\" auf %s", + "Fonti attive": "Aktive Quellen", + "GoodLib — External Sources": "GoodLib — Externe Quellen", + "GoodLib — Fonti Esterne": "GoodLib — Externe Quellen", + "Impostazioni GoodLib salvate correttamente.": "GoodLib-Einstellungen erfolgreich gespeichert.", + "Mostra badge nella pagina dettaglio libro": "Badge auf der Buchdetailseite anzeigen", + "Mostra badge nell'area amministrazione": "Badge im Administrationsbereich anzeigen", + "Mostra i badge nella pagina dettaglio libro del catalogo": "Badges auf der Buchdetailseite im Katalog anzeigen", + "Mostra i badge nella scheda libro dell'area amministrazione": "Badges auf der Buchseite im Administrationsbereich anzeigen", + "Project Gutenberg": "Project Gutenberg", + "Puoi scegliere un mirror suggerito oppure selezionare dominio personalizzato.": "Sie können einen vorgeschlagenen Mirror auswählen oder eine benutzerdefinierte Domain wählen.", + "Puoi usare i mirror suggeriti oppure inserire un dominio custom.": "Sie können die vorgeschlagenen Mirror verwenden oder eine benutzerdefinierte Domain eingeben.", + "Questi siti cambiano dominio spesso. Seleziona un mirror funzionante.": "Diese Seiten ändern ihre Domain häufig. Wählen Sie einen funktionierenden Mirror aus.", + "Scheda libro admin": "Admin-Buchseite", + "Sono accettati anche domini personalizzati; se incolli un URL completo verrà salvato solo l'host.": "Benutzerdefinierte Domains werden ebenfalls akzeptiert; wenn Sie eine vollständige URL einfügen, wird nur der Host gespeichert.", + "Visibilita": "Sichtbarkeit", + "Visibilità": "Sichtbarkeit", + "Z-Library": "Z-Library", + "Errore nel caricamento del file JSON": "Fehler beim Laden der JSON-Datei", + "Errore nel caricamento.": "Fehler beim Laden.", + "Errore nel caricamento. Riprova.": "Fehler beim Laden. Bitte versuchen Sie es erneut.", + "Errore nel download della copertina.": "Fehler beim Herunterladen des Covers.", + "Errore nel parsing del file JSON.": "Fehler beim Parsen der JSON-Datei.", + "Errore nel recupero dati tabella %s": "Fehler beim Abrufen der Tabellendaten für %s", + "Errore nel recupero dei figli": "Fehler beim Abrufen der Unterkategorien", + "Errore nel recupero delle categorie.": "Fehler beim Abrufen der Kategorien.", + "Errore nel recupero delle divisioni.": "Fehler beim Abrufen der Abteilungen.", + "Errore nel recupero delle specifiche.": "Fehler beim Abrufen der Untergruppen.", + "Errore nel recupero delle tabelle": "Fehler beim Abrufen der Tabellen", + "Errore nel recupero struttura tabella %s": "Fehler beim Abrufen der Tabellenstruktur für %s", + "Errore nel rifiuto": "Fehler bei der Ablehnung", + "Errore nel rifiuto della richiesta": "Fehler beim Ablehnen der Anfrage", + "Errore nel ripristino dei colori": "Fehler beim Zurücksetzen der Farben", + "Errore nel ripristino.": "Fehler bei der Wiederherstellung.", + "Errore nel salvataggio del file di traduzione": "Fehler beim Speichern der Übersetzungsdatei", + "Errore nel salvataggio del file route": "Fehler beim Speichern der Route-Datei", + "Errore nel salvataggio del file.": "Fehler beim Speichern der Datei.", + "Errore nel salvataggio del tema": "Fehler beim Speichern des Themes", + "Errore nel salvataggio dell'immagine.": "Fehler beim Speichern des Bildes.", + "Errore nel salvataggio dell'ordine. Ricarica la pagina e riprova.": "Fehler beim Speichern der Reihenfolge. Bitte laden Sie die Seite neu und versuchen Sie es erneut.", + "Errore nell'aggiornamento del template": "Fehler beim Aktualisieren der Vorlage", + "Errore nell'aggiornamento dello stato dell'API key: %s": "Fehler beim Aktualisieren des API-Key-Status: %s", + "Errore nell'aggiornamento:": "Fehler bei der Aktualisierung:", + "Errore nell'aggiornare i preferiti.": "Fehler beim Aktualisieren der Favoriten.", + "Errore nell'approvazione": "Fehler bei der Genehmigung", + "Errore nell'eliminazione dell'API key: %s": "Fehler beim Löschen des API-Keys: %s", + "Errore nell'eliminazione:": "Fehler beim Löschen:", + "Errore nell'operazione:": "Fehler beim Vorgang:", + "Errore nella Verifica dell'Installazione": "Fehler bei der Installationsüberprüfung", + "Errore nella codifica JSON.": "JSON-Kodierungsfehler.", + "Errore nella comunicazione con il server": "Kommunikationsfehler mit dem Server", + "Errore nella conferma del ritiro": "Fehler bei der Abholungsbestätigung", + "Errore nella copia del file: %s": "Fehler beim Kopieren der Datei: %s", + "Errore nella copia:": "Fehler beim Kopieren:", + "Errore nella copia: ": "Fehler beim Kopieren: ", + "Errore nella creazione del genere.": "Fehler beim Erstellen des Genres.", + "Errore nella creazione dell'API key: %s": "Fehler beim Erstellen des API-Keys: %s", + "Errore nella creazione della recensione": "Fehler beim Erstellen der Rezension", + "Errore nella creazione della richiesta di prestito": "Fehler beim Erstellen der Ausleihanfrage", + "Errore nella creazione:": "Fehler beim Erstellen:", + "Errore nella lettura del backup.": "Fehler beim Lesen der Sicherungsdatei.", + "Errore nella lettura del file Dewey esistente.": "Fehler beim Lesen der vorhandenen Dewey-Datei.", + "Errore nella lettura del file.": "Fehler beim Lesen der Datei.", + "Errore nella prenotazione": "Fehler bei der Vormerkung", + "Errore nella prenotazione.": "Fehler bei der Vormerkung.", + "Errore nella query.": "Abfragefehler.", + "Errore nella ricerca": "Suchfehler", + "Errore nella ricerca.": "Fehler bei der Suche.", + "Errore nella richiesta di prestito.": "Fehler bei der Ausleihanfrage.", + "Errore prenotazione": "Vormerkungsfehler", + "Errore preparazione completamento log": "Fehler beim Vorbereiten des Protokollabschlusses", + "Errore preparazione insert migrazione": "Fehler beim Vorbereiten des Migrationseintrags", + "Errore preparazione log aggiornamento": "Fehler beim Vorbereiten des Aktualisierungsprotokolls", + "Errore preparazione query migrazioni": "Fehler beim Vorbereiten der Migrationsabfrage", + "Errore processamento immagine": "Fehler bei der Bildverarbeitung", + "Errore recupero batch migrazioni": "Fehler beim Abrufen des Migrationsbatches", + "Errore recupero risultati migrazioni": "Fehler beim Abrufen der Migrationsergebnisse", + "Errore riassegnazione copia": "Fehler bei der Exemplar-Neuzuweisung", + "Errore riassegnazione copia persa": "Fehler bei der Neuzuweisung des verlorenen Exemplars", + "Errore richiesta prestito": "Fehler bei der Ausleihanfrage", + "Errore salvataggio immagine": "Fehler beim Speichern des Bildes", + "Errore sconosciuto durante il caricamento": "Unbekannter Fehler beim Hochladen", + "Errore suggerimento": "Vorschlagsfehler", + "Errore validazione prestito:": "Fehler bei der Ausleihe-Validierung:", + "Errore verifica tabelle: %s": "Fehler bei der Tabellenüberprüfung: %s", + "Errore!": "Fehler!", + "Errore:": "Fehler:", + "Errore: ": "Fehler: ", + "Errore: Utente non trovato": "Fehler: Benutzer nicht gefunden", + "Errore: la data di scadenza deve essere successiva alla data di prestito.": "Fehler: Das Fälligkeitsdatum muss nach dem Ausleihdatum liegen.", + "Errore: tutti i campi obbligatori devono essere compilati.": "Fehler: Alle Pflichtfelder müssen ausgefüllt werden.", + "Errori Totali": "Gesamtfehler", + "Errori di validazione dopo il merge.": "Validierungsfehler nach dem Zusammenführen.", + "Errori di validazione nel file importato.": "Validierungsfehler in der importierten Datei.", + "Errori di validazione.": "Validierungsfehler.", + "Errori durante l'import": "Importfehler", + "Errori:": "Fehler:", + "Es. Biblioteca Digitale - Migliaia di libri da esplorare": "Z.B. Digitale Bibliothek – Tausende Bücher zum Entdecken", + "Es. Esplora migliaia di libri, prenota online e gestisci i tuoi prestiti.": "Z.B. Entdecken Sie Tausende von Büchern, reservieren Sie online und verwalten Sie Ihre Ausleihen.", + "Es. Italiana, Americana, Francese...": "Z.B. Italienisch, Amerikanisch, Französisch...", + "Es. Italiana, Americana...": "Z.B. Italienische, Amerikanische...", + "Es. Italiana...": "Z.B. Italienisch...", + "Es. La Tua Biblioteca Digitale": "Z.B. Ihre Digitale Bibliothek", + "Es. Milano...": "Z.B. München...", + "Es. Presentazione libro \"Il Nome della Rosa\"": "Z.B. Buchvorstellung \"Der Name der Rose\"", + "Es. Scopri il nostro catalogo digitale con migliaia di libri disponibili per il prestito. Registrati gratuitamente e inizia a leggere oggi stesso.": "Z.B. Entdecken Sie unseren digitalen Katalog mit Tausenden von Büchern, die zur Ausleihe verfügbar sind. Registrieren Sie sich kostenlos und beginnen Sie noch heute zu lesen.", + "Es. Un libro fantastico!": "Z.B. Ein fantastisches Buch!", + "Es. Un libro straordinario!": "Z.B. Ein außergewöhnliches Buch!", + "Es. biblioteca digitale, prestito libri, catalogo online, libri gratis": "Z.B. digitale Bibliothek, Buchausleihe, Online-Katalog, kostenlose Bücher", + "Es. https://tuosito.com": "Z.B. https://ihreseite.com", + "Es. https://tuosito.com/uploads/og-image.jpg": "Z.B. https://ihreseite.com/uploads/og-image.jpg", + "Esauriti tentativi riassegnazione copia": "Neuzuweisungsversuche für Exemplar erschöpft", + "Esci": "Abmelden", + "Esecuzione ogni 30 minuti (consigliato)": "Ausführung alle 30 Minuten (empfohlen)", + "Esecuzione ogni ora (8:00-20:00)": "Ausführung jede Stunde (8:00-20:00)", + "Esegue la rigenerazione ogni giorno alle 02:00 e registra il log in": "Führt die Regenerierung täglich um 02:00 Uhr aus und protokolliert in", + "Esegue la rigenerazione ogni giorno alle 02:00 e registra il log in storage/logs/sitemap.log.": "Führt die Regenerierung täglich um 02:00 Uhr aus und protokolliert in storage/logs/sitemap.log.", + "Esegui": "Ausführen", + "Esegui Manutenzione": "Wartung ausführen", + "Esegui tutte le operazioni di manutenzione": "Alle Wartungsoperationen ausführen", + "Eseguito da": "Ausgeführt von", + "Esempio": "Beispiel", + "Esempio di Chiamata": "Aufrufbeispiel", + "Esempio route inglese:": "Englisches Route-Beispiel:", + "Esempio route italiana:": "Italienisches Route-Beispiel:", + "Esempio:": "Beispiel:", + "Esiste già un altro libro con lo stesso identificatore (ISBN/EAN).": "Es existiert bereits ein anderes Buch mit demselben Identifikator (ISBN/EAN).", + "Esiste già un libro con lo stesso identificatore (ISBN/EAN).": "Es existiert bereits ein Buch mit demselben Identifikator (ISBN/EAN).", + "Esistente": "Vorhanden", + "Esito restituzione": "Rückgabeergebnis", + "Español (ES)": "Spanisch (ES)", + "Esplora Catalogo": "Katalog durchsuchen", + "Esplora catalogo": "Katalog durchsuchen", + "Esplora e gestisci gli autori della biblioteca": "Autoren der Bibliothek durchsuchen und verwalten", + "Esplora e gestisci gli editori della biblioteca": "Verlage der Bibliothek durchsuchen und verwalten", + "Esplora e gestisci gli utenti registrati alla biblioteca": "Registrierte Bibliotheksbenutzer durchsuchen und verwalten", + "Esplora e gestisci la collezione della biblioteca": "Die Bibliothekssammlung durchsuchen und verwalten", + "Esplora i generi principali": "Die Hauptgenres entdecken", + "Esplora il catalogo": "Den Katalog entdecken", + "Esplora il catalogo e scopri nuovi titoli.": "Durchsuchen Sie den Katalog und entdecken Sie neue Titel.", + "Esplora il nostro catalogo digitale": "Entdecken Sie unseren digitalen Katalog", + "Esplora il nostro vasto catalogo di libri, prenota i tuoi titoli preferiti e scopri nuove letture": "Entdecken Sie unseren umfangreichen Buchkatalog, reservieren Sie Ihre Lieblingstitel und entdecken Sie neue Lektüre", + "Esplora il nostro vasto catalogo di libri, prenota i tuoi titoli preferiti e scopri nuove letture. Sistema di prestito moderno e intuitivo con ricerca avanzata e categorie organizzate.": "Entdecken Sie unseren umfangreichen Buchkatalog, reservieren Sie Ihre Lieblingstitel und entdecken Sie neue Lektüre. Modernes und intuitives Ausleihsystem mit erweiterter Suche und übersichtlichen Kategorien.", + "Esplora per Categoria": "Nach Kategorie durchsuchen", + "Espone il catalogo locale via protocollo SRU per altre biblioteche.": "Stellt den lokalen Katalog über das SRU-Protokoll für andere Bibliotheken bereit.", + "Esporta": "Exportieren", + "Esporta CSV": "CSV exportieren", + "Esporta CSV (formato compatibile per import)": "CSV exportieren (kompatibles Format für den Import)", + "Esporta Excel": "Excel exportieren", + "Esporta PDF": "PDF exportieren", + "Esporta Prestiti": "Ausleihen exportieren", + "Esporta selezionati": "Ausgewählte exportieren", + "Esportazione di %d libri filtrati su %d totali": "Export von %d gefilterten Büchern von insgesamt %d", + "Esportazione di %d utenti filtrati su %d totali": "Export von %d gefilterten Benutzern von insgesamt %d", + "Esportazione di tutti i %d libri del catalogo": "Export aller %d Bücher aus dem Katalog", + "Esportazione di tutti i %d utenti": "Export aller %d Benutzer", + "Essenziali:": "Erforderlich:", + "Estensione": "Erweiterung", + "Estensione del file non valida.": "Ungültige Dateierweiterung.", + "Estensioni": "Erweiterungen", + "Estrazione del pacchetto fallita": "Paketentpackung fehlgeschlagen", + "Etichetta": "Etikett", + "Etichette": "Etiketten", + "Etichette interne grandi (Herma 4630, Avery 3490)": "Große interne Etiketten (Herma 4630, Avery 3490)", + "European Article Number (opzionale)": "European Article Number (optional)", + "Eventi": "Veranstaltungen", + "Eventi Recenti": "Aktuelle Veranstaltungen", + "Eventi e Incontri": "Veranstaltungen und Treffen", + "Evento": "Veranstaltung", + "Evento aggiornato con successo!": "Veranstaltung erfolgreich aktualisiert!", + "Evento creato con successo!": "Veranstaltung erfolgreich erstellt!", + "Evento della biblioteca": "Bibliotheksveranstaltung", + "Evento eliminato con successo!": "Veranstaltung erfolgreich gelöscht!", + "Evento non trovato.": "Veranstaltung nicht gefunden.", + "Evento visibile sul sito": "Veranstaltung auf der Website sichtbar", + "Eventuali annotazioni sullo stato del libro...": "Anmerkungen zum Zustand des Buches...", + "Excel": "Excel", + "Export": "Export", + "Export per LibraryThing": "Export für LibraryThing", + "Exporting %d filtered users out of %d total": "Export von %d gefilterten Benutzern von insgesamt %d", + "Exporting all %d users": "Export aller %d Benutzer", + "FAQ": "FAQ", + "FATAL ERROR:": "FATALER FEHLER:", + "Facebook": "Facebook", + "Fallimento": "Fehlschlag", + "Fallito": "Fehlgeschlagen", + "Fatal Error:": "Fataler Fehler:", + "Fatto!": "Fertig!", + "Feature %d": "Funktion %d", + "Feature 1": "Funktion 1", + "Feature 2": "Funktion 2", + "Feature 3": "Funktion 3", + "Feature 4": "Funktion 4", + "Features - Caratteristiche": "Funktionen - Merkmale", + "Femmina": "Weiblich", + "File": "Datei", + "File \"%s\" pronto per l'upload": "Datei \"%s\" bereit zum Hochladen", + "File %s nella directory root": "Datei %s im Stammverzeichnis", + "File .env non trovato": ".env-Datei nicht gefunden", + "File .env:": ".env-Datei:", + "File .htaccess creato": ".htaccess-Datei erstellt", + "File .installed:": ".installed-Datei:", + "File CSV (max 10MB)": "CSV-Datei (max. 10 MB)", + "File CSV non valido: usa \";\" o \",\" come separatore.": "Ungültige CSV-Datei: Verwenden Sie \";\" oder \",\" als Trennzeichen.", + "File CSV vuoto o formato non valido": "Leere CSV-Datei oder ungültiges Format", + "File Dewey esistente non è un JSON valido o è corrotto.": "Die vorhandene Dewey-Datei ist kein gültiges JSON oder ist beschädigt.", + "File Dewey non trovato.": "Dewey-Datei nicht gefunden.", + "File JSON con le traduzioni (opzionale). Puoi caricarlo anche in seguito.": "JSON-Datei mit Übersetzungen (optional). Sie können sie auch später hochladen.", + "File JSON non valido": "Ungültige JSON-Datei", + "File Principale:": "Hauptdatei:", + "File URL": "Datei-URL", + "File ZIP con struttura plugin valida": "ZIP-Datei mit gültiger Plugin-Struktur", + "File ZIP non trovato.": "ZIP-Datei nicht gefunden.", + "File ZIP troppo grande. Dimensione massima: 100 MB.": "ZIP-Datei zu groß. Maximale Größe: 100 MB.", + "File attuale": "Aktuelle Datei", + "File backup non trovato": "Sicherungsdatei nicht gefunden", + "File caricato con successo": "Datei erfolgreich hochgeladen", + "File dati iniziali per la lingua selezionata non trovato: %s": "Anfangsdatendatei für die ausgewählte Sprache nicht gefunden: %s", + "File di Esempio": "Beispieldatei", + "File di Traduzione": "Übersetzungsdatei", + "File di Traduzione Attuale": "Aktuelle Übersetzungsdatei", + "File di Traduzione JSON": "JSON-Übersetzungsdatei", + "File di aggiornamento non valido": "Ungültige Aktualisierungsdatei", + "File di aggiornamento non valido (troppo piccolo)": "Ungültige Aktualisierungsdatei (zu klein)", + "File di log non trovato": "Protokolldatei nicht gefunden", + "File di traduzione non trovato": "Übersetzungsdatei nicht gefunden", + "File esistente (data modifica)": "Vorhandene Datei (Änderungsdatum)", + "File non trovato nell'upload.": "Datei im Upload nicht gefunden.", + "File non valido o corrotto.": "Ungültige oder beschädigte Datei.", + "File plugin.json non trovato nel pacchetto.": "Datei plugin.json nicht im Paket gefunden.", + "File plugin.json non valido.": "Ungültige plugin.json-Datei.", + "File principale PHP specificato in %s": "In %s angegebene PHP-Hauptdatei", + "File principale del plugin non trovato.": "Plugin-Hauptdatei nicht gefunden.", + "File sitemap non trovato": "Sitemap-Datei nicht gefunden", + "File sitemap presente": "Sitemap-Datei vorhanden", + "File troppo grande. Dimensione massima 10MB.": "Datei zu groß. Maximale Größe 10 MB.", + "File troppo grande. Dimensione massima 5MB.": "Datei zu groß. Maximale Größe 5 MB.", + "File vuoto o formato non valido": "Leere Datei oder ungültiges Format", + "File:": "Datei:", + "Filtra": "Filtern", + "Filtra mensole per scaffale": "Regale nach Bücherregal filtern", + "Filtra per Mensola": "Nach Regal filtern", + "Filtra per Scaffale": "Nach Bücherregal filtern", + "Filtra per tipo": "Nach Typ filtern", + "Filtri": "Filter", + "Filtri attivi:": "Aktive Filter:", + "Filtri cancellati": "Filter zurückgesetzt", + "Filtri di Ricerca": "Suchfilter", + "Filtri salvati": "Filter gespeichert", + "Filtro Libro": "Buchfilter", + "Filtro Utente": "Benutzerfilter", + "Filtro genere attivo": "Genrefilter aktiv", + "Filtro attivo": "Aktiver Filter", + "Filtro sottogenere attivo": "Subgenre-Filter aktiv", + "Fine": "Fertig", + "Fine:": "Ende:", + "Fino a quando? (opzionale):": "Bis wann? (optional):", + "Fix applicato": "Fix angewendet", + "Fonte dati:": "Datenquelle:", + "Fonti consultate:": "Abgefragte Quellen:", + "Footer": "Fußzeile", + "Formati supportati: JPG, PNG, GIF, WebP. Dimensione massima: 5MB": "Unterstützte Formate: JPG, PNG, GIF, WebP. Maximale Größe: 5 MB", + "Formati supportati: MP3, M4A, OGG • Dimensione massima: 500 MB": "Unterstützte Formate: MP3, M4A, OGG • Max. Größe: 500 MB", + "Formati supportati: PDF, ePub • Dimensione massima: 100 MB": "Unterstützte Formate: PDF, ePub • Max. Größe: 100 MB", + "Formato": "Format", + "Formato CSV Dettagliato": "Detailliertes CSV-Format", + "Formato Etichetta": "Etikettenformat", + "Formato File JSON": "JSON-Dateiformat", + "Formato ISBN non valido.": "Ungültiges ISBN-Format.", + "Formato JSON non valido": "Ungültiges JSON-Format", + "Formato biblioteche scolastiche (compatibile A4)": "Schulbibliotheksformat (A4-kompatibel)", + "Formato biblioteche scolastiche (compatibili A4)": "Schulbibliotheksformat (A4-kompatibel)", + "Formato codice non valido": "Ungültiges Code-Format", + "Formato codice non valido. Usa formato: 599 oppure 599.9 oppure 599.93": "Ungültiges Code-Format. Format verwenden: 599 oder 599.9 oder 599.93", + "Formato codice non valido. Usa: XXX.Y (es. 599.1)": "Ungültiges Code-Format. Verwenden Sie: XXX.Y (z.B. 599.1)", + "Formato dati non valido.": "Ungültiges Datenformat.", + "Formato immagine non supportato": "Nicht unterstütztes Bildformat", + "Formato immagine non supportato. Usa JPG, PNG o WebP.": "Bildformat nicht unterstützt. Verwenden Sie JPG, PNG oder WebP.", + "Formato impostazioni non valido.": "Ungültiges Einstellungsformat.", + "Formato orizzontale per dorso": "Horizontales Format für Buchrücken", + "Formato quadrato Tirrenia": "Tirrenia-Quadratformat", + "Formato richiesta non valido": "Ungültiges Anfrageformat", + "Formato: CSV con separatore %s • Max 10MB": "Format: CSV mit Trennzeichen %s • Max. 10 MB", + "Formato: xx_XX (es. it_IT, en_US, es_ES)": "Format: xx_XX (z.B. it_IT, en_US, es_ES)", + "Forza HTTPS": "HTTPS erzwingen", + "Français (FR)": "Französisch (FR)", + "Frecce ↑ ↓ per il volume": "↑ ↓ Pfeiltasten für Lautstärke", + "From Email": "Absender-E-Mail", + "From Name": "Absendername", + "Funzionamento automatico:": "Automatischer Betrieb:", + "Fuori Catalogo": "Nicht im Katalog", + "Genera automaticamente": "Automatisch generieren", + "Generato il": "Generiert am", + "Generato il:": "Generiert am:", + "Generazione CSV in corso...": "CSV wird generiert...", + "Generazione...": "Wird generiert...", + "Genere": "Genre", + "Genere creato con successo!": "Genre erfolgreich erstellt!", + "Genere letterario": "Literarisches Genre", + "Genere letterario del libro": "Literarisches Genre des Buches", + "Genere padre (opz.)": "Übergeordnetes Genre (opt.)", + "Genere principale": "Hauptgenre", + "Genere:": "Genre:", + "Generi": "Genres", + "Generi Principali": "Hauptgenres", + "Generi e sottogeneri": "Genres und Subgenres", + "Gestione Autori": "Autorenverwaltung", + "Gestione Biblioteca": "Bibliotheksverwaltung", + "Gestione Collocazione": "Standortverwaltung", + "Gestione Contenuti (CMS)": "Inhaltsverwaltung (CMS)", + "Gestione Editori": "Verlagsverwaltung", + "Gestione Eventi": "Veranstaltungsverwaltung", + "Gestione Generi": "Genreverwaltung", + "Gestione Generi e Sottogeneri": "Genre- und Subgenre-Verwaltung", + "Gestione JavaScript Personalizzati basata su Cookie": "Cookie-basierte benutzerdefinierte JavaScript-Verwaltung", + "Gestione Libri": "Bücherverwaltung", + "Gestione Lingue": "Sprachverwaltung", + "Gestione Multilingua": "Mehrsprachigkeitsverwaltung", + "Gestione Plugin": "Plugin-Verwaltung", + "Gestione Plugin LibraryThing": "LibraryThing-Plugin-Verwaltung", + "Gestione Prenotazioni": "Vormerkungsverwaltung", + "Gestione Prestiti": "Ausleihverwaltung", + "Gestione Recensioni": "Rezensionsverwaltung", + "Gestione Temi": "Theme-Verwaltung", + "Gestione Utenti": "Benutzerverwaltung", + "Gestione autori": "Autorenverwaltung", + "Gestione classificazione Dewey: seed e statistiche": "Dewey-Klassifikationsverwaltung: Seed und Statistiken", + "Gestione collezione": "Sammlungsverwaltung", + "Gestione prestiti": "Ausleihverwaltung", + "Gestione recensioni": "Rezensionsverwaltung", + "Gestione utenti": "Benutzerverwaltung", + "Gestisci": "Verwalten", + "Gestisci Eventi": "Veranstaltungen verwalten", + "Gestisci Restituzione": "Rückgabe verwalten", + "Gestisci gli aggiornamenti dell'applicazione": "Anwendungsupdates verwalten", + "Gestisci gli autori della collezione": "Autoren der Sammlung verwalten", + "Gestisci gli eventi della biblioteca: crea, modifica ed elimina eventi con immagini e descrizioni": "Bibliotheksveranstaltungen verwalten: Erstellen, bearbeiten und löschen Sie Veranstaltungen mit Bildern und Beschreibungen", + "Gestisci i dispositivi su cui hai effettuato l'accesso con 'Ricordami'. Puoi disconnetterti da singoli dispositivi o da tutti contemporaneamente.": "Verwalten Sie die Geräte, auf denen Sie sich mit 'Angemeldet bleiben' angemeldet haben. Sie können sich von einzelnen Geräten oder von allen gleichzeitig abmelden.", + "Gestisci i generi letterari": "Literarische Genres verwalten", + "Gestisci i prestiti attivi e storici": "Aktive und historische Ausleihen verwalten", + "Gestisci i tuoi prestiti, esplora il catalogo e scopri nuovi titoli.": "Verwalten Sie Ihre Ausleihen, erkunden Sie den Katalog und entdecken Sie neue Titel.", + "Gestisci i tuoi titoli preferiti, scopri quando tornano disponibili e accedi rapidamente ai dettagli del libro.": "Verwalten Sie Ihre Lieblingstitel, erfahren Sie, wann sie wieder verfügbar sind, und greifen Sie schnell auf die Buchdetails zu.", + "Gestisci il contenuto della pagina Chi Siamo con testo e immagine": "Verwalten Sie den Inhalt der Über-uns-Seite mit Text und Bild", + "Gestisci il contenuto della pagina Chi Siamo con testo e immagine personalizzati": "Verwalten Sie den Inhalt der Über-uns-Seite mit benutzerdefiniertem Text und Bild", + "Gestisci l'accesso all'API per cercare libri via EAN, ISBN e autore": "API-Zugriff zur Buchsuche über EAN, ISBN und Autor verwalten", + "Gestisci la collocazione fisica dei libri": "Physischen Standort der Bücher verwalten", + "Gestisci la visibilità delle categorie di cookie nel banner. I cookie essenziali sono sempre visibili e obbligatori.": "Verwalten Sie die Sichtbarkeit der Cookie-Kategorien im Banner. Essentielle Cookies sind immer sichtbar und erforderlich.", + "Gestisci le case editrici": "Verlage verwalten", + "Gestisci le classificazioni Dewey per italiano e inglese": "Dewey-Klassifikationen für Italienisch und Englisch verwalten", + "Gestisci le estensioni dell'applicazione": "Anwendungserweiterungen verwalten", + "Gestisci preferenze cookie": "Cookie-Einstellungen verwalten", + "Gestisci restituzione": "Rückgabe verwalten", + "Gestisci tutte": "Alle verwalten", + "Gestisci tutti": "Alle verwalten", + "Gestito da": "Verwaltet von", + "Giorni di preavviso per scadenza prestito": "Tage der Vorankündigung vor Ablauf der Ausleihe", + "Giorni per ritirare un prestito approvato": "Tage zur Abholung einer genehmigten Ausleihe", + "Già Installato": "Bereits installiert", + "Già presenti o senza ISBN:": "Bereits vorhanden oder ohne ISBN:", + "Già presenti:": "Bereits vorhanden:", + "Già recensito": "Bereits rezensiert", + "Gli amministratori non richiedono tessera e riceveranno un invito per impostare la password.": "Administratoren benötigen keinen Bibliotheksausweis und erhalten eine Einladung zur Passworteinrichtung.", + "Gli appuntamenti della biblioteca": "Bibliotheksveranstaltungen", + "Gli import CSV e LibraryThing verranno visualizzati qui": "CSV- und LibraryThing-Importe werden hier angezeigt", + "Gli import vengono tracciati automaticamente durante l'elaborazione": "Importe werden während der Verarbeitung automatisch nachverfolgt", + "Gli indici migliorano significativamente le performance delle query, specialmente su tabelle con molti record. Le installazioni recenti li includono già, ma le installazioni più vecchie potrebbero non averli.": "Indizes verbessern die Abfrageleistung erheblich, insbesondere bei Tabellen mit vielen Datensätzen. Neuere Installationen enthalten sie bereits, ältere Installationen möglicherweise nicht.", + "Gli script JavaScript sono divisi in 3 categorie in base alla tipologia di cookie:": "JavaScript-Skripte sind in 3 Kategorien nach Cookie-Typ unterteilt:", + "Gli utenti possono selezionare questa lingua": "Benutzer können diese Sprache auswählen", + "Globale": "Global", + "Google Books API": "Google Books API", + "Google Books API collegata": "Google Books API verbunden", + "Google Books Configurato": "Google Books konfiguriert", + "Google reCAPTCHA v3": "Google reCAPTCHA v3", + "Grazie per aver scelto Pinakes!": "Vielen Dank, dass Sie sich für Pinakes entschieden haben!", + "Gruppo": "Gruppe", + "Guida": "Anleitung", + "Guida alla Gestione Lingue": "Anleitung zur Sprachverwaltung", + "Guida alle Route": "Route-Anleitung", + "HTTP Strict Transport Security forza i browser a usare solo connessioni HTTPS per 1 anno (raccomandato per produzione con SSL valido).": "HTTP Strict Transport Security zwingt Browser, nur HTTPS-Verbindungen für 1 Jahr zu verwenden (empfohlen für Produktion mit gültigem SSL).", + "Hai aggiunto %s copie a \"%s\"": "Sie haben %s Exemplare zu \"%s\" hinzugefügt", + "Hai già un account?": "Haben Sie bereits ein Konto?", + "Hai già un prestito attivo o in attesa per questo libro": "Sie haben bereits eine aktive oder ausstehende Ausleihe für dieses Buch", + "Hai già una prenotazione attiva per questo libro.": "Sie haben bereits eine aktive Vormerkung für dieses Buch.", + "Hai già una richiesta di prestito in attesa per questo libro": "Sie haben bereits eine ausstehende Ausleihanfrage für dieses Buch", + "Hai libri che dovevano essere restituiti. Restituiscili al più presto per evitare sanzioni.": "Sie haben Bücher, die hätten zurückgegeben werden müssen. Bitte geben Sie diese schnellstmöglich zurück, um Mahngebühren zu vermeiden.", + "Hai modifiche non salvate che andranno perse. Continuare?": "Sie haben nicht gespeicherte Änderungen, die verloren gehen. Fortfahren?", + "Hai modifiche non salvate. I dati attuali verranno sostituiti.": "Sie haben nicht gespeicherte Änderungen. Die aktuellen Daten werden ersetzt.", + "Hai modifiche non salvate. Vuoi continuare e perderle?": "Sie haben nicht gespeicherte Änderungen. Möchten Sie fortfahren und diese verlieren?", + "Header HTTP (consigliato):": "HTTP-Header (empfohlen):", + "Heading 1": "Überschrift 1", + "Heading 2": "Überschrift 2", + "Heading 3": "Überschrift 3", + "Heading 4": "Überschrift 4", + "Heading 5": "Überschrift 5", + "Heading 6": "Überschrift 6", + "Hero - Testata principale": "Hero - Hauptbereich", + "Home": "Startseite", + "Homepage": "Startseite", + "Host": "Host", + "Host Database": "Datenbank-Host", + "I Cookie Essenziali sono sempre visibili e non possono essere disabilitati poiché necessari per il funzionamento del sito.": "Essentielle Cookies sind immer sichtbar und können nicht deaktiviert werden, da sie für den Betrieb der Website erforderlich sind.", + "I Miei Preferiti": "Meine Favoriten", + "I backup sono salvati in:": "Backups werden gespeichert in:", + "I campi con * sono obbligatori": "Felder mit * sind Pflichtfelder", + "I campi null indicano dati non disponibili": "Null-Felder zeigen nicht verfügbare Daten an", + "I contenitori fisici principali dove sono organizzati i libri": "Die physischen Hauptbehälter, in denen die Bücher organisiert sind", + "I dati attuali verranno sostituiti.": "Die aktuellen Daten werden ersetzt.", + "I dati devono essere un array non vuoto.": "Die Daten müssen ein nicht leeres Array sein.", + "I dati provengono dal file JSON, nessun seeding necessario.": "Die Daten stammen aus der JSON-Datei, kein Seeding erforderlich.", + "I doppioni (per ID, ISBN13 o EAN) vengono aggiornati senza modificare le copie fisiche": "Duplikate (nach ID, ISBN13 oder EAN) werden aktualisiert, ohne die physischen Exemplare zu ändern", + "I filtri correnti sono stati salvati nell'URL": "Die aktuellen Filter wurden in der URL gespeichert", + "I filtri vengono applicati automaticamente mentre digiti": "Filter werden automatisch beim Tippen angewendet", + "I libri degli altri autori verranno assegnati a questo": "Bücher der anderen Autoren werden diesem zugeordnet", + "I libri degli altri editori verranno assegnati a questo": "Bücher der anderen Verlage werden diesem zugeordnet", + "I livelli (ripiani) all'interno di ogni scaffale": "Die Ebenen (Regalböden) innerhalb jedes Bücherregals", + "I log vengono conservati per 90 giorni per conformità GDPR": "Protokolle werden 90 Tage lang gemäß DSGVO aufbewahrt", + "I miei preferiti": "Meine Favoriten", + "I tuoi preferiti": "Ihre Favoriten", + "ID": "ID", + "ID Editore": "Verlags-ID", + "ID Prestito": "Ausleih-ID", + "ID Prestito:": "Ausleih-ID:", + "ID autori non validi": "Ungültige Autoren-IDs", + "ID editori non validi": "Ungültige Verlags-IDs", + "ID genere non valido": "Ungültige Genre-ID", + "ID import mancante": "Fehlende Import-ID", + "ID libri non validi": "Ungültige Buch-IDs", + "ID libro non valido": "Ungültige Buch-ID", + "ID libro:": "Buch-ID:", + "ID prestito non valido": "Ungültige Ausleih-ID", + "ID sessione non valido": "Ungültige Sitzungs-ID", + "ID utente:": "Benutzer-ID:", + "ID:": "ID:", + "IN RITARDO": "ÜBERFÄLLIG", + "IP": "IP", + "IP Address": "IP-Adresse", + "ISBN": "ISBN", + "ISBN 10": "ISBN 10", + "ISBN 13": "ISBN 13", + "ISBN Mancante": "Fehlende ISBN", + "ISBN a 13 cifre (univoco)": "13-stellige ISBN (eindeutig)", + "ISBN non trovato nelle fonti disponibili.": "ISBN in den verfügbaren Quellen nicht gefunden.", + "ISBN non trovato. Fonti consultate: %s": "ISBN nicht gefunden. Abgefragte Quellen: %s", + "ISBN non valido. Specifica 10 o 13 cifre (eventualmente con X finale).": "Ungültige ISBN. Bitte geben Sie 10 oder 13 Ziffern an (X am Ende erlaubt).", + "ISBN o EAN...": "ISBN oder EAN...", + "ISBN-13:": "ISBN-13:", + "ISBN10": "ISBN10", + "ISBN10 Non Valido": "Ungültige ISBN10", + "ISBN10 deve contenere esattamente 10 caratteri (9 cifre + 1 cifra o X).": "ISBN10 muss genau 10 Zeichen enthalten (9 Ziffern + 1 Ziffer oder X).", + "ISBN10 o ISBN13": "ISBN10 oder ISBN13", + "ISBN13": "ISBN13", + "ISBN13 Non Valido": "Ungültige ISBN13", + "ISBN13 deve contenere esattamente 13 cifre.": "ISBN13 muss genau 13 Ziffern enthalten.", + "ISBN13: %s": "ISBN13: %s", + "ISBN:": "ISBN:", + "IT": "IT", + "Icona FontAwesome": "FontAwesome-Symbol", + "Identità": "Identität", + "Identità Applicazione": "Anwendungsidentität", + "Ieri": "Gestern", + "Ieri alle %s": "Gestern um %s", + "Il Mio Profilo": "Mein Profil", + "Il campo è obbligatorio": "Dieses Feld ist erforderlich", + "Il catalogo SBN (OPAC Nazionale Italiano) è già integrato e viene interrogato automaticamente durante l'importazione ISBN. Non è necessario aggiungerlo come server esterno.": "Der SBN-Katalog (Italienischer National-OPAC) ist bereits integriert und wird beim ISBN-Import automatisch abgefragt. Es ist nicht nötig, ihn als externen Server hinzuzufügen.", + "Il codice %s ha un formato non valido.": "Code %s hat ein ungültiges Format.", + "Il codice %s ha un livello non valido (deve essere 1-7).": "Code %s hat eine ungültige Ebene (muss 1-7 sein).", + "Il codice %s ha un nome non valido (minimo 2 caratteri).": "Code %s hat einen ungültigen Namen (mindestens 2 Zeichen).", + "Il codice %s non è un figlio valido di %s.": "Code %s ist kein gültiges Unterelement von %s.", + "Il codice %s è duplicato.": "Code %s ist doppelt vorhanden.", + "Il codice deve iniziare con le stesse tre cifre della classe principale": "Der Code muss mit denselben drei Ziffern der Hauptklasse beginnen", + "Il codice lingua non può essere modificato dopo la creazione.": "Der Sprachcode kann nach der Erstellung nicht mehr geändert werden.", + "Il codice lingua è obbligatorio (es. it_IT, en_US)": "Der Sprachcode ist erforderlich (z.B. it_IT, en_US)", + "Il codice scaffale \"%s\" esiste già. Usa un codice diverso.": "Der Regalcode \"%s\" existiert bereits. Verwenden Sie einen anderen Code.", + "Il codice tessera sarà generato automaticamente (formato: ADMIN-YYYYMMDD-XXX).": "Der Ausweiscode wird automatisch generiert (Format: ADMIN-JJJJMMTT-XXX).", + "Il codice verrà inserito in un tag": "Der Code wird in einem Tag eingefügt", + "Il codice verrà inserito in un tag ": "Der Code wird in einem -Tags ein", + "Il cron utilizza gli stessi permessi dell'utente di sistema che lo esegue": "Cron verwendet dieselben Berechtigungen wie der ausführende Systembenutzer", + "Il database '%s' non è vuoto. Deve essere un database vuoto.": "Die Datenbank '%s' ist nicht leer. Es muss eine leere Datenbank sein.", + "Il database deve essere vuoto.": "Die Datenbank muss leer sein.", + "Il database è coerente e non sono stati rilevati problemi.": "Die Datenbank ist konsistent und es wurden keine Probleme festgestellt.", + "Il database è già ottimizzato!": "Die Datenbank ist bereits optimiert!", + "Il database è stato installato, ma mancano le librerie PHP necessarie per eseguire l'applicazione.": "Die Datenbank wurde installiert, aber die zum Betrieb der Anwendung erforderlichen PHP-Bibliotheken fehlen.", + "Il download dovrebbe iniziare automaticamente": "Der Download sollte automatisch beginnen", + "Il file": "Die Datei", + "Il file JSON deve contenere coppie chiave-valore:": "Die JSON-Datei muss Schlüssel-Wert-Paare enthalten:", + "Il file JSON non è valido:": "Die JSON-Datei ist ungültig:", + "Il file deve avere estensione .csv": "Die Datei muss die Erweiterung .csv haben", + "Il file deve avere estensione .tsv, .csv o .txt": "Die Datei muss die Erweiterung .tsv, .csv oder .txt haben", + "Il file deve contenere coppie chiave (italiano) - valore (traduzione).": "Die Datei muss Schlüssel (Italienisch) - Wert (Übersetzung) Paare enthalten.", + "Il file deve essere un JSON valido": "Die Datei muss gültiges JSON sein", + "Il file generato si trova in": "Die generierte Datei befindet sich in", + "Il file generato si trova in public/sitemap.xml": "Die generierte Datei befindet sich unter public/sitemap.xml", + "Il file non sembra essere in formato LibraryThing. Colonne richieste: Book Id, Title, Primary Author, ISBNs": "Die Datei scheint nicht im LibraryThing-Format zu sein. Erforderliche Spalten: Book Id, Title, Primary Author, ISBNs", + "Il file supera la dimensione massima consentita": "Die Datei überschreitet die maximal zulässige Größe", + "Il file supera la dimensione massima di %s MB": "Die Datei überschreitet die maximale Größe von %s MB", + "Il formato scelto verrà utilizzato per generare i PDF delle etichette con codice a barre.": "Das gewählte Format wird zur Erstellung der Etiketten-PDFs mit Barcode verwendet.", + "Il formato selezionato verrà applicato a tutte le etichette generate dal sistema.": "Das ausgewählte Format wird auf alle vom System generierten Etiketten angewendet.", + "Il libro selezionato è già in prestito. Seleziona un altro libro.": "Das ausgewählte Buch ist bereits ausgeliehen. Wählen Sie ein anderes Buch aus.", + "Il libro viene consegnato subito all'utente. Se deselezionato, il prestito rimarrà in stato 'Da ritirare' fino alla conferma del ritiro.": "Das Buch wird dem Benutzer sofort übergeben. Wenn deaktiviert, bleibt die Ausleihe im Status 'Zur Abholung bereit', bis die Abholung bestätigt wird.", + "Il link di verifica email è scaduto o non valido. Registrati nuovamente per ricevere un nuovo link.": "Der E-Mail-Bestätigungslink ist abgelaufen oder ungültig. Bitte registrieren Sie sich erneut, um einen neuen Link zu erhalten.", + "Il link di verifica non è valido. Assicurati di aver copiato l'intero link dall'email.": "Der Bestätigungslink ist ungültig. Stellen Sie sicher, dass Sie den vollständigen Link aus der E-Mail kopiert haben.", + "Il logo verrà ridimensionato automaticamente": "Das Logo wird automatisch angepasst", + "Il mio profilo": "Mein Profil", + "Il nome del genere è obbligatorio.": "Der Genrename ist erforderlich.", + "Il nome dell'": "Der Name des/der", + "Il nome dell'API key è obbligatorio.": "Der Name des API-Schlüssels ist erforderlich.", + "Il nome dell'autore è obbligatorio.": "Der Autorenname ist erforderlich.", + "Il nome dell'editore è obbligatorio.": "Der Verlagsname ist erforderlich.", + "Il nome della rosa": "Der Name der Rose", + "Il nome inglese è obbligatorio": "Der englische Name ist erforderlich", + "Il nome inglese è obbligatorio (es. Italian, English)": "Der englische Name ist erforderlich (z.B. Italian, English)", + "Il nome nativo è obbligatorio": "Der Muttersprachenname ist erforderlich", + "Il nome nativo è obbligatorio (es. Italiano, English)": "Der Muttersprachenname ist erforderlich (z.B. Italiano, English)", + "Il nostro team è stato notificato e sta lavorando per risolvere il problema.": "Unser Team wurde benachrichtigt und arbeitet an der Lösung des Problems.", + "Il pacchetto contiene percorsi non validi.": "Das Paket enthält ungültige Pfade.", + "Il pacchetto non contiene file validi.": "Das Paket enthält keine gültigen Dateien.", + "Il plugin è attualmente installato e funzionante.": "Das Plugin ist derzeit installiert und funktioniert.", + "Il prestito è stato approvato con successo.": "Die Ausleihe wurde erfolgreich genehmigt.", + "Il prestito è stato rifiutato.": "Die Ausleihe wurde abgelehnt.", + "Il server ha restituito una risposta non valida. Controlla i log per dettagli.": "Der Server hat eine ungültige Antwort zurückgegeben. Überprüfen Sie die Protokolle für Details.", + "Il sistema creerà automaticamente libri, autori ed editori": "Das System erstellt automatisch Bücher, Autoren und Verlage", + "Il sistema di aggiornamento è pronto.": "Das Aktualisierungssystem ist bereit.", + "Il sistema include un cron job che gestisce automaticamente:": "Das System beinhaltet einen Cron-Job, der automatisch verwaltet:", + "Il sistema invierà automaticamente una email di promemoria agli utenti prima della scadenza del prestito. Il valore predefinito è 3 giorni.": "Das System sendet automatisch eine Erinnerungs-E-Mail an die Benutzer vor Ablauf der Ausleihe. Der Standardwert beträgt 3 Tage.", + "Il sito web deve essere un URL valido (es. https://www.esempio.com).": "Die Website muss eine gültige URL sein (z.B. https://www.beispiel.de).", + "Il sito web deve essere un URL valido.": "Die Website muss eine gültige URL sein.", + "Il termine per il ritiro è scaduto": "Die Abholfrist ist abgelaufen", + "Il termine per il ritiro è scaduto. Vuoi annullare questo prestito?": "Die Abholfrist ist abgelaufen. Möchten Sie diese Ausleihe stornieren?", + "Il titolo del libro è obbligatorio.": "Der Buchtitel ist erforderlich.", + "Il titolo principale della pagina": "Der Haupttitel der Seite", + "Il titolo verrà utilizzato anche per generare l'URL della pagina": "Der Titel wird auch zur Generierung der Seiten-URL verwendet", + "Il titolo è obbligatorio.": "Der Titel ist erforderlich.", + "Il tuo account è in attesa di approvazione. Riceverai un'email quando sarà attivato": "Ihr Konto wartet auf Freigabe. Sie erhalten eine E-Mail, wenn es aktiviert wird", + "Il tuo account è stato sospeso. Contatta l'amministratore per maggiori informazioni": "Ihr Konto wurde gesperrt. Wenden Sie sich an den Administrator für weitere Informationen", + "Il tuo browser non supporta la riproduzione audio.": "Ihr Browser unterstützt keine Audiowiedergabe.", + "Il tuo sistema Pinakes per catalogare, gestire e condividere la tua collezione libraria.": "Ihr Pinakes-System zum Katalogisieren, Verwalten und Teilen Ihrer Buchsammlung.", + "Illustratore": "Illustrator", + "Curatore": "Kurator", + "Nome del curatore dell'opera (se applicabile)": "Name des Kurators (falls zutreffend)", + "Immagine": "Bild", + "Immagine Caricata!": "Bild hochgeladen!", + "Immagine Open Graph": "Open-Graph-Bild", + "Immagine Twitter": "Twitter-Bild", + "Immagine attuale": "Aktuelles Bild", + "Immagine di copertina della pagina (opzionale)": "Seitentitelbild (optional)", + "Immagine di sfondo Hero": "Hero-Hintergrundbild", + "Immagine in Evidenza": "Hervorgehobenes Bild", + "Immagine mostrata quando condividi la pagina su social media (Facebook, Twitter, LinkedIn). Se vuoto, usa l'immagine hero di sfondo. Dimensioni consigliate: 1200x630px (rapporto 1.91:1).": "Bild, das beim Teilen der Seite in sozialen Medien angezeigt wird (Facebook, Twitter, LinkedIn). Wenn leer, wird das Hero-Hintergrundbild verwendet. Empfohlene Größe: 1200x630px (Verhältnis 1,91:1).", + "Immagine mostrata quando condividi su social. Dimensioni consigliate: 1200x630px (rapporto 1.91:1). Se vuoto, usa l'immagine hero di sfondo.": "Bild, das beim Teilen in sozialen Medien angezeigt wird. Empfohlene Größe: 1200x630px (Verhältnis 1,91:1). Wenn leer, wird das Hero-Hintergrundbild verwendet.", + "Immagine non valida": "Ungültiges Bild", + "Immagine per Twitter/X. Dimensioni consigliate: 1200x675px o 1200x1200px. Se vuoto, usa l'immagine Open Graph.": "Bild für Twitter/X. Empfohlene Abmessungen: 1200x675px oder 1200x1200px. Wenn leer, wird das Open Graph-Bild verwendet.", + "Immagini JPG, PNG o WebP (max 5MB)": "JPG-, PNG- oder WebP-Bilder (max. 5 MB)", + "Import": "Import", + "Import CSV": "CSV-Import", + "Import CSV Standard": "Standard-CSV-Import", + "Import LibraryThing": "LibraryThing-Import", + "Import Libri da CSV": "Bücher aus CSV importieren", + "Import Massivo Libri": "Massenbuchimport", + "Import completato: %d libri nuovi, %d libri aggiornati, %d autori creati, %d editori creati": "Import abgeschlossen: %d neue Bücher, %d aktualisierte Bücher, %d Autoren erstellt, %d Verlage erstellt", + "Import da LibraryThing": "Import aus LibraryThing", + "Import dati iniziali...": "Importiere Anfangsdaten...", + "Import in corso...": "Import läuft...", + "Import massivo da CSV": "Massenimport aus CSV", + "Import schema in corso...": "Schema wird importiert...", + "Import trigger...": "Trigger werden importiert...", + "Importa": "Importieren", + "Importa Dati": "Daten importieren", + "Importa Libri": "Bücher importieren", + "Importa da ISBN": "Aus ISBN importieren", + "Importa i tuoi libri esportati da LibraryThing.com (formato TSV)": "Importieren Sie Ihre von LibraryThing.com exportierten Bücher (TSV-Format)", + "Importante:": "Wichtig:", + "Importati": "Importiert", + "Importato": "Importiert", + "Importato con successo. %d voci totali.": "Erfolgreich importiert. %d Einträge insgesamt.", + "Importazione completata con successo!": "Import erfolgreich abgeschlossen!", + "Importazione in corso...": "Import läuft...", + "Importazione libro": "Buch wird importiert", + "Importazione...": "Importiere...", + "Impossibile acquisire il lock. Riprova tra qualche secondo.": "Sperre kann nicht erworben werden. Bitte versuchen Sie es in einigen Sekunden erneut.", + "Impossibile aggiornare l'utente. Riprova più tardi.": "Benutzer kann nicht aktualisiert werden. Bitte versuchen Sie es später erneut.", + "Impossibile aggiornare la chiave Google Books.": "Der Google-Books-Schlüssel konnte nicht aktualisiert werden.", + "Impossibile aggiornare la posizione automatica": "Die automatische Position konnte nicht aktualisiert werden", + "Impossibile aggiornare le copie.": "Die Exemplare konnten nicht aktualisiert werden.", + "Impossibile approvare la recensione": "Die Rezension konnte nicht genehmigt werden", + "Impossibile aprire file di backup per scrittura": "Backup-Datei konnte nicht zum Schreiben geöffnet werden", + "Impossibile aprire il file": "Datei kann nicht geöffnet werden", + "Impossibile aprire il file CSV": "Die CSV-Datei konnte nicht geöffnet werden", + "Impossibile aprire il file ZIP.": "Die ZIP-Datei konnte nicht geöffnet werden.", + "Impossibile archiviare il messaggio.": "Die Nachricht konnte nicht archiviert werden.", + "Impossibile caricare configurazione database": "Datenbankkonfiguration kann nicht geladen werden", + "Impossibile caricare gli editori. Controlla la console per i dettagli.": "Verlage konnten nicht geladen werden. Überprüfen Sie die Konsole für Details.", + "Impossibile caricare i libri. Controlla la console per i dettagli.": "Bücher konnten nicht geladen werden. Überprüfen Sie die Konsole für Details.", + "Impossibile completare l'operazione. Riprova più tardi.": "Der Vorgang konnte nicht abgeschlossen werden. Bitte versuchen Sie es später erneut.", + "Impossibile comunicare con il server. Riprova più tardi.": "Kommunikation mit dem Server nicht möglich. Bitte versuchen Sie es später erneut.", + "Impossibile configurare autocomplete: elementi mancanti": "Autovervollständigung konnte nicht konfiguriert werden: fehlende Elemente", + "Impossibile connettersi a GitHub": "Verbindung zu GitHub konnte nicht hergestellt werden", + "Impossibile contattare il servizio di scraping. Riprova più tardi.": "Der Scraping-Dienst konnte nicht kontaktiert werden. Bitte versuchen Sie es später erneut.", + "Impossibile creare directory di backup": "Backup-Verzeichnis konnte nicht erstellt werden", + "Impossibile creare directory di backup applicazione": "Anwendungs-Backup-Verzeichnis konnte nicht erstellt werden", + "Impossibile creare directory di backup: %s": "Backup-Verzeichnis konnte nicht erstellt werden: %s", + "Impossibile creare directory temporanea": "Temporäres Verzeichnis konnte nicht erstellt werden", + "Impossibile creare directory: %s": "Verzeichnis konnte nicht erstellt werden: %s", + "Impossibile creare il file .env. Verifica i permessi.": "Die .env-Datei konnte nicht erstellt werden. Überprüfen Sie die Berechtigungen.", + "Impossibile creare il file di lock per l'aggiornamento": "Aktualisierungs-Lock-Datei konnte nicht erstellt werden", + "Impossibile creare la cartella di upload.": "Das Upload-Verzeichnis konnte nicht erstellt werden.", + "Impossibile creare la directory del plugin.": "Das Plugin-Verzeichnis konnte nicht erstellt werden.", + "Impossibile creare la mensola. Riprova più tardi.": "Regal kann nicht erstellt werden. Bitte versuchen Sie es später erneut.", + "Impossibile creare la prenotazione": "Die Vormerkung konnte nicht erstellt werden", + "Impossibile creare la struttura del plugin.": "Die Plugin-Struktur konnte nicht erstellt werden.", + "Impossibile creare lo scaffale. Riprova più tardi.": "Schrank kann nicht erstellt werden. Bitte versuchen Sie es später erneut.", + "Impossibile creare lock file": "Lock-Datei konnte nicht erstellt werden", + "Impossibile determinare l'ID del plugin Open Library.": "Die ID des Open Library-Plugins konnte nicht ermittelt werden.", + "Impossibile eliminare il backup": "Backup konnte nicht gelöscht werden", + "Impossibile eliminare il file di manutenzione": "Die Wartungsdatei konnte nicht gelöscht werden", + "Impossibile eliminare il libro: ci sono prestiti o prenotazioni attive. Termina prima i prestiti/prenotazioni.": "Buch kann nicht gelöscht werden: Es gibt aktive Ausleihen oder Vormerkungen. Beenden Sie zuerst die Ausleihen/Vormerkungen.", + "Impossibile eliminare il messaggio.": "Die Nachricht konnte nicht gelöscht werden.", + "Impossibile eliminare l'autore: sono presenti libri associati.": "Der Autor kann nicht gelöscht werden: Es sind zugehörige Bücher vorhanden.", + "Impossibile eliminare l'editore: sono presenti libri associati.": "Der Verlag kann nicht gelöscht werden: Es sind zugehörige Bücher vorhanden.", + "Impossibile eliminare l'installer:": "Der Installer kann nicht gelöscht werden:", + "Impossibile eliminare l'installer: devi prima installare le dipendenze PHP con": "Der Installer kann nicht gelöscht werden: Sie müssen zuerst die PHP-Abhängigkeiten installieren mit", + "Impossibile eliminare la notifica.": "Die Benachrichtigung konnte nicht gelöscht werden.", + "Impossibile eliminare la recensione": "Rezension kann nicht gelöscht werden", + "Impossibile eliminare una copia attualmente in prestito.": "Ein derzeit ausgeliehenes Exemplar kann nicht gelöscht werden.", + "Impossibile eliminare: alcuni editori hanno libri associati": "Löschen nicht möglich: Einige Verlage haben zugeordnete Bücher", + "Impossibile eliminare: alcuni libri hanno prestiti attivi": "Löschen nicht möglich: Einige Bücher haben aktive Ausleihen", + "Impossibile eliminare: la mensola contiene libri": "Löschen nicht möglich: Das Regal enthält Bücher", + "Impossibile eliminare: lo scaffale contiene libri": "Löschen nicht möglich: Der Schrank enthält Bücher", + "Impossibile eliminare: lo scaffale contiene mensole": "Löschen nicht möglich: Der Schrank enthält Regale", + "Impossibile generare la risposta JSON.": "Die JSON-Antwort konnte nicht generiert werden.", + "Impossibile importare i dati per questo ISBN.": "Die Daten für diese ISBN konnten nicht importiert werden.", + "Impossibile inizializzare Uppy per i contenuti digitali.": "Uppy für digitale Inhalte konnte nicht initialisiert werden.", + "Impossibile inviare la recensione": "Die Rezension konnte nicht gesendet werden", + "Impossibile inviare la recensione.": "Die Rezension konnte nicht gesendet werden.", + "Impossibile leggere il file .env": ".env-Datei kann nicht gelesen werden", + "Impossibile leggere il file caricato": "Die hochgeladene Datei konnte nicht gelesen werden", + "Impossibile leggere il file di backup": "Backup-Datei konnte nicht gelesen werden", + "Impossibile leggere il file di log": "Protokolldatei kann nicht gelesen werden", + "Impossibile modificare una copia attualmente in prestito. Prima termina il prestito o imposta lo stato su \"Disponibile\" per chiuderlo automaticamente.": "Ein derzeit ausgeliehenes Exemplar kann nicht bearbeitet werden. Beenden Sie zuerst die Ausleihe oder setzen Sie den Status auf \"Verfügbar\", um sie automatisch zu schließen.", + "Impossibile notificare utente copia non disponibile": "Benutzer kann nicht über nicht verfügbares Exemplar benachrichtigt werden", + "Impossibile notificare utente: dati mancanti": "Benutzer kann nicht benachrichtigt werden: fehlende Daten", + "Impossibile processare l'immagine.": "Das Bild konnte nicht verarbeitet werden.", + "Impossibile recuperare i dati degli autori": "Die Autorendaten konnten nicht abgerufen werden", + "Impossibile recuperare i dati degli editori": "Die Verlagsdaten konnten nicht abgerufen werden", + "Impossibile recuperare informazioni sulla release": "Release-Informationen konnten nicht abgerufen werden", + "Impossibile revocare la sessione": "Sitzung kann nicht widerrufen werden", + "Impossibile riaprire il file ZIP": "ZIP-Datei kann nicht erneut geöffnet werden", + "Impossibile ricalcolare la disponibilità del libro.": "Buchverfügbarkeit kann nicht neu berechnet werden.", + "Impossibile ridurre le copie a %d. Ci sono %d copie non disponibili (in prestito, perse o danneggiate). Il numero minimo di copie totali è %d.": "Die Exemplare können nicht auf %d reduziert werden. Es gibt %d nicht verfügbare Exemplare (ausgeliehen, verloren oder beschädigt). Die Mindestanzahl der Gesamtexemplare beträgt %d.", + "Impossibile rifiutare la recensione": "Die Rezension konnte nicht abgelehnt werden", + "Impossibile rigenerare la sitemap: %s": "Die Sitemap konnte nicht regeneriert werden: %s", + "Impossibile salvare il file di aggiornamento": "Aktualisierungsdatei konnte nicht gespeichert werden", + "Impossibile salvare l'utente. Riprova più tardi.": "Der Benutzer konnte nicht gespeichert werden. Bitte versuchen Sie es später erneut.", + "Impossibile salvare le impostazioni.": "Einstellungen können nicht gespeichert werden.", + "Impossibile scaricare (libro senza ISBN):": "Download nicht möglich (Buch ohne ISBN):", + "Impossibile scrivere file di backup": "Backup-Datei konnte nicht geschrieben werden", + "Impossibile scrivere nel file .env": ".env-Datei kann nicht beschrieben werden", + "Impossibile segnare come letta la notifica.": "Die Benachrichtigung konnte nicht als gelesen markiert werden.", + "Impossibile segnare tutte le notifiche come lette.": "Alle Benachrichtigungen konnten nicht als gelesen markiert werden.", + "Impossibile segnare tutti i messaggi come letti.": "Alle Nachrichten konnten nicht als gelesen markiert werden.", + "Imposta come Predefinita": "Als Standard festlegen", + "Imposta come attiva o predefinita": "Als aktiv oder Standard festlegen", + "Imposta come lingua predefinita per nuovi utenti": "Als Standardsprache für neue Benutzer festlegen", + "Imposta il nome mostrato nel backend e il logo utilizzato nel layout.": "Legen Sie den im Backend angezeigten Namen und das im Layout verwendete Logo fest.", + "Imposta nel file .env: APP_CANONICAL_URL=%s": "In der .env-Datei setzen: APP_CANONICAL_URL=%s", + "Imposta password": "Passwort festlegen", + "Impostare questa lingua come predefinita?\n\nQuesta diventerà la lingua dell'intera applicazione per tutti gli utenti.": "Diese Sprache als Standard festlegen?\n\nDiese wird zur Sprache der gesamten Anwendung für alle Benutzer.", + "Impostare questa lingua come predefinita?\\n\\nQuesta diventerà la lingua dell'intera applicazione per tutti gli utenti.": "Diese Sprache als Standard festlegen?\\n\\nDiese wird zur Sprache der gesamten Anwendung für alle Benutzer.", + "Impostazioni": "Einstellungen", + "Impostazioni API Book Scraper salvate correttamente.": "Book Scraper API-Einstellungen erfolgreich gespeichert.", + "Impostazioni Applicazione": "Anwendungseinstellungen", + "Impostazioni Date": "Datumseinstellungen", + "Impostazioni Discogs salvate correttamente.": "Discogs-Einstellungen erfolgreich gespeichert.", + "Impostazioni SEO": "SEO-Einstellungen", + "Impostazioni Z39.50 salvate correttamente.": "Z39.50-Einstellungen erfolgreich gespeichert.", + "Impostazioni avanzate aggiornate correttamente.": "Erweiterte Einstellungen erfolgreich aktualisiert.", + "Impostazioni contatti aggiornate correttamente.": "Kontakteinstellungen erfolgreich aktualisiert.", + "Impostazioni email aggiornate correttamente.": "E-Mail-Einstellungen erfolgreich aktualisiert.", + "Impostazioni generali aggiornate correttamente.": "Allgemeine Einstellungen erfolgreich aktualisiert.", + "Impostazioni privacy aggiornate correttamente.": "Datenschutzeinstellungen erfolgreich aktualisiert.", + "Impostazioni salvate.": "Einstellungen gespeichert.", + "In Attesa": "Ausstehend", + "In Attesa di Approvazione": "Genehmigung ausstehend", + "In Corso": "In Bearbeitung", + "In Riparazione": "In Reparatur", + "In Ritardo": "Überfällig", + "In attesa": "Ausstehend", + "In attesa di approvazione": "Genehmigung ausstehend", + "In corso": "In Bearbeitung", + "In corso di restituzione": "Rückgabe ausstehend", + "In corso...": "In Bearbeitung...", + "In manutenzione": "In Wartung", + "In prestito": "Ausgeliehen", + "In prestito fino al": "Ausgeliehen bis", + "In questa pagina trovi tutti gli eventi, gli incontri e i laboratori organizzati dalla biblioteca.": "Auf dieser Seite finden Sie alle Veranstaltungen, Treffen und Workshops, die von der Bibliothek organisiert werden.", + "In ritardo": "Überfällig", + "In scadenza": "Bald fällig", + "Inattivo": "Inaktiv", + "Incompleto": "Unvollständig", + "Indice %s creato su %s": "Index %s erstellt auf %s", + "Indice ISBN": "ISBN-Index", + "Indici creati con successo": "Indizes erfolgreich erstellt", + "Indici creati:": "Erstellte Indizes:", + "Indici di ottimizzazione creati OK": "Optimierungsindizes erfolgreich erstellt", + "Indietro": "Zurück", + "Indirizzo": "Adresse", + "Indirizzo completo": "Vollständige Adresse", + "Indirizzo completo *": "Vollständige Adresse *", + "Indirizzo:": "Adresse:", + "Info": "Info", + "Info HSTS:": "HSTS-Info:", + "Informazione": "Information", + "Informazioni": "Informationen", + "Informazioni Base": "Basisinformationen", + "Informazioni Evento": "Veranstaltungsinformationen", + "Informazioni Importanti": "Wichtige Informationen", + "Informazioni Libro": "Buchinformationen", + "Informazioni Personali": "Persönliche Informationen", + "Informazioni Prestito": "Ausleihinformationen", + "Informazioni Report": "Berichtsinformationen", + "Informazioni di Contatto": "Kontaktinformationen", + "Informazioni di contatto": "Kontaktinformationen", + "Informazioni editore": "Verlagsinformationen", + "Informazioni generali": "Allgemeine Informationen", + "Informazioni personali": "Persönliche Informationen", + "Informazioni sullo Storico Import": "Informationen zur Importhistorie", + "Informazioni tessera": "Ausweisinformationen", + "Informazioni utili per il personale": "Nützliche Informationen für das Personal", + "Inizia Installazione": "Installation starten", + "Inizia ad aggiungere libri al catalogo": "Beginnen Sie, Bücher zum Katalog hinzuzufügen", + "Inizia aggiungendo il primo libro alla collezione": "Beginnen Sie, indem Sie das erste Buch zur Sammlung hinzufügen", + "Inizia aggiungendo la prima lingua.": "Beginnen Sie, indem Sie die erste Sprache hinzufügen.", + "Inizia caricando il tuo primo plugin": "Beginnen Sie, indem Sie Ihr erstes Plugin hochladen", + "Inizia creando il primo genere letterario": "Beginnen Sie, indem Sie das erste literarische Genre erstellen", + "Inizia la Tua Avventura Letteraria": "Starten Sie Ihr literarisches Abenteuer", + "Inizializzazione...": "Initialisierung...", + "Inizio": "Beginn", + "Inizio installazione...": "Installation wird gestartet...", + "Inizio:": "Beginn:", + "Inserimento Manuale Dewey": "Manuelle Dewey-Eingabe", + "Inserisci $1": "$1 eingeben", + "Inserisci codice locale (es. es_ES per Spagnolo)": "Gebietsschema-Code eingeben (z.B. es_ES für Spanisch)", + "Inserisci il codice Dewey completo (supporta fino a 4 decimali)": "Geben Sie den vollständigen Dewey-Code ein (unterstützt bis zu 4 Dezimalstellen)", + "Inserisci il motivo del rifiuto...": "Geben Sie den Ablehnungsgrund ein...", + "Inserisci il titolo": "Titel eingeben", + "Inserisci la data di inizio (YYYY-MM-DD)": "Startdatum eingeben (JJJJ-MM-TT)", + "Inserisci la tua email per ricevere il link di reset.": "Geben Sie Ihre E-Mail-Adresse ein, um den Link zum Zurücksetzen zu erhalten.", + "Inserisci la tua email per ricevere un link di reset": "Geben Sie Ihre E-Mail-Adresse ein, um einen Link zum Zurücksetzen zu erhalten", + "Inserisci la tua nuova password": "Geben Sie Ihr neues Passwort ein", + "Inserisci le credenziali del tuo database MySQL. Assicurati che il database sia già stato creato e sia vuoto.": "Geben Sie Ihre MySQL-Datenbank-Zugangsdaten ein. Stellen Sie sicher, dass die Datenbank bereits erstellt wurde und leer ist.", + "Inserisci le informazioni del nuovo evento": "Geben Sie die Informationen für die neue Veranstaltung ein", + "Inserisci parole chiave separate da virgole per facilitare la ricerca": "Geben Sie durch Kommas getrennte Schlüsselwörter ein, um die Suche zu erleichtern", + "Inserisci qualsiasi codice Dewey (anche se non presente nell'elenco)": "Geben Sie einen beliebigen Dewey-Code ein (auch wenn er nicht in der Liste enthalten ist)", + "Inserisci solo script che NON tracciano utenti. Per analytics/marketing usa le sezioni dedicate.": "Fügen Sie nur Skripte ein, die Benutzer NICHT verfolgen. Für Analytics/Marketing verwenden Sie die entsprechenden Bereiche.", + "Inserisci un codice Dewey": "Geben Sie einen Dewey-Code ein", + "Inserisci un codice ISBN per continuare.": "Geben Sie einen ISBN-Code ein, um fortzufahren.", + "Inserisci un numero valido di copie": "Geben Sie eine gültige Anzahl von Exemplaren ein", + "Inserisci una breve biografia dell'autore...": "Geben Sie eine kurze Biografie des Autors ein...", + "Instagram": "Instagram", + "Installa": "Installieren", + "Installa Plugin": "Plugin installieren", + "Installato": "Installiert", + "Installato:": "Installiert:", + "Installazione": "Installation", + "Installazione Completata": "Installation abgeschlossen", + "Installazione Completata!": "Installation abgeschlossen!", + "Installazione Cron Job": "Cron-Job-Installation", + "Installazione Database": "Datenbankinstallation", + "Installazione Guidata": "Geführte Installation", + "Installazione completata": "Installation abgeschlossen", + "Installazione database non completa. Tabelle mancanti: %s": "Datenbankinstallation unvollständig. Fehlende Tabellen: %s", + "Installazione database non completa. Trovate %d tabelle, attese %d": "Datenbankinstallation unvollständig. %d Tabellen gefunden, %d erwartet", + "Installazione delle tabelle del database e configurazione iniziale...": "Datenbanktabellen und Erstkonfiguration werden installiert...", + "Installazione fallita": "Installation fehlgeschlagen", + "Installazione file": "Dateien werden installiert", + "Installazione in corso...": "Installation läuft...", + "Installazione italiana usa": "Italienische Installation verwendet", + "Installazione plugin Open Library...": "Open Library Plugin wird installiert...", + "Installer Pinakes": "Pinakes Installer", + "Installer eliminato con successo!": "Installer erfolgreich gelöscht!", + "Insufficiente": "Unzureichend", + "Integrità dati": "Datenintegrität", + "Internal server error": "Interner Serverfehler", + "Intestazione": "Kopfzeile", + "Intestazione sezione": "Abschnittsüberschrift", + "Inventario": "Inventar", + "Invia Email": "E-Mail senden", + "Invia Richiesta": "Anfrage senden", + "Invia link": "Link senden", + "Invia link di reset": "Zurücksetzungslink senden", + "Invia messaggio": "Nachricht senden", + "Invia recensione": "Rezension einreichen", + "Inviaci un messaggio": "Senden Sie uns eine Nachricht", + "Inviata agli amministratori quando viene ricevuta una nuova recensione da approvare.": "Wird an Administratoren gesendet, wenn eine neue Rezension zur Genehmigung eingeht.", + "Inviata agli utenti quando un libro nella wishlist torna disponibile. Il libro rimane nella wishlist ma non riceverà altre notifiche per lo stesso libro.": "Wird an Benutzer gesendet, wenn ein Buch auf ihrer Wunschliste wieder verfügbar wird. Das Buch bleibt auf der Wunschliste, es werden jedoch keine weiteren Benachrichtigungen für dasselbe Buch gesendet.", + "Inviata agli utenti quando un libro nella wishlist torna disponibile. Il libro viene automaticamente rimosso dalla wishlist dopo l'invio della notifica per evitare duplicati.": "Wird an Benutzer gesendet, wenn ein Buch auf ihrer Wunschliste wieder verfügbar wird. Das Buch wird nach dem Versand der Benachrichtigung automatisch von der Wunschliste entfernt, um Duplikate zu vermeiden.", + "Inviata ai nuovi utenti per impostare la password del loro account.": "Wird an neue Benutzer gesendet, um das Passwort für ihr Konto festzulegen.", + "Inviata all'utente al termine della registrazione per confermare la ricezione e l'attesa di approvazione.": "Wird nach der Registrierung an den Benutzer gesendet, um den Eingang zu bestätigen und auf die Genehmigung hinzuweisen.", + "Inviata all'utente quando un amministratore approva l'account.": "Wird an den Benutzer gesendet, wenn ein Administrator das Konto genehmigt.", + "Inviata all'utente quando un amministratore approva una richiesta di prestito.": "Wird an den Benutzer gesendet, wenn ein Administrator eine Ausleihanfrage genehmigt.", + "Inviata all'utente quando un amministratore rifiuta una richiesta di prestito.": "Wird an den Benutzer gesendet, wenn ein Administrator eine Ausleihanfrage ablehnt.", + "Inviata quando il tempo per ritirare un libro è scaduto e il prestito è stato annullato.": "Wird gesendet, wenn die Abholfrist abgelaufen ist und die Ausleihe storniert wurde.", + "Inviata quando un libro prenotato diventa disponibile e viene convertito in prestito pendente.": "Wird gesendet, wenn ein vorgemerktes Buch verfügbar wird und in eine ausstehende Ausleihe umgewandelt wird.", + "Inviata quando un prestito è stato approvato e il libro è pronto per il ritiro.": "Wird gesendet, wenn eine Ausleihe genehmigt wurde und das Buch zur Abholung bereit ist.", + "Inviata quando un ritiro viene annullato dall'amministratore.": "Wird gesendet, wenn eine Abholung vom Administrator storniert wird.", + "Inviata quando un utente viene invitato come amministratore.": "Wird gesendet, wenn ein Benutzer als Administrator eingeladen wird.", + "Inviato": "Gesendet", + "Invio in corso...": "Wird gesendet...", + "Invio notifica prenotazione fallito": "Senden der Vormerkungsbenachrichtigung fehlgeschlagen", + "Invita gli utenti a registrarsi": "Benutzer zur Registrierung einladen", + "Invito amministratore": "Administratoreinladung", + "Italiano (IT)": "Italienisch (IT)", + "JPG, PNG, GIF, WEBP - Max 5MB": "JPG, PNG, GIF, WEBP – Max. 5 MB", + "JSON non valido.": "Ungültiges JSON.", + "JavaScript Analitici": "Analyse-JavaScript", + "JavaScript Essenziali": "Essentielles JavaScript", + "JavaScript Marketing": "Marketing-JavaScript", + "L'API key può essere fornita in due modi:": "Der API-Schlüssel kann auf zwei Arten bereitgestellt werden:", + "L'API è limitata a 50 risultati per richiesta": "Die API ist auf 50 Ergebnisse pro Anfrage begrenzt", + "L'ID primario deve essere presente nella lista degli autori da unire": "Die primäre ID muss in der Liste der zusammenzuführenden Autoren vorhanden sein", + "L'ID primario deve essere presente nella lista degli editori da unire": "Die primäre ID muss in der Liste der zusammenzuführenden Verlage vorhanden sein", + "L'URL canonico non è valido. Deve iniziare con http:// o https://": "Die kanonische URL ist ungültig. Sie muss mit http:// oder https:// beginnen", + "L'URL del calendario è stato copiato negli appunti.": "Die Kalender-URL wurde in die Zwischenablage kopiert.", + "L'URL fornito non è valido": "Die angegebene URL ist ungültig", + "L'accesso alla cartella installer è automaticamente bloccato dopo l'installazione.": "Der Zugriff auf den Installer-Ordner wird nach der Installation automatisch gesperrt.", + "L'applicazione NON può funzionare senza questo passaggio!": "Die Anwendung kann NICHT ohne diesen Schritt funktionieren!", + "L'applicazione risulta correttamente configurata.": "Die Anwendung ist korrekt konfiguriert.", + "L'applicazione è stata installata correttamente e tutte le verifiche sono andate a buon fine.": "Die Anwendung wurde erfolgreich installiert und alle Prüfungen wurden bestanden.", + "L'email di attivazione è stata inviata. L'utente potrà verificare il proprio account cliccando il link ricevuto (valido 7 giorni).": "Die Aktivierungs-E-Mail wurde gesendet. Der Benutzer kann sein Konto durch Klicken auf den erhaltenen Link verifizieren (7 Tage gültig).", + "L'immagine verrà scaricata al salvataggio": "Das Bild wird beim Speichern heruntergeladen", + "L'immagine è troppo grande. Max 5MB.": "Das Bild ist zu groß. Max. 5 MB.", + "L'indirizzo email deve essere valido.": "Die E-Mail-Adresse muss gültig sein.", + "L'installazione non è completa o valida.": "Die Installation ist nicht vollständig oder gültig.", + "L'installazione è stata completata correttamente e tutte le verifiche sono andate a buon fine.": "Die Installation wurde erfolgreich abgeschlossen und alle Überprüfungen waren erfolgreich.", + "L'installazione è stata completata senza errori.": "Die Installation wurde fehlerfrei abgeschlossen.", + "L'ora dell'evento deve essere nel formato corretto (HH:MM).": "Die Uhrzeit des Ereignisses muss im korrekten Format vorliegen (HH:MM).", + "L'ora deve essere nel formato corretto (HH:MM).": "Die Uhrzeit muss im korrekten Format vorliegen (HH:MM).", + "L'ultima sezione che invita all'azione": "Der abschließende Call-to-Action-Bereich", + "L'utente del database non ha i permessi per creare i TRIGGER. L'installazione è stata completata, ma per garantire la piena integrità dei dati è necessario installarli manualmente.": "Der Datenbankbenutzer hat keine Berechtigung zum Erstellen von TRIGGERN. Die Installation wurde abgeschlossen, aber um die vollständige Datenintegrität zu gewährleisten, müssen diese manuell installiert werden.", + "L'utente ha ritirato il libro?": "Hat der Benutzer das Buch abgeholt?", + "L'utente non è in stato sospeso. Solo gli utenti sospesi richiedono approvazione.": "Der Benutzer befindet sich nicht im gesperrten Status. Nur gesperrte Benutzer erfordern eine Genehmigung.", + "L'utente riceverà un'email con link di verifica (valido 7 giorni) e potrà attivare autonomamente l'account.": "Der Benutzer erhält eine E-Mail mit Bestätigungslink (7 Tage gültig) und kann das Konto selbstständig aktivieren.", + "L'utente riceverà una notifica via email della prenotazione creata": "Der Benutzer erhält eine E-Mail-Benachrichtigung über die erstellte Vormerkung", + "L'utente richiesto non esiste nel database.": "Der angeforderte Benutzer existiert nicht in der Datenbank.", + "L'utente sarà attivato immediatamente e riceverà un'email di benvenuto. Potrà accedere subito.": "Der Benutzer wird sofort aktiviert und erhält eine Willkommens-E-Mail. Er kann sich sofort anmelden.", + "L'utente è stato attivato e può già effettuare il login. È stata inviata un'email di benvenuto.": "Der Benutzer wurde aktiviert und kann sich bereits anmelden. Eine Willkommens-E-Mail wurde gesendet.", + "L'utente è stato eliminato.": "Der Benutzer wurde gelöscht.", + "La Tua Biblioteca Digitale": "Ihre digitale Bibliothek", + "La cartella vendor/ esiste e contiene le librerie necessarie.": "Der Ordner vendor/ existiert und enthält die erforderlichen Bibliotheken.", + "La classificazione Dewey è utilizzata per organizzare i libri per argomento secondo standard internazionali": "Die Dewey-Klassifikation wird verwendet, um Bücher nach Thema gemäß internationalen Standards zu organisieren", + "La collocazione può essere assegnata automaticamente o inserita manualmente durante la creazione/modifica del libro": "Der Standort kann automatisch zugewiesen oder bei der Erstellung/Bearbeitung des Buches manuell eingegeben werden", + "La collocazione è l'indirizzo fisico che identifica dove si trova un libro nella biblioteca.": "Der Standort ist die physische Adresse, die angibt, wo sich ein Buch in der Bibliothek befindet.", + "La copertina verrà rimossa al salvataggio del libro": "Das Cover wird beim Speichern des Buches entfernt", + "La copia assegnata è stata segnalata come persa o danneggiata": "Das zugewiesene Exemplar wurde als verloren oder beschädigt gemeldet", + "La copia non è più disponibile": "Das Exemplar ist nicht mehr verfügbar", + "La cronologia degli aggiornamenti apparirà qui": "Der Aktualisierungsverlauf wird hier angezeigt", + "La data dell'evento è obbligatoria e deve essere nel formato corretto.": "Das Veranstaltungsdatum ist erforderlich und muss im korrekten Format vorliegen.", + "La data dell'evento è obbligatoria.": "Das Veranstaltungsdatum ist erforderlich.", + "La data di nascita deve essere precedente alla data di morte.": "Das Geburtsdatum muss vor dem Sterbedatum liegen.", + "La data non può essere nel passato.": "Das Datum darf nicht in der Vergangenheit liegen.", + "La lingua contrassegnata come 'Predefinita' verrà usata in tutta l'applicazione per tutti gli utenti. Per cambiare la lingua dell'intera app, clicca sull'icona stella": "Die als 'Standard' markierte Sprache wird in der gesamten Anwendung für alle Benutzer verwendet. Um die Sprache der gesamten App zu ändern, klicken Sie auf das Stern-Symbol", + "La mia bacheca": "Mein Dashboard", + "La modalità manutenzione non era attiva": "Der Wartungsmodus war nicht aktiv", + "La pagina che stai cercando non esiste o è stata spostata.": "Die Seite, die Sie suchen, existiert nicht oder wurde verschoben.", + "La pagina che stai cercando non esiste.": "Die von Ihnen gesuchte Seite existiert nicht.", + "La password deve contenere almeno 8 caratteri, lettere maiuscole, minuscole e numeri": "Das Passwort muss mindestens 8 Zeichen mit Groß- und Kleinbuchstaben sowie Zahlen enthalten", + "La password deve contenere almeno una lettera maiuscola, una minuscola e un numero": "Das Passwort muss mindestens einen Großbuchstaben, einen Kleinbuchstaben und eine Zahl enthalten", + "La password deve contenere almeno una lettera maiuscola, una minuscola e un numero.": "Das Passwort muss mindestens einen Großbuchstaben, einen Kleinbuchstaben und eine Zahl enthalten.", + "La password deve contenere maiuscole, minuscole e numeri.": "Das Passwort muss Großbuchstaben, Kleinbuchstaben und Zahlen enthalten.", + "La password deve essere lunga almeno 8 caratteri": "Das Passwort muss mindestens 8 Zeichen lang sein", + "La password deve essere lunga almeno 8 caratteri!": "Das Passwort muss mindestens 8 Zeichen lang sein!", + "La password deve essere lunga almeno 8 caratteri.": "Das Passwort muss mindestens 8 Zeichen lang sein.", + "La password non può superare i 72 caratteri.": "Das Passwort darf nicht länger als 72 Zeichen sein.", + "La password attuale non è corretta.": "Das aktuelle Passwort ist falsch.", + "La posizione fisica è indipendente dalla classificazione Dewey e indica dove si trova il libro sugli scaffali.": "Die physische Position ist unabhängig von der Dewey-Klassifikation und gibt an, wo sich das Buch in den Regalen befindet.", + "La posizione in coda sarà calcolata automaticamente in base alle prenotazioni esistenti": "Die Warteschlangenposition wird automatisch anhand der bestehenden Vormerkungen berechnet", + "La posizione viene assegnata automaticamente": "Die Position wird automatisch zugewiesen", + "La prenotazione è scaduta": "Die Vormerkung ist abgelaufen", + "La recensione è stata approvata e pubblicata con successo.": "Die Rezension wurde erfolgreich genehmigt und veröffentlicht.", + "La recensione è stata eliminata definitivamente.": "Die Rezension wurde endgültig gelöscht.", + "La recensione è stata rifiutata e non sarà pubblicata.": "Die Rezension wurde abgelehnt und wird nicht veröffentlicht.", + "La richiesta ha impiegato troppo tempo. Riprova.": "Die Anfrage hat zu lange gedauert. Bitte versuchen Sie es erneut.", + "La risposta include tutti i dati del libro:": "Die Antwort enthält alle Buchdaten:", + "La scadenza verrà estesa di 14 giorni": "Die Frist wird um 14 Tage verlängert", + "La sessione è scaduta. Aggiorna la pagina e riprova.": "Die Sitzung ist abgelaufen. Aktualisieren Sie die Seite und versuchen Sie es erneut.", + "La sezione principale che appare per prima sulla home": "Der Hauptbereich, der als Erstes auf der Startseite erscheint", + "La sitemap viene aggiornata automaticamente quando premi il pulsante oppure tramite lo script CLI": "Die Sitemap wird automatisch aktualisiert, wenn Sie die Schaltfläche drücken oder über das CLI-Skript", + "La sitemap viene aggiornata automaticamente quando premi il pulsante oppure tramite lo script CLI php scripts/generate-sitemap.php. Usa questa azione dopo aver importato un grande numero di libri o modifiche ai contenuti CMS.": "Die Sitemap wird automatisch aktualisiert, wenn Sie die Schaltfläche drücken oder über das CLI-Skript php scripts/generate-sitemap.php. Verwenden Sie diese Aktion nach dem Import vieler Bücher oder Änderungen an CMS-Inhalten.", + "La tua biblioteca digitale...": "Ihre digitale Bibliothek...", + "La tua prenotazione per \"%s\" è stata messa in attesa. %s. Verrai notificato quando sarà disponibile una nuova copia.": "Ihre Vormerkung für \"%s\" wurde in die Warteschlange gestellt. %s. Sie werden benachrichtigt, wenn ein neues Exemplar verfügbar ist.", + "La tua richiesta di prestito è stata inviata. Riceverai una notifica quando verrà approvata.": "Ihre Ausleihanfrage wurde gesendet. Sie erhalten eine Benachrichtigung, wenn sie genehmigt wird.", + "La tua sessione è scaduta. Per motivi di sicurezza, effettua nuovamente l'accesso": "Ihre Sitzung ist abgelaufen. Bitte melden Sie sich aus Sicherheitsgründen erneut an", + "La tua sessione è scaduta. Per motivi di sicurezza, ricarica la pagina e riprova": "Ihre Sitzung ist abgelaufen. Bitte laden Sie aus Sicherheitsgründen die Seite neu und versuchen Sie es erneut", + "La tua sessione è scaduta. Per motivi di sicurezza, ricarica la pagina ed effettua nuovamente l'accesso.": "Ihre Sitzung ist abgelaufen. Bitte laden Sie aus Sicherheitsgründen die Seite neu und melden Sie sich erneut an.", + "La tua wishlist è vuota": "Ihre Wunschliste ist leer", + "La versione %s è disponibile. Prima di aggiornare, verrà creato un backup automatico del database.": "Version %s ist verfügbar. Vor der Aktualisierung wird automatisch ein Datenbank-Backup erstellt.", + "Lascia una recensione": "Rezension schreiben", + "Lascia vuoto o usa \"Genera\" per assegnare automaticamente la prossima posizione disponibile.": "Leer lassen oder \"Generieren\" verwenden, um automatisch die nächste verfügbare Position zuzuweisen.", + "Lascia vuoto o usa \\": "Leer lassen oder \\ verwenden", + "Lascia vuoto per 1 mese": "Leer lassen für 1 Monat", + "Lascia vuoto per auto-rilevamento. Necessario solo su macOS/Linux con socket personalizzati.": "Leer lassen für automatische Erkennung. Nur auf macOS/Linux mit benutzerdefinierten Sockets erforderlich.", + "Lascia vuoto per generare automaticamente": "Leer lassen, um automatisch zu generieren", + "Lascia vuoto per inviare un link di impostazione": "Leer lassen, um einen Einrichtungslink zu senden", + "Lascia vuoto per mantenere il nome attuale": "Leer lassen, um den aktuellen Namen beizubehalten", + "Lascia vuoto per mantenere la chiave esistente. Inserisci un nuovo valore per aggiornarla.": "Leer lassen, um den bestehenden Schlüssel beizubehalten. Geben Sie einen neuen Wert ein, um ihn zu aktualisieren.", + "Lascia vuoto per nascondere il social dal footer": "Leer lassen, um das soziale Netzwerk in der Fußzeile auszublenden", + "Lascia vuoto per nascondere il titolo": "Leer lassen, um den Titel auszublenden", + "Lascia vuoto per non modificare": "Leer lassen, um nicht zu ändern", + "Lascia vuoto se l'autore è vivente": "Leer lassen, wenn der Autor noch lebt", + "Le API key disattivate restituiranno errore 401": "Deaktivierte API-Schlüssel geben Fehler 401 zurück", + "Le Mie Prenotazioni": "Meine Vormerkungen", + "Le Mie Recensioni": "Meine Rezensionen", + "Le copie disponibili vengono calcolate automaticamente": "Verfügbare Exemplare werden automatisch berechnet", + "Le date rosse non sono disponibili. La richiesta verrà valutata da un amministratore.": "Rot markierte Daten sind nicht verfügbar. Ihre Anfrage wird von einem Administrator geprüft.", + "Le date rosse o arancioni non sono disponibili. La richiesta verrà valutata da un amministratore.": "Rote oder orangefarbene Daten sind nicht verfügbar. Die Anfrage wird von einem Administrator geprüft.", + "Le mie prenotazioni": "Meine Vormerkungen", + "Le password non coincidono": "Die Passwörter stimmen nicht überein", + "Le password non coincidono!": "Die Passwörter stimmen nicht überein!", + "Le password non coincidono.": "Die Passwörter stimmen nicht überein.", + "Le password non corrispondono": "Die Passwörter stimmen nicht überein", + "Le posizioni si generano automaticamente": "Positionen werden automatisch generiert", + "Le route non possono contenere spazi": "Routen dürfen keine Leerzeichen enthalten", + "Le route sono gli URL usati nell'applicazione. Traducendole, puoi avere URL in italiano o inglese in base alla lingua dell'installazione.": "Routen sind die URLs, die in der Anwendung verwendet werden. Durch Übersetzung können Sie URLs je nach Installationssprache auf Italienisch oder Englisch haben.", + "Le sessioni scadono automaticamente per proteggere i tuoi dati.": "Sitzungen laufen automatisch ab, um Ihre Daten zu schützen.", + "Le tue recensioni": "Ihre Rezensionen", + "Letta": "Gelesen", + "Letto": "Gelesen", + "Lettore": "Leser", + "Libero": "Frei", + "Library Management System": "Bibliotheksverwaltungssystem", + "LibraryThing TSV": "LibraryThing TSV", + "Librerie di upload non caricate. Ricarica la pagina.": "Upload-Bibliotheken nicht geladen. Bitte laden Sie die Seite neu.", + "Libri": "Bücher", + "Libri Disponibili": "Verfügbare Bücher", + "Libri Importati": "Importierte Bücher", + "Libri Prestati": "Ausgeliehene Bücher", + "Libri Totali": "Bücher gesamt", + "Libri attualmente in prestito": "Derzeit ausgeliehene Bücher", + "Libri per Collocazione": "Bücher nach Standort", + "Libri prenotati dagli utenti": "Von Benutzern vorgemerkte Bücher", + "Libro": "Buch", + "Libro '%s' (ID: %d) ha copie disponibili negative: %d": "Buch '%s' (ID: %d) hat negative verfügbare Exemplare: %d", + "Libro '%s' (ID: %d) ha più copie disponibili (%d) che totali (%d)": "Buch '%s' (ID: %d) hat mehr verfügbare Exemplare (%d) als Gesamtexemplare (%d)", + "Libro '%s' (ID: %d) ha stato '%s' ma copie disponibili: %d": "Buch '%s' (ID: %d) hat Status '%s', aber verfügbare Exemplare: %d", + "Libro Esistente:": "Vorhandenes Buch:", + "Libro Già Esistente": "Buch bereits vorhanden", + "Libro ID %d ha posizioni coda non sequenziali: %s": "Buch ID %d hat nicht-sequenzielle Warteschlangenpositionen: %s", + "Libro aggiornato con successo!": "Buch erfolgreich aktualisiert!", + "Libro aggiunto con successo!": "Buch erfolgreich hinzugefügt!", + "Libro da prenotare": "Vorzumerkendes Buch", + "Libro disponibile per la prenotazione": "Buch zur Vormerkung verfügbar", + "Libro e utente sono campi obbligatori.": "Buch und Benutzer sind Pflichtfelder.", + "Libro non disponibile": "Buch nicht verfügbar", + "Libro non trovato": "Buch nicht gefunden", + "Libro non trovato nel database Open Library": "Buch nicht in der Open Library-Datenbank gefunden", + "Libro non trovato su Open Library.": "Buch nicht auf Open Library gefunden.", + "Libro non trovato.": "Buch nicht gefunden.", + "Libro prenotato disponibile": "Vorgemerktes Buch verfügbar", + "Libro senza titolo": "Buch ohne Titel", + "Libro:": "Buch:", + "Licenza": "Lizenz", + "Limite massimo rinnovi raggiunto": "Maximale Anzahl an Verlängerungen erreicht", + "Limiti: massimo 50 libri con scraping attivo, timeout 5 minuti": "Grenzen: maximal 50 Bücher mit aktivem Scraping, Timeout 5 Minuten", + "Lingua": "Sprache", + "Lingua App": "App-Sprache", + "Lingua Attiva": "Aktive Sprache", + "Lingua Predefinita": "Standardsprache", + "Lingua Predefinita:": "Standardsprache:", + "Lingua aggiornata con successo": "Sprache erfolgreich aktualisiert", + "Lingua creata con successo": "Sprache erfolgreich erstellt", + "Lingua eliminata con successo": "Sprache erfolgreich gelöscht", + "Lingua non supportata": "Nicht unterstützte Sprache", + "Lingua non trovata": "Sprache nicht gefunden", + "Lingua originale del libro": "Originalsprache des Buches", + "Lingua predefinita impostata con successo": "Standardsprache erfolgreich festgelegt", + "Lingue": "Sprachen", + "Lingue Configurate": "Konfigurierte Sprachen", + "Lingue valide": "Gültige Sprachen", + "Link": "Link", + "Link Cookie Statement": "Link zur Cookie-Erklärung", + "Link Cookie Technologies": "Link zu Cookie-Technologien", + "Link Social Media": "Social-Media-Links", + "Link al file digitale (se disponibile)": "Link zur digitalen Datei (falls verfügbar)", + "Link all'audiolibro (se disponibile)": "Link zum Hörbuch (falls verfügbar)", + "Link copiato!": "Link kopiert!", + "Link di esempio": "Beispiel-Link", + "Link di reset non valido o scaduto": "Zurücksetzungslink ungültig oder abgelaufen", + "Link pulsante": "Schaltflächen-Link", + "LinkedIn": "LinkedIn", + "Lista": "Liste", + "Livello": "Ebene", + "Livello ${m.numero_livello}": "Ebene ${m.numero_livello}", + "Livello *": "Ebene *", + "Livello 1 (Classi)": "Ebene 1 (Klassen)", + "Livello 2 (Divisioni)": "Ebene 2 (Abteilungen)", + "Livello 3 (Specifiche)": "Ebene 3 (Spezifika)", + "Livello principale (es. Prosa, Poesia, Teatro)": "Hauptebene (z. B. Prosa, Lyrik, Theater)", + "Lo script CLI utilizza il valore di APP_CANONICAL_URL. Assicurati che sia configurato correttamente per evitare URL duplicati.": "Das CLI-Skript verwendet den Wert von APP_CANONICAL_URL. Stellen Sie sicher, dass dieser korrekt konfiguriert ist, um doppelte URLs zu vermeiden.", + "Lo stato della prenotazione sarà impostato automaticamente come \"attiva\"": "Der Status der Vormerkung wird automatisch auf \"aktiv\" gesetzt", + "Lo stato della prenotazione sarà impostato automaticamente come \\": "Der Status der Vormerkung wird automatisch gesetzt als \\", + "Loans": "Ausleihen", + "Locale": "Lokal", + "Locale non supportato.": "Nicht unterstützte Sprache.", + "Lock file creato (installazione protetta)": "Lock-Datei erstellt (Installation geschützt)", + "Log": "Log", + "Log Sicurezza": "Sicherheitsprotokolle", + "Log di Sicurezza": "Sicherheitsprotokoll", + "Login": "Anmeldung", + "Login Riuscito": "Anmeldung erfolgreich", + "Logo": "Logo", + "Logo Applicazione (opzionale)": "Anwendungslogo (optional)", + "Logout effettuato con successo": "Abmeldung erfolgreich", + "MP3, M4A o OGG, max 500 MB": "MP3, M4A oder OGG, max. 500 MB", + "Mai generata": "Nie generiert", + "Mai utilizzata": "Nie verwendet", + "MaintenanceService ICS non generato": "MaintenanceService ICS nicht generiert", + "MaintenanceService connessione database fallita": "MaintenanceService Datenbankverbindung fehlgeschlagen", + "MaintenanceService errore attivazione prestiti": "MaintenanceService Fehler bei Ausleihe-Aktivierung", + "MaintenanceService errore attivazione prestito": "MaintenanceService Fehler bei Ausleihe-Aktivierung", + "MaintenanceService errore conversione prenotazioni": "MaintenanceService Fehler bei Vormerkungsumwandlung", + "MaintenanceService errore durante hook login admin": "MaintenanceService Fehler beim Admin-Login-Hook", + "MaintenanceService errore elaborazione prenotazione": "MaintenanceService Fehler bei Vormerkungsverarbeitung", + "MaintenanceService errore generazione ICS": "MaintenanceService Fehler bei ICS-Generierung", + "MaintenanceService errore notifiche": "MaintenanceService Benachrichtigungsfehler", + "MaintenanceService errore prenotazioni scadute": "MaintenanceService Fehler bei abgelaufenen Vormerkungen", + "MaintenanceService errore prestiti in ritardo": "MaintenanceService Fehler bei überfälligen Ausleihen", + "MaintenanceService errore ritiri scaduti": "MaintenanceService Fehler bei abgelaufenen Abholungen", + "MaintenanceService errore scadenza prenotazione": "MaintenanceService Fehler bei Vormerkungsablauf", + "MaintenanceService errore scadenza ritiro": "MaintenanceService Fehler bei Abholfristablauf", + "MaintenanceService eseguito al login admin": "MaintenanceService bei Admin-Anmeldung ausgeführt", + "MaintenanceService prenotazione convertita in prestito": "MaintenanceService Vormerkung in Ausleihe umgewandelt", + "MaintenanceService prenotazione scaduta": "MaintenanceService Vormerkung abgelaufen", + "MaintenanceService ritiro scaduto": "MaintenanceService Abholung abgelaufen", + "Mancante": "Fehlend", + "Mantieni in ritardo": "Als überfällig beibehalten", + "Manuale": "Manuell", + "Manutenzione": "Wartung", + "Manutenzione Completa": "Vollständige Wartung", + "Manutenzione completata: %d record corretti": "Wartung abgeschlossen: %d Datensätze korrigiert", + "Manutenzione disattivata": "Wartung deaktiviert", + "Manutenzione giornaliera del database": "Tägliche Datenbankwartung", + "Mappa Interattiva": "Interaktive Karte", + "Mappa del sito per i motori di ricerca": "Sitemap für Suchmaschinen", + "Mappa non disponibile": "Karte nicht verfügbar", + "Mario": "Max", + "Marketing:": "Marketing:", + "Maschio": "Männlich", + "Max 10.000 righe • Max 100 copie per libro": "Max. 10.000 Zeilen • Max. 100 Exemplare pro Buch", + "Mediocre": "Mäßig", + "Membro": "Mitglied", + "Memory limit aumentato": "Speicherlimit erhöht", + "Mensola": "Regal", + "Mensola creata e %d posizioni generate.": "Regal erstellt und %d Positionen generiert.", + "Mensola creata.": "Regal erstellt.", + "Mensola eliminata": "Regal gelöscht", + "Mensole": "Regale", + "Menu": "Menü", + "Menu \"Prestiti\" nell'admin sidebar": "Menü \"Ausleihen\" in der Admin-Seitenleiste", + "Menu Principale": "Hauptmenü", + "Merge - Aggiungi e aggiorna (mantiene dati esistenti)": "Zusammenführen – Hinzufügen und aktualisieren (behält vorhandene Daten bei)", + "Merge completato": "Zusammenführung abgeschlossen", + "Merge completato: %d aggiunti, %d aggiornati, %d invariati. Totale: %d voci.": "Zusammenführung abgeschlossen: %d hinzugefügt, %d aktualisiert, %d unverändert. Gesamt: %d Einträge.", + "Mese": "Monat", + "Messaggi": "Nachrichten", + "Messaggi di Contatto": "Kontaktnachrichten", + "Messaggio": "Nachricht", + "Messaggio inviato con successo! Ti risponderemo al più presto.": "Nachricht erfolgreich gesendet! Wir werden Ihnen so schnell wie möglich antworten.", + "Messaggio non trovato.": "Nachricht nicht gefunden.", + "Metadati:": "Metadaten:", + "Metodo di invio": "Versandmethode", + "Migrazione database": "Datenbankmigration", + "Minimo 8 caratteri": "Mindestens 8 Zeichen", + "Minimo 8 caratteri, con lettere maiuscole, minuscole e numeri": "Mindestens 8 Zeichen, mit Groß- und Kleinbuchstaben sowie Zahlen", + "Mittente": "Absender", + "Mittente (email)": "Absender (E-Mail)", + "Mittente (nome)": "Absender (Name)", + "Modalità Catalogo": "Katalogmodus", + "Modalità Solo Catalogo": "Nur-Katalog-Modus", + "Modalità di importazione": "Importmodus", + "Modalità manutenzione disattivata": "Wartungsmodus deaktiviert", + "Modalità manutenzione rimossa automaticamente (scaduta)": "Wartungsmodus automatisch entfernt (abgelaufen)", + "Moderatore": "Moderator", + "Modifica": "Bearbeiten", + "Modifica %s": "%s bearbeiten", + "Modifica Autore": "Autor bearbeiten", + "Modifica Autore:": "Autor bearbeiten:", + "Modifica Chi Siamo": "Über uns bearbeiten", + "Modifica Editore": "Verlag bearbeiten", + "Modifica Evento": "Veranstaltung bearbeiten", + "Modifica Evento: %s": "Veranstaltung bearbeiten: %s", + "Modifica Homepage": "Startseite bearbeiten", + "Modifica Libro": "Buch bearbeiten", + "Modifica Lingua:": "Sprache bearbeiten:", + "Modifica Prenotazione": "Vormerkung bearbeiten", + "Modifica Prenotazione #%s": "Vormerkung #%s bearbeiten", + "Modifica Route": "Route bearbeiten", + "Modifica Route Tradotte": "Übersetzte Routen bearbeiten", + "Modifica Stato Copia": "Exemplar-Status bearbeiten", + "Modifica Utente": "Benutzer bearbeiten", + "Modifica i contenuti della homepage: hero, features, CTA e immagine di sfondo": "Inhalte der Startseite bearbeiten: Hero, Features, CTA und Hintergrundbild", + "Modifica il contenuto e le impostazioni della pagina": "Seiteninhalt und Einstellungen bearbeiten", + "Modifica le informazioni dell'evento": "Veranstaltungsinformationen bearbeiten", + "Modifica le pagine statiche del sito": "Statische Seiten der Website bearbeiten", + "Modifica prestito": "Ausleihe bearbeiten", + "Modifica prestito #%s": "Ausleihe #%s bearbeiten", + "Modifica profilo": "Profil bearbeiten", + "Modifica stato": "Status bearbeiten", + "Modifica utente": "Benutzer bearbeiten", + "Modifiche non salvate": "Nicht gespeicherte Änderungen", + "Modulo": "Modul", + "Molto buono": "Sehr gut", + "Mondadori": "Mondadori", + "Monitora tentativi di login e eventi di sicurezza": "Anmeldeversuche und Sicherheitsereignisse überwachen", + "Mostra": "Anzeigen", + "Mostra API Key": "API-Schlüssel anzeigen", + "Mostra Cookie Analitici": "Analyse-Cookies anzeigen", + "Mostra Cookie di Marketing": "Marketing-Cookies anzeigen", + "Mostra _MENU_ libri": "_MENU_ Bücher anzeigen", + "Mostra categoria \\": "Kategorie anzeigen \\", + "Mostra filtri": "Filter anzeigen", + "Mostra gli ultimi libri aggiunti al catalogo": "Die zuletzt zum Katalog hinzugefügten Bücher anzeigen", + "Mostra questa guida": "Diese Anleitung anzeigen", + "Motivo del rifiuto (opzionale)": "Ablehnungsgrund (optional)", + "Motivo del rifiuto (opzionale):": "Ablehnungsgrund (optional):", + "N. Inventario": "Inventar-Nr.", + "N. Libri": "Anz. Bücher", + "N/D": "k. A.", + "Narrativa": "Belletristik", + "Nascita a": "Geburtsdatum bis", + "Nascita da": "Geburtsdatum von", + "Nascondi": "Ausblenden", + "Nascondi API Key": "API-Schlüssel ausblenden", + "Nascondi filtri": "Filter ausblenden", + "Nascondi se il sito non utilizza cookie di marketing o advertising": "Ausblenden, wenn die Website keine Marketing- oder Werbe-Cookies verwendet", + "Nascondi se il sito non utilizza strumenti di analytics (es. Google Analytics)": "Ausblenden, wenn die Website keine Analysetools verwendet (z. B. Google Analytics)", + "Nascosto": "Verborgen", + "Nato il %s": "Geboren am %s", + "Nazionalità": "Nationalität", + "Nederlands (NL)": "Niederländisch (NL)", + "Nei Preferiti": "In Favoriten", + "Nella collezione": "In der Sammlung", + "Nessun Problema": "Keine Probleme", + "Nessun aggiornamento": "Keine Aktualisierungen", + "Nessun aggiornamento registrato": "Keine Aktualisierungen verzeichnet", + "Nessun autore selezionato": "Keine Autoren ausgewählt", + "Nessun autore trovato": "Keine Autoren gefunden", + "Nessun autore trovato, premi Invio per aggiungerne uno nuovo": "Kein Autor gefunden, drücken Sie Enter, um einen neuen hinzuzufügen", + "Nessun backup disponibile": "Keine Backups verfügbar", + "Nessun dato": "Keine Daten", + "Nessun dato trovato su LibreriaUniversitaria/Feltrinelli.": "Keine Daten auf LibreriaUniversitaria/Feltrinelli gefunden.", + "Nessun dato.": "Keine Daten.", + "Nessun editore selezionato": "Keine Verlage ausgewählt", + "Nessun editore trovato": "Keine Verlage gefunden", + "Nessun editore trovato per": "Kein Verlag gefunden für", + "Nessun editore trovato per \"${query}\" — premi Invio per crearne uno nuovo.": "Kein Verlag für \"${query}\" gefunden — drücken Sie Enter, um einen neuen anzulegen.", + "Nessun elemento trovato": "Keine Elemente gefunden", + "Nessun errore": "Keine Fehler", + "Nessun evento": "Keine Veranstaltungen", + "Nessun evento in programma": "Keine Veranstaltungen geplant", + "Nessun file caricato": "Keine Datei hochgeladen", + "Nessun file caricato.": "Keine Datei hochgeladen.", + "Nessun file di traduzione caricato. Carica un file JSON per abilitare questa lingua.": "Keine Übersetzungsdatei hochgeladen. Laden Sie eine JSON-Datei hoch, um diese Sprache zu aktivieren.", + "Nessun genere trovato": "Keine Genres gefunden", + "Nessun import registrato": "Keine Importe aufgezeichnet", + "Nessun libro": "Keine Bücher", + "Nessun libro ancora inserito": "Noch keine Bücher hinzugefügt", + "Nessun libro con collocazione trovato": "Keine Bücher mit Standort gefunden", + "Nessun libro nel database": "Keine Bücher in der Datenbank", + "Nessun libro recente": "Keine aktuellen Bücher", + "Nessun libro recente disponibile": "Keine aktuellen Bücher verfügbar", + "Nessun libro registrato": "Keine Bücher registriert", + "Nessun libro selezionato": "Keine Bücher ausgewählt", + "Nessun libro trovato": "Keine Bücher gefunden", + "Nessun log disponibile": "Keine Protokolle verfügbar", + "Nessun logo caricato": "Kein Logo hochgeladen", + "Nessun messaggio ricevuto": "Keine Nachrichten erhalten", + "Nessun motivo specificato": "Kein Grund angegeben", + "Nessun plugin installato": "Keine Plugins installiert", + "Nessun prestito attivo": "Keine aktiven Ausleihen", + "Nessun prestito disponibile per generare il grafico": "Keine Ausleihen verfügbar, um das Diagramm zu erstellen", + "Nessun prestito in attesa di ritiro": "Keine Ausleihen warten auf Abholung", + "Nessun prestito in corso": "Keine laufenden Ausleihen", + "Nessun prestito passato": "Keine vergangenen Ausleihen", + "Nessun prestito registrato": "Keine Ausleihen registriert", + "Nessun prestito scaduto": "Keine überfälligen Ausleihen", + "Nessun prestito trovato": "Keine Ausleihen gefunden", + "Nessun prestito trovato.": "Keine Ausleihen gefunden.", + "Nessun risultato": "Keine Ergebnisse", + "Nessun risultato trovato": "Keine Ergebnisse gefunden", + "Nessun risultato trovato con i filtri applicati": "Keine Ergebnisse mit den angewendeten Filtern gefunden", + "Nessun risultato trovato per": "Keine Ergebnisse gefunden für", + "Nessun risultato trovato per la ricerca.": "Keine Ergebnisse für die Suche gefunden.", + "Nessun ritiro": "Keine Abholungen", + "Nessun server configurato. Aggiungine uno per iniziare.": "Keine Server konfiguriert. Fügen Sie einen hinzu, um zu beginnen.", + "Nessun sottogenere": "Kein Untergenre", + "Nessun sottogenere definito": "Keine Untergenres definiert", + "Nessun suggerimento": "Kein Vorschlag", + "Nessun suggerimento disponibile": "Kein Vorschlag verfügbar", + "Nessun titolo corrisponde al filtro corrente.": "Kein Titel entspricht dem aktuellen Filter.", + "Nessuna": "Keine", + "Nessuna API key configurata": "Keine API-Schlüssel konfiguriert", + "Nessuna alternativa disponibile": "Keine Alternativen verfügbar", + "Nessuna collocazione trovata": "Keine Standorte gefunden", + "Nessuna copertina caricata": "Kein Cover hochgeladen", + "Nessuna copertina da scaricare": "Keine Cover zum Abrufen vorhanden", + "Nessuna copia attualmente disponibile": "Kein Exemplar derzeit verfügbar", + "Nessuna copia disponibile nelle date richieste": "Keine Exemplare für die gewünschten Daten verfügbar", + "Nessuna copia disponibile per il periodo richiesto": "Kein Exemplar für den angeforderten Zeitraum verfügbar", + "Nessuna copia disponibile per il periodo richiesto.": "Kein Exemplar für den gewünschten Zeitraum verfügbar.", + "Nessuna copia disponibile per questo libro": "Kein Exemplar für dieses Buch verfügbar", + "Nessuna copia registrata": "Keine Exemplare registriert", + "Nessuna descrizione disponibile": "Keine Beschreibung verfügbar", + "Nessuna descrizione disponibile per questo libro.": "Keine Beschreibung für dieses Buch verfügbar.", + "Nessuna fonte di scraping disponibile. Installa almeno un plugin di scraping (es. Open Library o Scraping Pro).": "Keine Scraping-Quelle verfügbar. Installieren Sie mindestens ein Scraping-Plugin (z.B. Open Library oder Scraping Pro).", + "Nessuna lingua configurata": "Keine Sprachen konfiguriert", + "Nessuna mensola per questo scaffale. Creane una!": "Keine Regale für dieses Regalgestell. Erstellen Sie eines!", + "Nessuna mensola. Creane una per iniziare!": "Keine Regale vorhanden. Erstellen Sie eines, um zu beginnen!", + "Nessuna notifica": "Keine Benachrichtigungen", + "Nessuna prenotazione": "Keine Vormerkungen", + "Nessuna prenotazione attiva": "Keine aktiven Vormerkungen", + "Nessuna recensione": "Keine Rezensionen", + "Nessuna recensione approvata": "Keine genehmigten Rezensionen", + "Nessuna recensione in attesa": "Keine ausstehenden Rezensionen", + "Nessuna recensione rifiutata": "Keine abgelehnten Rezensionen", + "Nessuna ricerca recente": "Keine kürzlichen Suchen", + "Nessuna richiesta": "Keine Anfragen", + "Nessuna richiesta da approvare": "Keine Anfragen zu genehmigen", + "Nessuna richiesta in attesa": "Keine ausstehenden Anfragen", + "Nessuna richiesta in attesa di approvazione.": "Keine Anfragen zur Genehmigung ausstehend.", + "Nessuna selezione": "Keine Auswahl", + "Nessuna sessione attiva. Le sessioni vengono create quando accedi con 'Ricordami' selezionato.": "Keine aktiven Sitzungen. Sitzungen werden erstellt, wenn Sie sich mit aktiviertem 'Angemeldet bleiben' anmelden.", + "Nessuno": "Keine", + "Nessuno scaffale. Creane uno per iniziare!": "Keine Regalgestelle vorhanden. Erstellen Sie eines, um zu beginnen!", + "Nessuno storico": "Kein Verlauf", + "No": "Nein", + "Nodo mancante di codice a profondità %d.": "Knoten ohne Code auf Tiefe %d.", + "Nome": "Vorname", + "Nome *": "Name *", + "Nome Applicazione": "Anwendungsname", + "Nome Categoria": "Kategoriename", + "Nome Cognome": "Vor- und Nachname", + "Nome Database": "Datenbankname", + "Nome Editore": "Verlagsname", + "Nome File": "Dateiname", + "Nome Indice": "Indexname", + "Nome Inglese": "Englischer Name", + "Nome Nativo": "Einheimischer Name", + "Nome Referente": "Name der Kontaktperson", + "Nome Server": "Servername", + "Nome applicazione": "Anwendungsname", + "Nome autore": "Autorenname", + "Nome backup non specificato": "Backup-Name nicht angegeben", + "Nome backup non valido": "Ungültiger Backup-Name", + "Nome categoria esistente": "Vorhandener Kategoriename", + "Nome completo": "Vollständiger Name", + "Nome cookie analitici": "Name der Analyse-Cookies", + "Nome cookie essenziali": "Name der essentiellen Cookies", + "Nome cookie marketing": "Name der Marketing-Cookies", + "Nome d'arte o pseudonimo": "Künstlername oder Pseudonym", + "Nome del traduttore (se applicabile)": "Name des Übersetzers (falls zutreffend)", + "Nome dell'editore": "Verlagsname", + "Nome dell'illustratore (se applicabile)": "Name des Illustrators (falls zutreffend)", + "Nome della casa editrice": "Verlagsname", + "Nome della classificazione": "Name der Klassifikation", + "Nome della lingua in inglese (es. Italian, English, Spanish)": "Name der Sprache auf Englisch (z. B. Italian, English, Spanish)", + "Nome della lingua nella lingua stessa (es. Italiano, English, Español)": "Name der Sprache in der Sprache selbst (z. B. Italiano, English, Español)", + "Nome e cognome del referente": "Vor- und Nachname der Kontaktperson", + "Nome e cognome dell'autore": "Vor- und Nachname des Autors", + "Nome e cognome sono obbligatori.": "Vor- und Nachname sind erforderlich.", + "Nome editore": "Verlagsname", + "Nome editore...": "Verlagsname...", + "Nome file non valido.": "Ungültiger Dateiname.", + "Nome o cognome troppo lungo (massimo 100 caratteri)": "Vor- oder Nachname zu lang (maximal 100 Zeichen)", + "Nome plugin non valido. Usa solo lettere, numeri, trattini o underscore.": "Ungültiger Plugin-Name. Verwenden Sie nur Buchstaben, Zahlen, Bindestriche oder Unterstriche.", + "Nome, cognome, email...": "Name, Nachname, E-Mail...", + "Nome, pseudonimo, biografia...": "Name, Pseudonym, Biografie...", + "Nome:": "Name:", + "Non Disponibile": "Nicht verfügbar", + "Non Disponibili": "Nicht verfügbar", + "Non ancora restituito": "Noch nicht zurückgegeben", + "Non assegnata": "Nicht zugewiesen", + "Non autenticato": "Nicht authentifiziert", + "Non autorizzato": "Nicht autorisiert", + "Non autorizzato.": "Nicht autorisiert.", + "Non chiudere questa finestra": "Schließen Sie dieses Fenster nicht", + "Non ci sono azioni urgenti da completare.": "Keine dringenden Aktionen zu erledigen.", + "Non ci sono dati da esportare": "Keine Daten zum Exportieren vorhanden", + "Non ci sono nuovi arrivi al momento.": "Derzeit gibt es keine Neuerscheinungen.", + "Non ci sono recensioni in attesa di approvazione.": "Keine Rezensionen zur Genehmigung ausstehend.", + "Non ci sono richieste di prestito in attesa di approvazione.": "Keine Ausleih-Anfragen zur Genehmigung ausstehend.", + "Non disponibile": "Nicht verfügbar", + "Non disponibile nella data selezionata": "Am gewählten Datum nicht verfügbar", + "Non disponibile ora": "Derzeit nicht verfügbar", + "Non eliminabile": "Nicht löschbar", + "Non hai ancora creato nessun evento. Inizia creando il tuo primo evento.": "Sie haben noch keine Veranstaltungen erstellt. Beginnen Sie mit der Erstellung Ihrer ersten Veranstaltung.", + "Non hai ancora lasciato recensioni": "Sie haben noch keine Rezensionen verfasst", + "Non hai libri in prestito al momento": "Sie haben derzeit keine ausgeliehenen Bücher", + "Non hai prenotazioni attive al momento": "Sie haben derzeit keine aktiven Vormerkungen", + "Non hai prestiti in corso al momento.": "Sie haben derzeit keine aktiven Ausleihen.", + "Non hai prestiti passati": "Sie haben keine vergangenen Ausleihen", + "Non hai un account?": "Sie haben noch kein Konto?", + "Non includere tag": "Keine Tags einfügen", + "Non includere tag ": "Keine -Tags einfügen", + "Non installato": "Nicht installiert", + "Non letto": "Ungelesen", + "Non puoi eliminare l'installer finché non completi l'installazione delle dipendenze PHP.": "Sie können den Installer erst löschen, wenn die Installation der PHP-Abhängigkeiten abgeschlossen ist.", + "Non puoi recensire questo libro (devi averlo preso in prestito e non averlo già recensito)": "Sie können dieses Buch nicht rezensieren (Sie müssen es ausgeliehen haben und dürfen es nicht bereits rezensiert haben)", + "Non rinnovabile: prestito in ritardo": "Nicht verlängerbar: Ausleihe überfällig", + "Non scrivibile": "Nicht beschreibbar", + "Non selezionato": "Nicht ausgewählt", + "Non specificata": "Nicht angegeben", + "Non specificato": "Nicht angegeben", + "Non usare spazi nelle route": "Verwenden Sie keine Leerzeichen in Routen", + "Non è possibile creare la directory: %s": "Verzeichnis kann nicht erstellt werden: %s", + "Non è stato possibile eliminare l'utente. Controlla la console.": "Der Benutzer konnte nicht gelöscht werden. Überprüfen Sie die Konsole.", + "Non è stato trovato alcun aggiornamento": "Keine Aktualisierungen gefunden", + "Nota:": "Hinweis:", + "Nota: Impostare come predefinita disattiverà lo status di predefinita per tutte le altre lingue.": "Hinweis: Das Festlegen als Standard deaktiviert den Standardstatus für alle anderen Sprachen.", + "Nota: in produzione limita questa funzione agli amministratori.": "Hinweis: In der Produktionsumgebung diese Funktion auf Administratoren beschränken.", + "Note": "Notizen", + "Note (opzionali)": "Notizen (optional)", + "Note Importanti": "Wichtige Hinweise", + "Note Varie": "Verschiedene Notizen", + "Note aggiuntive o osservazioni particolari...": "Zusätzliche Notizen oder besondere Anmerkungen...", + "Note importanti:": "Wichtige Hinweise:", + "Note interne": "Interne Notizen", + "Note sul prestito": "Ausleihe-Notizen", + "Note sulla restituzione": "Rückgabe-Notizen", + "Note tecniche": "Technische Hinweise", + "Notifica agli amministratori quando viene inoltrata una nuova richiesta di prestito.": "Benachrichtigt Administratoren, wenn eine neue Ausleihanfrage eingereicht wird.", + "Notifica agli utenti quando il prestito è scaduto e deve essere restituito.": "Benachrichtigt die Benutzer, wenn die Ausleihe abgelaufen ist und das Buch zurückgegeben werden muss.", + "Notifica copia non disponibile creata": "Benachrichtigung über nicht verfügbares Exemplar erstellt", + "Notifica prenotazione disponibile inviata": "Benachrichtigung über verfügbare Vormerkung gesendet", + "Notifica prestito fallita": "Ausleihbenachrichtigung fehlgeschlagen", + "Notifica richiesta prestito fallita": "Benachrichtigung über Ausleihanfrage fehlgeschlagen", + "Notifiche": "Benachrichtigungen", + "Notifiche Automatiche": "Automatische Benachrichtigungen", + "Notifiche Prestiti": "Ausleihe-Benachrichtigungen", + "Notifiche disponibilità libri in wishlist": "Benachrichtigungen zur Verfügbarkeit von Büchern auf der Wunschliste", + "Notifiche prestiti scaduti": "Benachrichtigungen über überfällige Ausleihen", + "Novità nelle versioni successive": "Neuigkeiten in kommenden Versionen", + "Numero Inventario": "Inventarnummer", + "Numero Libri": "Anzahl Bücher", + "Numero Pagine": "Seitenzahl", + "Numero Serie": "Reihennummer", + "Numero di Pagine": "Seitenzahl", + "Numero di copie non valido.": "Ungültige Anzahl von Exemplaren.", + "Numero di libri": "Anzahl der Bücher", + "Numero inventario": "Inventarnummer", + "Numero massimo di righe superato (%d)": "Maximale Zeilenanzahl überschritten (%d)", + "Numero massimo di righe superato (%d). Dividi il file in parti più piccole.": "Maximale Zeilenanzahl überschritten (%d). Teilen Sie die Datei in kleinere Teile auf.", + "Numero o descrizione dell'edizione": "Ausgabenummer oder -beschreibung", + "Numero prenotazioni attive": "Anzahl aktiver Vormerkungen", + "Numero serie": "Reihennummer", + "Numero tessera": "Ausweisnummer", + "Nuova Collocazione": "Neuer Standort", + "Nuova Password": "Neues Passwort", + "Nuova password": "Neues Passwort", + "Nuova prenotazione": "Neue Vormerkung", + "Nuova recensione (Admin)": "Neue Rezension (Admin)", + "Nuova recensione da approvare": "Neue Rezension zur Genehmigung", + "Nuova registrazione utente": "Neue Benutzerregistrierung", + "Nuova ricerca": "Neue Suche", + "Nuova richiesta di prestito": "Neue Ausleih-Anfrage", + "Nuovo": "Neu", + "Nuovo Autore": "Neuer Autor", + "Nuovo Editore": "Neuer Verlag", + "Nuovo Evento": "Neue Veranstaltung", + "Nuovo Genere": "Neues Genre", + "Nuovo Libro": "Neues Buch", + "Nuovo Prestito": "Neue Ausleihe", + "Nuovo Utente": "Neuer Benutzer", + "Nuovo aggiornamento disponibile!": "Neue Aktualisierung verfügbar!", + "Nuovo editore:": "Neuer Verlag:", + "Nuovo libro": "Neues Buch", + "Nuovo messaggio di contatto": "Neue Kontaktnachricht", + "Nuovo nome (opzionale)": "Neuer Name (optional)", + "Nuovo utente": "Neuer Benutzer", + "OFF": "Aus", + "OK": "OK", + "ON": "Ein", + "Obbligatorio": "Erforderlich", + "Obbligatorio per utenti non amministratori.": "Erforderlich für Benutzer ohne Administratorrechte.", + "Obsoleto": "Veraltet", + "Occupato": "Belegt", + "Occupato (in ritardo)": "Belegt (überfällig)", + "Occupato (prestito attivo)": "Belegt (aktive Ausleihe)", + "Offline": "Offline", + "Oggetto": "Betreff", + "Oggetto dell'email": "E-Mail-Betreff", + "Oggi": "Heute", + "Ogni 15 minuti nei giorni lavorativi (8:00-18:00)": "Alle 15 Minuten an Werktagen (8:00–18:00)", + "Ogni errore include: numero riga, titolo libro, tipo errore e messaggio dettagliato": "Jeder Fehler enthält: Zeilennummer, Buchtitel, Fehlertyp und detaillierte Meldung", + "Ogni route deve iniziare con": "Jede Route muss beginnen mit", + "Online": "Online", + "Open Graph (Facebook)": "Open Graph (Facebook)", + "Open Graph (Facebook, LinkedIn)": "Open Graph (Facebook, LinkedIn)", + "Operation completed": "Vorgang abgeschlossen", + "Operation failed": "Vorgang fehlgeschlagen", + "Operatore": "Operator", + "Operazione annullata": "Vorgang abgebrochen", + "Operazione completata": "Vorgang abgeschlossen", + "Operazione fallita": "Vorgang fehlgeschlagen", + "Operazione non consentita": "Vorgang nicht erlaubt", + "Operazione non riuscita": "Vorgang fehlgeschlagen", + "Operazioni": "Vorgänge", + "Opere": "Werke", + "Oppure accedere a /installer/?force=1 per forzare una nuova procedura": "Oder gehen Sie zu /installer/?force=1, um eine Neuinstallation zu erzwingen", + "Oppure naviga per categorie": "Oder nach Kategorien durchsuchen", + "Oppure naviga per categorie:": "Oder nach Kategorien durchsuchen:", + "Oppure usa il terminale SSH del tuo hosting (cPanel, Plesk, etc.)": "Oder verwenden Sie das SSH-Terminal Ihres Hostings (cPanel, Plesk, etc.)", + "Ops, qualcosa è andato storto": "Hoppla, etwas ist schiefgelaufen", + "Opzionale": "Optional", + "Opzionale per amministratori": "Optional für Administratoren", + "Opzione 1:": "Option 1:", + "Opzione 2:": "Option 2:", + "Opzione 3:": "Option 3:", + "Ora Evento": "Veranstaltungszeit", + "Ora puoi accedere con la tua nuova password.": "Sie können sich jetzt mit Ihrem neuen Passwort anmelden.", + "Ora puoi ricaricare questa pagina - il warning sparirà se tutto è OK.": "Sie können diese Seite jetzt neu laden – die Warnung verschwindet, wenn alles in Ordnung ist.", + "Ordina Sezioni Homepage": "Homepage-Bereiche sortieren", + "Ordina per": "Sortieren nach", + "Ordinamento": "Sortierung", + "Ordinamento libri": "Büchersortierung", + "Ordine salvato con successo!": "Reihenfolge erfolgreich gespeichert!", + "Ordine:": "Reihenfolge:", + "Organizza e gestisci i generi letterari della biblioteca": "Literarische Genres der Bibliothek organisieren und verwalten", + "Organizza scaffali, mensole e posizioni per la biblioteca fisica": "Regale, Regalböden und Positionen für die physische Bibliothek organisieren", + "Ospite": "Gast", + "Ottieni le chiavi da Google reCAPTCHA": "Schlüssel von Google reCAPTCHA erhalten", + "Ottimizza l'evento per i motori di ricerca e i social media": "Veranstaltung für Suchmaschinen und soziale Medien optimieren", + "Ottimizzato": "Optimiert", + "Ottimizzazione": "Optimierung", + "Ottimizzazione Indici Database": "Datenbank-Indexoptimierung", + "Ottimizzazione SEO (Meta Tags)": "SEO-Optimierung (Meta-Tags)", + "Ottimizzazione SEO e Social Media": "SEO- und Social-Media-Optimierung", + "Output atteso: cartella vendor/ con sottocartelle (slim, monolog, etc.)": "Erwartete Ausgabe: Ordner vendor/ mit Unterordnern (slim, monolog, etc.)", + "PDF": "PDF", + "PDF generato!": "PDF erstellt!", + "PDF o ePub, max 100 MB": "PDF oder ePub, max. 100 MB", + "PDF prestito non generato": "Ausleih-PDF nicht erstellt", + "PHP mail()": "PHP mail()", + "PHP mail() - Predefinito": "PHP mail() – Standard", + "PHPMailer": "PHPMailer", + "PNG, SVG, JPG o WebP (max 2MB)": "PNG, SVG, JPG oder WebP (max. 2 MB)", + "Pacchetto di aggiornamento non valido: manca %s": "Ungültiges Aktualisierungspaket: %s fehlt", + "Paese": "Land", + "Pagina": "Seite", + "Pagina Cookie": "Cookie-Seite", + "Pagina Cookie Policy": "Cookie-Richtlinien-Seite", + "Pagina Non Trovata": "Seite nicht gefunden", + "Pagina \\": "Seite \\", + "Pagina aggiornata con successo.": "Seite erfolgreich aktualisiert.", + "Pagina attiva (visibile sul sito)": "Aktive Seite (auf der Website sichtbar)", + "Pagina non trovata.": "Seite nicht gefunden.", + "Pagina precedente": "Vorherige Seite", + "Pagina successiva": "Nächste Seite", + "Paginazione eventi": "Veranstaltungspaginierung", + "Pagine": "Seiten", + "Pannello": "Bereich", + "Panoramica completa di prestiti, ritiri e prenotazioni": "Vollständige Übersicht über Ausleihen, Abholungen und Vormerkungen", + "Panoramica generale": "Allgemeine Übersicht", + "Panoramica generale di Pinakes": "Allgemeine Übersicht über Pinakes", + "Paragrafo": "Absatz", + "Paragraph": "Absatz", + "Parametri di Ricerca": "Suchparameter", + "Parametri non validi": "Ungültige Parameter.", + "Parametro ISBN mancante.": "Fehlender ISBN-Parameter.", + "Parametro category_id obbligatorio.": "Parameter category_id ist erforderlich.", + "Parametro code obbligatorio.": "Parameter code ist erforderlich.", + "Parametro cover_url mancante.": "Fehlender Parameter cover_url.", + "Parametro division_id obbligatorio.": "Parameter division_id ist erforderlich.", + "Parole Chiave": "Schlüsselwörter", + "Parole Chiave SEO": "SEO-Schlüsselwörter", + "Parole chiave": "Schlüsselwörter", + "Parole chiave SEO": "SEO-Schlüsselwörter", + "Parole chiave per i motori di ricerca (impatto SEO limitato). Separate da virgola.": "Schlüsselwörter für Suchmaschinen (begrenzter SEO-Einfluss). Durch Komma getrennt.", + "Passo": "Schritt", + "Password": "Passwort", + "Password aggiornata con successo.": "Passwort erfolgreich aktualisiert.", + "Password dimenticata": "Passwort vergessen", + "Password dimenticata?": "Passwort vergessen?", + "Password iniziale": "Anfangspasswort", + "Password resettata con successo!": "Passwort erfolgreich zurückgesetzt!", + "Password troppo lunga (massimo 128 caratteri)": "Passwort zu lang (maximal 128 Zeichen)", + "Pattern URL": "URL-Muster", + "Pendente": "Ausstehend", + "Pending": "Ausstehend", + "Per aggiornare automaticamente la sitemap ogni giorno:": "Um die Sitemap täglich automatisch zu aktualisieren:", + "Per assistenza, contatta l'amministrazione della biblioteca.": "Für Unterstützung wenden Sie sich an die Bibliotheksverwaltung.", + "Per inserire il codice JavaScript Analytics (Google Analytics, Matomo, ecc.), vai su {{variabile}} per inserire dati dinamici.": "Passen Sie den Inhalt der automatischen E-Mails mit dem TinyMCE-Editor an. Verwenden Sie Platzhalter {{variable}}, um dynamische Daten einzufügen.", + "Personalizza il contenuto delle mail automatiche con l'editor TinyMCE. Usa i segnaposto sospeso e richiede approvazione. Scegli un'opzione:": "Dieser Benutzer ist im Status gesperrt und erfordert Genehmigung. Wählen Sie eine Option:", + "Radice": "Stammverzeichnis", + "Rallenta l'importazione": "Verlangsamt den Import", + "Recati in biblioteca durante gli orari di apertura per ritirare il libro.": "Besuchen Sie die Bibliothek während der Öffnungszeiten, um das Buch abzuholen.", + "Recensione (opzionale)": "Rezension (optional)", + "Recensione approvata": "Rezension genehmigt", + "Recensione del": "Rezension vom", + "Recensione eliminata": "Rezension gelöscht", + "Recensione inviata con successo!": "Rezension erfolgreich eingereicht!", + "Recensione inviata con successo! Sarà pubblicata dopo l'approvazione di un amministratore.": "Rezension erfolgreich eingereicht! Sie wird nach der Genehmigung durch einen Administrator veröffentlicht.", + "Recensione inviata!": "Rezension eingereicht!", + "Recensione per \"%s\" da %s - %s": "Rezension für \"%s\" von %s – %s", + "Recensione rifiutata": "Rezension abgelehnt", + "Recensioni": "Rezensionen", + "Recensioni Approvate": "Genehmigte Rezensionen", + "Recensioni Rifiutate": "Abgelehnte Rezensionen", + "Recensioni utenti": "Benutzerrezensionen", + "Recente": "Aktuell", + "Recupera Password": "Passwort wiederherstellen", + "Referente": "Ansprechperson", + "Registra Restituzione": "Rückgabe erfassen", + "Registra prestito": "Ausleihe erfassen", + "Registra restituzione": "Rückgabe erfassen", + "Registra restituzione prestito": "Ausleih-Rückgabe erfassen", + "Registra una prenotazione per permettere ad un utente di riservare un libro specifico": "Erfassen Sie eine Vormerkung, um einem Benutzer die Reservierung eines bestimmten Buches zu ermöglichen", + "Registrati": "Registrieren", + "Registrati Ora": "Jetzt registrieren", + "Registrato da": "Registriert von", + "Registrato il": "Registriert am", + "Registrazione": "Registrierung", + "Registrazione Completata": "Registrierung abgeschlossen", + "Registrazione completata": "Registrierung abgeschlossen", + "Registrazione completata! Effettua l'accesso": "Registrierung abgeschlossen! Bitte melden Sie sich an", + "Registrazione ricevuta": "Registrierung eingegangen", + "Registro delle migrazioni database applicate": "Register der angewendeten Datenbankmigrationen", + "Reimposta password": "Passwort zurücksetzen", + "Reindirizza automaticamente tutte le richieste HTTP a HTTPS": "Alle HTTP-Anfragen automatisch auf HTTPS umleiten", + "Reindirizzamento verso dominio non autorizzato bloccato.": "Weiterleitung zu einer nicht autorisierten Domain blockiert.", + "Reinstalla da Capo": "Von Grund auf neu installieren", + "Remoto": "Remote", + "Report": "Bericht", + "Report Integrità Dati": "Datenintegritätsbericht", + "Report e analisi": "Berichte und Analysen", + "Requisiti": "Anforderungen", + "Requisiti del plugin:": "Plugin-Anforderungen:", + "Requisiti di Sistema": "Systemanforderungen", + "Requisiti di sistema non soddisfatti": "Systemanforderungen nicht erfüllt", + "Requisiti:": "Voraussetzungen:", + "Requisito '%s' non soddisfatto": "Voraussetzung '%s' nicht erfüllt", + "Reset": "Zurücksetzen", + "Reset Filtri": "Filter zurücksetzen", + "Reset anni": "Jahre zurücksetzen", + "Resetta Password": "Passwort zurücksetzen", + "Recupera la tua password": "Stellen Sie Ihr Passwort wieder her", + "Abbiamo ricevuto una richiesta di reset della password per il tuo account.": "Wir haben eine Anfrage zum Zurücksetzen des Passworts für Ihr Konto erhalten.", + "Clicca sul pulsante qui sotto per resettare la tua password:": "Klicken Sie auf die Schaltfläche unten, um Ihr Passwort zurückzusetzen:", + "Oppure copia e incolla questo link nel tuo browser:": "Oder kopieren Sie diesen Link und fügen Sie ihn in Ihren Browser ein:", + "Questo link scadrà tra 2 ore.": "Dieser Link läuft in 2 Stunden ab.", + "Se non hai richiesto il reset della password, puoi ignorare questa email. Il tuo account rimane sicuro.": "Wenn Sie kein Zurücksetzen des Passworts angefordert haben, können Sie diese E-Mail ignorieren. Ihr Konto bleibt sicher.", + "Ciao": "Hallo", + "Restituito": "Zurückgegeben", + "Restituito in ritardo": "Verspätet zurückgegeben", + "Restituito regolarmente": "Fristgerecht zurückgegeben", + "Restituzione": "Rückgabe", + "Restituzione prestito": "Ausleih-Rückgabe", + "Restituzione prestito #%s": "Ausleih-Rückgabe #%s", + "Retention: 90 giorni": "Aufbewahrung: 90 Tage", + "Revocate %d sessioni": "%d Sitzungen widerrufen", + "Riassegnazione copia fallita": "Exemplar-Neuzuweisung fehlgeschlagen", + "Riassegnazione prenotazione nuova copia fallita": "Neuzuweisung der Vormerkung auf neues Exemplar fehlgeschlagen", + "Ricalcola Disponibilità": "Verfügbarkeit neu berechnen", + "Ricarica Dewey (seed)": "Dewey neu laden (Seed)", + "Ricarica Pagina": "Seite neu laden", + "Ricerca": "Suche", + "Ricerca Libro": "Buch suchen", + "Ricerca Utente": "Benutzer suchen", + "Ricerca in corso...": "Suche läuft...", + "Ricerca rapida": "Schnellsuche", + "Ricerche recenti": "Kürzliche Suchen", + "Riceverai un link di reset via email. Il link sarà valido per 24 ore.": "Sie erhalten einen Zurücksetzungslink per E-Mail. Der Link ist 24 Stunden gültig.", + "Riceverai una conferma via email appena la richiesta sarà approvata.": "Sie erhalten eine E-Mail-Bestätigung, sobald die Anfrage genehmigt wurde.", + "Ricevuta di Prestito": "Ausleihquittung", + "Ricevuta di prestito bibliotecario": "Bibliotheks-Ausleihquittung", + "Ricevuto": "Empfangen", + "Richiede App:": "Erfordert App:", + "Richiede PHP:": "Erfordert PHP:", + "Richiedi Prestito": "Ausleihe anfordern", + "Richiedi approvazione admin dopo la conferma email": "Administrator-Genehmigung nach E-Mail-Bestätigung erforderlich", + "Richiedono attenzione immediata": "Erfordern sofortige Aufmerksamkeit", + "Richiesta Inviata!": "Anfrage gesendet!", + "Richiesta Pendente": "Ausstehende Anfrage", + "Richiesta Prestito": "Ausleihanfrage", + "Richiesta del %s": "Anfrage vom %s", + "Richiesta di prestito dal %1$s al %2$s": "Ausleihanfrage vom %1$s bis %2$s", + "Richiesta di prestito dal %s per 1 mese": "Ausleihanfrage ab %s für 1 Monat", + "Richiesta di prestito inviata con successo": "Ausleihanfrage erfolgreich gesendet", + "Richiesta di prestito per \"%s\" da %s dal %s al %s": "Ausleihanfrage für \"%s\" von %s vom %s bis %s", + "Richiesta di prestito per \\": "Ausleihanfrage für \\", + "Richiesta fallita:": "Anfrage fehlgeschlagen:", + "Richiesta inviata con successo!": "Anfrage erfolgreich gesendet!", + "Richiesta inviata!": "Anfrage gesendet!", + "Richiesta manuale": "Manuelle Anfrage", + "Richiesta prestito": "Ausleihanfrage", + "Richiesta rifiutata": "Anfrage abgelehnt", + "Richieste Manuali": "Manuelle Anfragen", + "Richieste Pendenti": "Ausstehende Anfragen", + "Richieste di Prestito": "Ausleihanfragen", + "Richieste di Prestito in Attesa": "Ausstehende Ausleihanfragen", + "Richieste in Attesa": "Ausstehende Anfragen", + "Richieste in Sospeso": "Ausstehende Anfragen", + "Richieste in sospeso": "Ausstehende Anfragen", + "Richieste pendenti": "Ausstehende Anfragen", + "Richiesto": "Erforderlich", + "Richiesto il": "Angefordert am", + "Richiesto il %s": "Angefordert am %s", + "Richiesto:": "Erforderlich:", + "Ricordami": "Angemeldet bleiben", + "Ricordi la password?": "Erinnern Sie sich an Ihr Passwort?", + "Riepilogo Installazione": "Installationszusammenfassung", + "Riepilogo wishlist": "Wunschlisten-Zusammenfassung", + "Rifiuta": "Ablehnen", + "Rifiuta Prestito?": "Ausleihe ablehnen?", + "Rifiuta non essenziali": "Nicht-essentielle ablehnen", + "Rifiuta prestito": "Ausleihe ablehnen", + "Rifiuta recensione": "Rezension ablehnen", + "Rifiutata": "Abgelehnt", + "Rifiutata il": "Abgelehnt am", + "Rifiutato": "Abgelehnt", + "Rifiuterai questa richiesta di prestito?": "Möchten Sie diese Ausleihanfrage ablehnen?", + "Riga %d (%s): %s": "Zeile %d (%s): %s", + "Riga %d: numero di colonne non corrispondente": "Zeile %d: Spaltenanzahl stimmt nicht überein", + "Rigenera Sitemap": "Sitemap neu generieren", + "Rigenera adesso": "Jetzt neu generieren", + "Rimuovere dalla wishlist?": "Von der Wunschliste entfernen?", + "Rimuovere i libri associati prima di eliminare l'autore": "Entfernen Sie die zugehörigen Bücher, bevor Sie den Autor löschen", + "Rimuovere i libri dell'editore prima di eliminarlo": "Entfernen Sie die Bücher des Verlags, bevor Sie ihn löschen", + "Rimuovi": "Entfernen", + "Rimuovi dai Preferiti": "Aus Favoriten entfernen", + "Rimuovi dalla wishlist": "Von der Wunschliste entfernen", + "Rimuovi editore": "Verlag entfernen", + "Rimuovi filtro": "Filter entfernen", + "Rimuovi immagine": "Bild entfernen", + "Rimuovi immagine attuale": "Aktuelles Bild entfernen", + "Rimuovi immagine di sfondo attuale": "Aktuelles Hintergrundbild entfernen", + "Rimuovi logo attuale": "Aktuelles Logo entfernen", + "Rimuovi tutti i filtri": "Alle Filter entfernen", + "Rinnova": "Verlängern", + "Rinnova prestito (+14 giorni)": "Ausleihe verlängern (+14 Tage)", + "Rinnova prestito?": "Ausleihe verlängern?", + "Rinnovare il prestito? La scadenza verrà estesa di 14 giorni.": "Ausleihe verlängern? Das Fälligkeitsdatum wird um 14 Tage verlängert.", + "Rinnovi": "Verlängerungen", + "Rinnovi Effettuati:": "Durchgeführte Verlängerungen:", + "Rinnovi effettuati": "Durchgeführte Verlängerungen", + "Rinnovo prestito fallito": "Ausleihverlängerung fehlgeschlagen", + "Riordina trascinando gli elementi": "Durch Ziehen der Elemente neu anordnen", + "Ripara automaticamente gli errori rilevati": "Erkannte Fehler automatisch reparieren", + "Ripeti la password": "Passwort wiederholen", + "Ripristina": "Zurücksetzen", + "Ripristina Default": "Standard wiederherstellen", + "Ripristinare i colori?": "Farben zurücksetzen?", + "Ripristinare questo backup?": "Diese Sicherung wiederherstellen?", + "Ripristinato": "Wiederhergestellt", + "Ripristino": "Wiederherstellung", + "Riprova": "Erneut versuchen", + "Riservato": "Reserviert", + "Risolvi i problemi indicati sopra e ricarica la pagina.": "Beheben Sie die oben angegebenen Probleme und laden Sie die Seite neu.", + "Risorsa": "Ressource", + "Risorse esterne": "Externe Ressourcen", + "Rispettiamo il tuo diritto alla privacy. Puoi scegliere di non consentire alcuni tipi di cookie. Le tue preferenze si applicheranno all'intero sito web.": "Wir respektieren Ihr Recht auf Datenschutz. Sie können bestimmte Arten von Cookies ablehnen. Ihre Einstellungen gelten für die gesamte Website.", + "Rispondi": "Antworten", + "Risposta": "Antwort", + "Risposta JSON": "JSON-Antwort", + "Risposta non valida dal servizio ISBN.": "Ungültige Antwort vom ISBN-Dienst.", + "Risposta non valida. Controlla la console per dettagli.": "Ungültige Antwort. Überprüfen Sie die Konsole für Details.", + "Risultati": "Ergebnisse", + "Risultati per '%s' - Catalogo Biblioteca": "Ergebnisse für '%s' – Bibliothekskatalog", + "Ritiri da Confermare": "Zu bestätigende Abholungen", + "Ritiri scaduti elaborati": "Abgelaufene Abholungen verarbeitet", + "Ritiro annullato": "Abholung storniert", + "Ritiro annullato con successo": "Abholung erfolgreich storniert", + "Ritiro confermato con successo": "Abholung erfolgreich bestätigt", + "Ritiro confermato!": "Abholung bestätigt!", + "Ritiro confermato! Il prestito è ora in corso.": "Abholung bestätigt! Die Ausleihe ist jetzt aktiv.", + "Ritiro già confermato o modificato": "Abholung bereits bestätigt oder geändert", + "Ritiro non effettuato": "Abholung nicht erfolgt", + "Ritiro non effettuato entro il termine previsto": "Abholung nicht innerhalb der Frist erfolgt", + "Ritiro scaduto": "Abholung abgelaufen", + "Ritiro scaduto il": "Abholung abgelaufen am", + "Rossi": "Mustermann", + "Route Comuni": "Allgemeine Routen", + "Route Tradotte": "Übersetzte Routen", + "Route aggiornate con successo": "Routen erfolgreich aktualisiert", + "Ruolo": "Rolle", + "Ruolo:": "Rolle:", + "SBN Italia - Integrato": "SBN Italien - Integriert", + "SDK": "SDK", + "SEO - Meta Description": "SEO – Meta-Beschreibung", + "SEO Base": "SEO-Grundlagen", + "SEO Base (Meta Tags)": "SEO-Grundlagen (Meta-Tags)", + "SMTP (custom)": "SMTP (benutzerdefiniert)", + "SMTP Host": "SMTP-Host", + "SMTP Password": "SMTP-Passwort", + "SMTP Personalizzato": "Benutzerdefiniertes SMTP", + "SMTP Port": "SMTP-Port", + "SMTP Username": "SMTP-Benutzername", + "SMTP personalizzato": "Benutzerdefiniertes SMTP", + "SSL": "SSL", + "Salva": "Speichern", + "Salva API Key": "API-Schlüssel speichern", + "Salva Autore": "Autor speichern", + "Salva Configurazione": "Konfiguration speichern", + "Salva Contatti": "Kontakte speichern", + "Salva Editore": "Verlag speichern", + "Salva Identità": "Identität speichern", + "Salva Impostazioni": "Einstellungen speichern", + "Salva Impostazioni Avanzate": "Erweiterte Einstellungen speichern", + "Salva Libro": "Buch speichern", + "Salva Lingua": "Sprache speichern", + "Salva Modifiche": "Änderungen speichern", + "Salva Privacy Policy": "Datenschutzerklärung speichern", + "Salva Route": "Routen speichern", + "Salva Template": "Vorlage speichern", + "Salva Testi Cookie Banner": "Cookie-Banner-Texte speichern", + "Salva filtri correnti": "Aktuelle Filter speichern", + "Salva identità": "Identität speichern", + "Salva impostazioni email": "E-Mail-Einstellungen speichern", + "Salva impostazioni etichette": "Etiketteneinstellungen speichern", + "Salva in UTF-8": "Als UTF-8 speichern", + "Salva la API key in un luogo sicuro. Non sarà possibile visualizzarla nuovamente dopo la creazione.": "Speichern Sie den API-Schlüssel an einem sicheren Ort. Er kann nach der Erstellung nicht erneut angezeigt werden.", + "Salva modifiche": "Änderungen speichern", + "Salva modifiche Homepage": "Homepage-Änderungen speichern", + "Salva template": "Vorlage speichern", + "Salva testi banner": "Banner-Texte speichern", + "Salva utente": "Benutzer speichern", + "Salvataggio in corso...": "Wird gespeichert...", + "Salvataggio...": "Wird gespeichert...", + "Salvato con successo.": "Erfolgreich gespeichert.", + "Sarà pubblicata dopo l'approvazione di un amministratore.": "Wird nach der Genehmigung durch einen Administrator veröffentlicht.", + "Sarà utilizzata per accedere al sistema": "Wird für die Anmeldung am System verwendet", + "Sarà visualizzato nell'header e in tutto il sito": "Wird in der Kopfzeile und auf der gesamten Website angezeigt", + "Scade": "Läuft ab", + "Scadenza": "Fälligkeitsdatum", + "Scadenza Mancante": "Fehlendes Fälligkeitsdatum", + "Scadenza prenotazione": "Ablauf der Vormerkung", + "Scadenza ritiro": "Abholfrist", + "Scadenza ritiro:": "Abholfrist:", + "Scadenza tessera": "Kartenablauf", + "Scadenza:": "Fälligkeitsdatum:", + "Scadenza: %s": "Ablauf: %s", + "Scaduta": "Abgelaufen", + "Scaduta il": "Abgelaufen am", + "Scaduto": "Abgelaufen", + "Scaduto il:": "Abgelaufen am:", + "Scaffale": "Regal", + "Scaffale *": "Regal *", + "Scaffale Narrativa": "Belletristik-Regal", + "Scaffale creato": "Schrank erstellt", + "Scaffale eliminato": "Schrank gelöscht", + "Scaffale obbligatorio": "Schrank erforderlich", + "Scaffali": "Regale", + "Scaffali e mensole": "Regale und Regalböden", + "Scarica": "Herunterladen", + "Scarica Audiobook": "Hörbuch herunterladen", + "Scarica Errori": "Fehler herunterladen", + "Scarica JSON": "JSON herunterladen", + "Scarica PDF": "PDF herunterladen", + "Scarica Ricevuta PDF": "PDF-Quittung herunterladen", + "Scarica Script SQL": "SQL-Skript herunterladen", + "Scarica automaticamente la ricevuta PDF dopo la creazione del prestito.": "Die PDF-Quittung nach der Erstellung der Ausleihe automatisch herunterladen.", + "Scarica copertine": "Cover abrufen", + "Scarica eBook": "eBook herunterladen", + "Scarica esempio_import_libri.csv": "beispiel_import_buecher.csv herunterladen", + "Scarica il CSV di esempio con 3 libri già compilati per capire il formato corretto e iniziare subito.": "Laden Sie die Beispiel-CSV-Datei mit 3 vorausgefüllten Büchern herunter, um das richtige Format zu verstehen und sofort loszulegen.", + "Scarica il file CSV di esempio": "Beispiel-CSV-Datei herunterladen", + "Scarica il report CSV per analizzare gli errori in dettaglio": "Laden Sie den CSV-Bericht herunter, um Fehler im Detail zu analysieren", + "Scarica l'eBook in formato digitale": "Das eBook im digitalen Format herunterladen", + "Scarica ricevuta PDF": "PDF-Quittung herunterladen", + "Scaricamento copertine...": "Cover werden abgerufen...", + "Scarso": "Mangelhaft", + "Scegli": "Auswählen", + "Scegli Icona Font Awesome": "Font Awesome Icon auswählen", + "Scegli come inviare le email dal sistema. Puoi usare la funzione PHP mail(), PHPMailer o un server SMTP esterno.": "Wählen Sie, wie E-Mails vom System gesendet werden sollen. Sie können die PHP-Funktion mail(), PHPMailer oder einen externen SMTP-Server verwenden.", + "Scegli come inviare le email dal sistema. Puoi usare la funzione PHP /usr/bin/php con il percorso corretto di PHP sul tuo server": "Ersetzen Sie /usr/bin/php durch den korrekten PHP-Pfad auf Ihrem Server", + "Sottocategoria": "Unterkategorie", + "Sottodomini devono supportare HTTPS (se usati)": "Subdomains müssen HTTPS unterstützen (falls verwendet)", + "Sottogenere": "Untergenre", + "Sottogenere specifico (opzionale)": "Spezifisches Untergenre (optional)", + "Sottogeneri": "Untergenres", + "Sottotitolo": "Untertitel", + "Sottotitolo CTA": "CTA-Untertitel", + "Sottotitolo del libro (opzionale)": "Buchuntertitel (optional)", + "Sottotitolo sezione": "Bereichsuntertitel", + "Spazio libero": "Freier Speicherplatz", + "Staff": "Mitarbeiter", + "Staff:": "Mitarbeiter:", + "Stai per aggiornare Pinakes alla versione": "Sie sind dabei, Pinakes auf Version zu aktualisieren", + "Stai per eliminare": "Sie sind dabei zu löschen", + "Stai per unire": "Sie sind dabei zusammenzuführen", + "Stai utilizzando l'ultima versione disponibile.": "Sie verwenden die neueste verfügbare Version.", + "Stai utilizzando l'ultima versione.": "Sie verwenden die neueste Version.", + "Stampa": "Drucken", + "Stampa etichetta": "Etikett drucken", + "Standard": "Standard", + "Standard Tirrenia catalogazione": "Standard Tirrenia-Katalogisierung", + "Standard dorso libri (più comune)": "Standard-Buchrücken (am häufigsten)", + "Statistiche": "Statistiken", + "Statistiche Prestiti": "Ausleihstatistiken", + "Statistiche Rapide": "Schnellstatistiken", + "Statistiche aggiornate per": "Statistiken aktualisiert für", + "Statistiche:": "Statistiken:", + "Stato": "Status", + "Stato API": "API-Status", + "Stato API key aggiornato con successo.": "API-Schlüssel-Status erfolgreich aktualisiert.", + "Stato Incongruente": "Statusabweichung", + "Stato aggiornato per %d libri": "Status für %d Bücher aktualisiert", + "Stato attuale:": "Aktueller Status:", + "Stato dell'installazione:": "Installationsstatus:", + "Stato della copia": "Exemplar-Status", + "Stato della copia aggiornato con successo.": "Exemplar-Status erfolgreich aktualisiert.", + "Stato e Gestione": "Status und Verwaltung", + "Stato non valido": "Ungültiger Status", + "Stato non valido.": "Ungültiger Status.", + "Stato prestito": "Ausleihstatus", + "Stato prestito corrente": "Aktueller Ausleihstatus", + "Stato prestito non valido.": "Ungültiger Ausleihstatus.", + "Stato:": "Status:", + "Status attuale di questa copia del libro": "Aktueller Status dieses Buchexemplars", + "Step 1: Creazione backup": "Schritt 1: Backup erstellen", + "Step 2: Download aggiornamento": "Schritt 2: Aktualisierung herunterladen", + "Step 3: Installazione aggiornamento": "Schritt 3: Aktualisierung installieren", + "Storico Import": "Importverlauf", + "Storico Prestiti": "Ausleihverlauf", + "Nella stessa collana": "In derselben Reihe", + "Volumi di quest'opera": "Bände dieses Werks", + "volumi": "Bände", + "Questo libro è il volume %s dell'opera": "Dieses Buch ist Band %s des Werks", + "Gestione Collane": "Reihenverwaltung", + "Gestisci le collane e le serie di libri": "Buchreihen und Serien verwalten", + "Collane totali": "Reihen insgesamt", + "Libri nelle collane": "Bücher in Reihen", + "Nessuna collana trovata. Aggiungi una collana a un libro per iniziare.": "Keine Reihen gefunden. Fügen Sie einem Buch eine Reihe hinzu.", + "Collane": "Reihen", + "Serie e collane di libri": "Serien und Buchreihen", + "Rinomina collana": "Reihe umbenennen", + "Rinomina": "Umbenennen", + "Unisci con altra collana": "Mit anderer Reihe zusammenführen", + "Nome collana di destinazione": "Name der Zielreihe", + "Unisci": "Zusammenführen", + "Sei sicuro? Tutti i libri verranno spostati nella collana di destinazione.": "Sind Sie sicher? Alle Bücher werden in die Zielreihe verschoben.", + "Crea opera multi-volume": "Mehrbändiges Werk erstellen", + "Crea un libro padre che raccoglie tutti i volumi di questa collana.": "Erstellen Sie ein übergeordnetes Buch, das alle Bände dieser Reihe enthält.", + "Titolo dell'opera completa": "Titel des Gesamtwerks", + "Crea opera": "Werk erstellen", + "Collana rinominata: %d libri aggiornati": "Reihe umbenannt: %d Bücher aktualisiert", + "Nome collana non valido": "Ungültiger Reihenname", + "Collane unite: %d libri spostati in \"%s\"": "Reihen zusammengeführt: %d Bücher in \"%s\" verschoben", + "Parametri non validi per l'unione": "Ungültige Parameter für Zusammenführung", + "Opera \"%s\" creata con %d volumi": "Werk \"%s\" erstellt mit %d Bänden", + "Errore nella creazione dell'opera": "Fehler beim Erstellen des Werks", + "Aggiungi volume": "Band hinzufügen", + "Cartaceo": "Druckausgabe", + "eBook": "eBook", + "Audiolibro": "Hörbuch", + "CD Audio": "Audio-CD", + "Vinile": "Schallplatte", + "LP": "LP", + "Cassetta": "Kassette", + "DVD": "DVD", + "Blu-ray": "Blu-ray", + "Digitale": "Digital", + "Cerca libro": "Buch suchen", + "Titolo o ISBN...": "Titel oder ISBN...", + "Numero volume": "Bandnummer", + "Seleziona un libro": "Buch auswählen", + "Volume aggiunto": "Band hinzugefügt", + "Rimuovi volume?": "Band entfernen?", + "Il libro non sarà eliminato, solo la relazione.": "Das Buch wird nicht gelöscht, nur die Verknüpfung.", + "Volume rimosso": "Band entfernt", + "Configura come opera multi-volume": "Als mehrbändiges Werk konfigurieren", + "Errore database": "Datenbankfehler", + "Nuova Collana": "Neue Reihe", + "Collana \"%s\" creata": "Reihe \"%s\" erstellt", + "Descrizione della collana...": "Beschreibung der Reihe...", + "Salva descrizione": "Beschreibung speichern", + "Descrizione salvata": "Beschreibung gespeichert", + "Assegna collana": "Reihe zuweisen", + "Collana assegnata": "Reihe zugewiesen", + "%d libri assegnati alla collana \"%s\"": "%d Bücher der Reihe \"%s\" zugewiesen", + "Elimina collana": "Reihe löschen", + "Rimuove la collana da tutti i libri. I libri non verranno eliminati.": "Entfernen Sie die Reihe von allen Büchern. Die Bücher werden nicht gelöscht.", + "Sei sicuro? La collana verrà rimossa da tutti i libri.": "Sind Sie sicher? Die Reihe wird von allen Büchern entfernt.", + "Collana \"%s\" eliminata (%d libri aggiornati)": "Reihe \"%s\" gelöscht (%d Bücher aktualisiert)", + "International Standard Serial Number (per periodici)": "International Standard Serial Number (für Zeitschriften)", + "ISSN Non Valido": "Ungültige ISSN", + "ISSN deve essere nel formato XXXX-XXXX (8 cifre, l'ultima può essere X).": "ISSN muss im Format XXXX-XXXX sein (8 Ziffern, die letzte kann X sein).", + "ISSN non valido. Il formato corretto è XXXX-XXXX (8 cifre, l'ultima può essere X).": "Ungültige ISSN. Das korrekte Format ist XXXX-XXXX (8 Ziffern; die letzte kann X sein).", + "Relazione ciclica: questo libro è già opera padre del libro selezionato": "Zyklische Beziehung: Dieses Buch ist bereits ein übergeordnetes Werk des ausgewählten Buches", + "Assegna": "Zuweisen", + "es. 1234-5678": "z.B. 1234-5678", + "es. Harry Potter": "z.B. Harry Potter", + "Identificatori": "Kennungen", + "Inserisci un nome": "Namen eingeben", + "Nome della collana": "Reihenname", + "ISSN": "ISSN", + "Volumi": "Bände", + "Successiva": "Nächste", + "Successivo": "Nächste", + "Successo": "Erfolg", + "Successo!": "Erfolg!", + "Suggerimenti": "Tipps", + "Suggerimento": "Tipp", + "Suggerimento:": "Tipp:", + "Suggerisci collocazione": "Standort vorschlagen", + "Suggerito scaffale #${data.scaffale_id}": "Vorgeschlagenes Regal #${data.scaffale_id}", + "Suggerito:": "Vorgeschlagen:", + "Summary (Immagine Piccola)": "Summary (kleines Bild)", + "Summary Large Image (Immagine Grande)": "Summary Large Image (großes Bild)", + "Supporto": "Support", + "Sì": "Ja", + "Sì, Aggiorna": "Ja, aktualisieren", + "Sì, Annulla": "Ja, stornieren", + "Sì, Salva": "Ja, speichern", + "Sì, aggiorna": "Ja, aktualisieren", + "Sì, applica": "Ja, anwenden", + "Sì, approva": "Ja, genehmigen", + "Sì, attiva": "Ja, aktivieren", + "Sì, correggi": "Ja, beheben", + "Sì, crea indici": "Ja, Indizes erstellen", + "Sì, crea tabelle": "Ja, Tabellen erstellen", + "Sì, disattiva": "Ja, deaktivieren", + "Sì, disinstalla": "Ja, deinstallieren", + "Sì, elimina": "Ja, löschen", + "Sì, elimina!": "Ja, löschen!", + "Sì, esegui": "Ja, ausführen", + "Sì, rimuovi": "Ja, entfernen", + "Sì, sincronizza": "Ja, synchronisieren", + "TLS": "TLS", + "Tabella": "Tabelle", + "Tabella %s creata": "Tabelle %s erstellt", + "Tabelle create:": "Erstellte Tabellen:", + "Tabelle di Sistema": "Systemtabellen", + "Tabelle richieste per l'aggiornamento": "Für Aktualisierungen erforderliche Tabellen", + "Tag": "Tag", + "Telefono": "Telefon", + "Telefono *": "Telefon *", + "Telefono Referente": "Telefon Ansprechpartner", + "Telefono:": "Telefon:", + "Tema": "Design", + "Tema Attivo": "Aktives Theme", + "Tema attivato con successo": "Theme erfolgreich aktiviert", + "Tema non trovato": "Theme nicht gefunden", + "Tema salvato con successo": "Theme erfolgreich gespeichert", + "Temi": "Themes", + "Temi Disponibili": "Verfügbare Themes", + "Template": "Vorlagen", + "Template Email": "E-Mail-Vorlagen", + "Template aggiornato con successo!": "Vorlage erfolgreich aktualisiert!", + "Template email": "E-Mail-Vorlagen", + "Termini": "Bedingungen", + "Termini di Servizio": "Nutzungsbedingungen", + "Tessera biblioteca": "Bibliotheksausweis", + "Test": "Test", + "Test Connessione": "Verbindungstest", + "Test Endpoint": "Endpoint testen", + "Test del cron job:": "Cron-Job-Test:", + "Testi Banner": "Banner-Texte", + "Testi Banner Cookie": "Cookie-Banner-Texte", + "Testi Banner Iniziale": "Texte des initialen Banners", + "Testi Cookie Banner": "Cookie-Banner-Texte", + "Testi Modale Preferenze": "Texte des Einstellungsdialogs", + "Testi categorie cookie": "Texte der Cookie-Kategorien", + "Testo Bottone": "Schaltflächentext", + "Testo Privacy": "Datenschutztext", + "Testo che apparirà nel footer del sito": "Text, der in der Fußzeile der Website angezeigt wird", + "Testo checkbox": "Checkbox-Text", + "Testo della checkbox privacy nel form": "Datenschutz-Checkbox-Text im Formular", + "Testo introduttivo": "Einleitungstext", + "Testo principale mostrato nel banner. Puoi usare HTML.": "Haupttext im Banner. Sie können HTML verwenden.", + "Testo pulsante": "Schaltflächentext", + "Testo pulsante \"Accetta tutti\"": "Schaltflächentext \"Alle akzeptieren\"", + "Testo pulsante \"Preferenze\"": "Schaltflächentext \"Einstellungen\"", + "Testo pulsante \"Rifiuta non essenziali\"": "Schaltflächentext \"Nicht erforderliche ablehnen\"", + "Testo pulsante \"Salva selezionati\"": "Schaltflächentext \"Auswahl speichern\"", + "Ti abbiamo inviato un'email con il link per confermare l'indirizzo.": "Wir haben Ihnen eine E-Mail mit dem Bestätigungslink gesendet.", + "Timeout (secondi)": "Timeout (Sekunden)", + "Timestamp": "Zeitstempel", + "Tipo": "Typ", + "Tipo Acquisizione": "Erwerbungsart", + "Tipo Card": "Kartentyp", + "Tipo Contenuto": "Inhaltstyp", + "Tipo MIME non valido. Solo file CSV sono accettati.": "Ungültiger MIME-Typ. Es werden nur CSV-Dateien akzeptiert.", + "Tipo OG": "OG-Typ", + "Tipo Twitter Card": "Twitter Card-Typ", + "Tipo Utente": "Benutzertyp", + "Tipo acquisizione": "Erwerbungsart", + "Tipo di contenuto per Open Graph. Scegli 'Website' per la homepage.": "Inhaltstyp für Open Graph. Wählen Sie 'Website' für die Startseite.", + "Tipo di file non consentito. Sono ammessi solo: %s": "Dateityp nicht erlaubt. Nur erlaubt: %s", + "Tipo di file non supportato. Solo JPEG e PNG sono consentiti.": "Nicht unterstützter Dateityp. Nur JPEG und PNG sind erlaubt.", + "Tipo di file non valido.": "Ungültiger Dateityp.", + "Tipo di file non valido. Carica un'immagine reale.": "Ungültiger Dateityp. Bitte laden Sie ein echtes Bild hoch.", + "Tipo di issue non valido": "Ungültiger Problem-Typ", + "Tipo non valido": "Ungültiger Typ.", + "Tipo utente": "Benutzertyp", + "Tipologia account": "Kontotyp", + "Tipologia:": "Typ:", + "Titolo": "Titel", + "Titolo (opzionale)": "Titel (optional)", + "Titolo 1": "Überschrift 1", + "Titolo 2": "Überschrift 2", + "Titolo 3": "Überschrift 3", + "Titolo A-Z": "Titel A–Z", + "Titolo CTA": "CTA-Titel", + "Titolo Evento": "Veranstaltungstitel", + "Titolo Modale": "Dialog-Titel", + "Titolo OG": "OG-Titel", + "Titolo Open Graph": "Open-Graph-Titel", + "Titolo Pagina": "Seitentitel", + "Titolo SEO": "SEO-Titel", + "Titolo Twitter": "Twitter-Titel", + "Titolo Z-A": "Titel Z–A", + "Titolo del libro": "Buchtitel", + "Titolo della sezione e le 4 card con le caratteristiche": "Bereichstitel und die 4 Funktionskarten", + "Titolo e descrizione mostrati sopra i caroselli dei generi": "Titel und Beschreibung über den Genre-Karussells", + "Titolo libro": "Buchtitel", + "Titolo modale": "Modal-Titel", + "Titolo mostrato quando condividi su Facebook/LinkedIn. Se vuoto, usa il titolo SEO o hero.": "Titel, der beim Teilen auf Facebook/LinkedIn angezeigt wird. Wenn leer, wird der SEO- oder Hero-Titel verwendet.", + "Titolo non disponibile": "Titel nicht verfügbar", + "Titolo obbligatorio mancante": "Pflichtfeld Titel fehlt", + "Titolo pagina": "Seitentitel", + "Titolo per Twitter/X. Se vuoto, usa il titolo Open Graph.": "Titel für Twitter/X. Wenn leer, wird der Open Graph-Titel verwendet.", + "Titolo principale (H1)": "Haupttitel (H1)", + "Titolo sezione": "Bereichstitel", + "Titolo troppo lungo (max 255 caratteri)": "Titel zu lang (max. 255 Zeichen)", + "Titolo, sottotitolo, descrizione...": "Titel, Untertitel, Beschreibung...", + "Titolo...": "Titel...", + "Titolo:": "Titel:", + "Toggle menu": "Menü umschalten", + "Toggle search": "Suche umschalten", + "Token CSRF non valido": "Ungültiges CSRF-Token.", + "Token CSRF non valido. Riprova.": "Ungültiges CSRF-Token. Bitte versuchen Sie es erneut.", + "Token configurato": "Token konfiguriert", + "Token configurato — lascia vuoto per mantenere": "Token konfiguriert — leer lassen zum Beibehalten", + "Token di sicurezza non valido. Riprova.": "Ungültiges Sicherheitstoken. Bitte versuchen Sie es erneut.", + "Top 10 Lettori Più Attivi": "Top 10 der aktivsten Leser", + "Top 10 Libri Più Prestati": "Top 10 der am häufigsten ausgeliehenen Bücher", + "Torna Indietro": "Zurück", + "Torna agli Eventi": "Zurück zu Veranstaltungen", + "Torna agli eventi": "Zurück zu Veranstaltungen", + "Torna ai Libri": "Zurück zu Bücher", + "Torna ai Prestiti": "Zurück zu Ausleihen", + "Torna ai temi": "Zurück zu den Themes", + "Torna al login": "Zurück zur Anmeldung", + "Torna all'Applicazione": "Zurück zur Anwendung", + "Torna all'elenco": "Zurück zur Liste", + "Torna alla Configurazione Database": "Zurück zur Datenbankkonfiguration", + "Torna alla Home": "Zurück zur Startseite", + "Torna alla categoria superiore": "Zurück zur übergeordneten Kategorie", + "Torna alla dashboard": "Zurück zum Dashboard", + "Torna alla lista": "Zurück zur Liste", + "Torna alla panoramica eventi": "Zurück zur Veranstaltungsübersicht", + "Torna alle Impostazioni": "Zurück zu Einstellungen", + "Torna alle Impostazioni CMS": "Zurück zu CMS-Einstellungen", + "Torna alle Lingue": "Zurück zu Sprachen", + "Torna alle Prenotazioni": "Zurück zu Vormerkungen", + "Total users:": "Benutzer gesamt:", + "Totale": "Gesamt", + "Totale Autori": "Autoren gesamt", + "Totale Generi": "Genres gesamt", + "Totale Libri": "Bücher gesamt", + "Totale Prestiti": "Ausleihen gesamt", + "Totale autori": "Autoren gesamt", + "Totale editori:": "Verlage gesamt:", + "Totale libri": "Bücher gesamt", + "Totale libri presenti": "Bücher im Bestand gesamt", + "Totale utenti:": "Benutzer gesamt:", + "Totale: %s righe": "Gesamt: %s Zeilen", + "Totali": "Gesamt", + "Tracce": "Titel", + "Tracklist": "Titelliste", + "Traduttore": "Übersetzer", + "Traduzioni e localizzazione": "Übersetzungen und Lokalisierung", + "Trascina le sezioni per riordinarle. L'ordine sarà salvato automaticamente e rispecchiato nella homepage.": "Ziehen Sie die Bereiche zum Neuordnen. Die Reihenfolge wird automatisch gespeichert und auf der Startseite übernommen.", + "Trascina per riordinare • Il codice deve essere univoco": "Zum Neuordnen ziehen – Der Code muss eindeutig sein", + "Trascina per riordinare • Ogni scaffale + livello deve essere univoco": "Zum Neuordnen ziehen – Jede Regal- und Fachkombination muss eindeutig sein", + "Trascina qui il file CSV o %{browse}": "CSV-Datei hierher ziehen oder %{browse}", + "Trascina qui il file ZIP del plugin o %{browse}": "Plugin-ZIP-Datei hierher ziehen oder %{browse}", + "Trascina qui il logo o %{browse}": "Logo hierher ziehen oder %{browse}", + "Trascina qui l'immagine di sfondo o %{browse}": "Hintergrundbild hierher ziehen oder %{browse}", + "Trascina qui l'immagine o %{browse}": "Bild hierher ziehen oder %{browse}", + "Trascina qui l'immagine, %{browse} o importa da": "Bild hierher ziehen, %{browse} oder importieren von", + "Trascina qui la copertina del libro o %{browse}": "Buchcover hierher ziehen oder %{browse}", + "Trascina qui la copertina del libro o clicca per selezionare": "Buchcover hierher ziehen oder klicken zum Auswählen", + "Trasforma Pinakes in un catalogo di sola consultazione": "Pinakes in einen reinen Katalog umwandeln", + "Trigger database configurati": "Datenbank-Trigger konfiguriert", + "Trigger database: azione manuale richiesta": "Datenbank-Trigger: manuelle Aktion erforderlich", + "Trigger importati OK": "Trigger erfolgreich importiert", + "Troppi errori durante l'import dei dati (%d errori). Primi errori:\n%s": "Zu viele Fehler beim Daten-Import (%d Fehler). Erste Fehler:\n%s", + "Troppi errori durante l'import dello schema (%d errori). Primi errori:\n%s": "Zu viele Fehler beim Schema-Import (%d Fehler). Erste Fehler:\n%s", + "Troppi tentativi. Attendi qualche minuto prima di riprovare": "Zu viele Versuche. Bitte warten Sie einige Minuten, bevor Sie es erneut versuchen", + "Trovate tabelle da backuppare": "Zu sichernde Tabellen gefunden", + "Trovato": "Gefunden", + "Tutorial": "Anleitung", + "Tutte le copie di questo libro hanno già un prestito attivo o prenotato. Attendi che una copia venga restituita.": "Alle Exemplare dieses Buches haben bereits eine aktive oder geplante Ausleihe. Bitte warten Sie, bis ein Exemplar zurückgegeben wird.", + "Tutte le copie in prestito": "Alle Exemplare ausgeliehen", + "Tutte le copie prenotate": "Alle Exemplare vorgemerkt", + "Tutte le date sono in formato ISO 8601 (YYYY-MM-DD HH:MM:SS)": "Alle Daten sind im ISO-8601-Format (YYYY-MM-DD HH:MM:SS)", + "Tutte le mensole": "Alle Fächer", + "Tutte le notifiche del sistema": "Alle Systembenachrichtigungen", + "Tutte le richieste sono state gestite.": "Alle Anfragen wurden bearbeitet.", + "Tutte le risorse del sito devono essere HTTPS": "Alle Website-Ressourcen müssen über HTTPS geladen werden", + "Tutte le route devono iniziare con": "Alle Routen müssen beginnen mit", + "Tutte le tabelle di sistema sono presenti!": "Alle Systemtabellen sind vorhanden!", + "Tutti": "Alle", + "Tutti gli anni": "Alle Jahre", + "Tutti gli autori": "Alle Autoren", + "Tutti gli editori": "Alle Verlage", + "Tutti gli eventi": "Alle Veranstaltungen", + "Tutti gli indici di performance sono presenti.": "Alle Performance-Indizes sind vorhanden.", + "Tutti gli scaffali": "Alle Regale", + "Tutti gli stati": "Alle Status", + "Tutti i controlli di integrità sono passati con successo!": "Alle Integritätsprüfungen wurden erfolgreich bestanden!", + "Tutti i diritti riservati.": "Alle Rechte vorbehalten.", + "Tutti i filtri sono stati rimossi": "Alle Filter wurden entfernt", + "Tutti i generi": "Alle Genres", + "Tutti i libri": "Alle Bücher", + "Tutti i messaggi ricevuti tramite il form contatti": "Alle über das Kontaktformular eingegangenen Nachrichten", + "Tutti i requisiti sono soddisfatti! Puoi procedere con l'installazione.": "Alle Anforderungen sind erfüllt! Sie können mit der Installation fortfahren.", + "Tutti i ruoli": "Alle Rollen", + "Tutti soddisfatti": "Alle erfüllt", + "Tutto": "Alle", + "Tutto aggiornato!": "Alles auf dem neuesten Stand!", + "Tutto sotto controllo!": "Alles unter Kontrolle!", + "Twitter": "Twitter", + "Twitter Card": "Twitter Card", + "Twitter Cards (X)": "Twitter Cards (X)", + "URL Canonico": "Kanonische URL", + "URL Canonico (opzionale)": "Kanonische URL (optional)", + "URL Canonico Mancante": "Fehlende kanonische URL", + "URL Canonico Non Valido": "Ungültige kanonische URL", + "URL Canonico Vuoto": "Leere kanonische URL", + "URL Endpoint API": "API-Endpoint-URL", + "URL Endpoint SRU": "SRU-Endpoint-URL", + "URL Non Valido": "Ungültige URL", + "URL OG": "OG-URL", + "URL completo del sito (es: https://biblioteca.example.com). Usato per link nelle email (verifica account, reset password). Se lasciato vuoto, verrà auto-rilevato.": "Vollständige Website-URL (z. B. https://biblioteca.example.com). Wird für Links in E-Mails verwendet (Kontobestätigung, Passwort zurücksetzen). Wenn leer, wird sie automatisch erkannt.", + "URL completo della pagina (auto-generato se vuoto)": "Vollständige Seiten-URL (wird automatisch generiert, wenn leer)", + "URL della pagina con la cookie policy": "URL der Seite mit der Cookie-Richtlinie", + "URL della pagina con le tecnologie dei cookie": "URL der Seite mit den Cookie-Technologien", + "URL di download non trovato": "Download-URL nicht gefunden", + "URL non valido o non permesso.": "Ungültige oder nicht erlaubte URL.", + "URL non valido.": "Ungültige URL.", + "URL principale del sito. Se vuoto, usa l'URL corrente.": "Haupt-URL der Website. Wenn leer, wird die aktuelle URL verwendet.", + "URL pubblico:": "Öffentliche URL:", + "URL sito web...": "Website-URL...", + "URL...": "URL...", + "Ultima": "Letzte", + "Ultima Versione": "Neueste Version", + "Ultima generazione:": "Letzte Generierung:", + "Ultima modifica": "Zuletzt geändert", + "Ultimi Arrivi": "Neueste Zugänge", + "Ultimi Libri Aggiunti": "Zuletzt hinzugefügte Bücher", + "Ultimi Libri Inseriti": "Zuletzt hinzugefügte Bücher", + "Ultimi aggiunti (data creazione)": "Zuletzt hinzugefügt (Erstellungsdatum)", + "Ultimi modificati (data aggiornamento)": "Zuletzt bearbeitet (Aktualisierungsdatum)", + "Ultimo": "Letzter", + "Ultimo Aggiornamento": "Letzte Aktualisierung", + "Ultimo accesso": "Letzter Zugriff", + "Ultimo aggiornamento": "Letzte Aktualisierung", + "Ultimo uso:": "Letzte Nutzung:", + "Ultimo utilizzo": "Zuletzt verwendet", + "Umberto Eco": "Umberto Eco", + "Un altro aggiornamento è già in corso. Riprova più tardi.": "Ein anderes Update läuft bereits. Bitte versuchen Sie es später erneut.", + "Un backup viene creato automaticamente prima di salvare": "Vor dem Speichern wird automatisch ein Backup erstellt", + "Un'esperienza di lettura moderna, intuitiva e sempre a portata di mano": "Ein modernes, intuitives Leseerlebnis – immer griffbereit", + "Una chiave è attualmente salvata e funzionante. Puoi aggiornarla inserendo un nuovo valore o lasciarla vuota per rimuoverla.": "Ein Schlüssel ist derzeit gespeichert und funktioniert. Sie können ihn aktualisieren, indem Sie einen neuen Wert eingeben, oder leer lassen, um ihn zu entfernen.", + "Una chiave è già salvata. Inserisci un nuovo valore per aggiornarla oppure lascia vuoto per rimuoverla.": "Ein Schlüssel ist bereits gespeichert. Geben Sie einen neuen Wert ein, um ihn zu aktualisieren, oder lassen Sie das Feld leer, um ihn zu entfernen.", + "Una descrizione completa aiuta gli utenti a conoscere meglio l'autore": "Eine ausführliche Beschreibung hilft den Benutzern, den Autor besser kennenzulernen", + "Una mensola con livello %d esiste già in questo scaffale. Usa un livello diverso.": "Ein Fach mit Ebene %d existiert bereits in diesem Regal. Verwenden Sie eine andere Ebene.", + "Una panoramica dei libri che hai salvato per non perderli di vista.": "Eine Übersicht der Bücher, die Sie gespeichert haben, um sie im Blick zu behalten.", + "Unisci autori": "Autoren zusammenführen", + "Unisci editori": "Verlage zusammenführen", + "Unisciti alla nostra community di lettori e scopri il piacere della lettura con la nostra piattaforma moderna.": "Werden Sie Teil unserer Lesergemeinschaft und entdecken Sie die Freude am Lesen mit unserer modernen Plattform.", + "Upload non valido": "Ungültiger Upload", + "Uploader non disponibile": "Uploader nicht verfügbar", + "Usa": "Verwenden", + "Usa 'localhost' (raccomandato, rileva automaticamente TCP/socket). Puoi forzare '127.0.0.1' per TCP.": "Verwenden Sie 'localhost' (empfohlen, erkennt TCP/Socket automatisch). Sie können '127.0.0.1' für TCP erzwingen.", + "Usa codici semplici (A, B, C...)": "Verwenden Sie einfache Codes (A, B, C...)", + "Usa formato: 599 oppure 599.9 oppure 599.93": "Format verwenden: 599 oder 599.9 oder 599.93", + "Usa gli endpoint specifici per il formato legacy": "Verwenden Sie die spezifischen Endpoints für das Legacy-Format", + "Usa i servizi online per precompilare automaticamente i dati del libro": "Nutzen Sie Online-Dienste, um die Buchdaten automatisch auszufüllen", + "Usa il pulsante \"Rigenera adesso\" per crearla": "Verwenden Sie die Schaltfläche \"Jetzt neu generieren\", um sie zu erstellen", + "Usa il separatore %s": "Verwenden Sie das Trennzeichen %s", + "Usa l'editor per formattare il testo, aggiungere link, immagini e altro": "Verwenden Sie den Editor, um Text zu formatieren, Links, Bilder und mehr hinzuzufügen", + "Usa l'editor per formattare il testo, aggiungere link, immagini e altro.": "Verwenden Sie den Editor, um Text zu formatieren, Links, Bilder und mehr hinzuzufügen.", + "Usa le frecce ← → per saltare": "Verwenden Sie die Pfeiltasten ← →, um zu springen", + "Usa questa azione dopo aver importato un grande numero di libri o modifiche ai contenuti CMS.": "Verwenden Sie diese Aktion nach dem Import einer großen Anzahl von Büchern oder CMS-Inhaltsänderungen.", + "Usa questo campo per personalizzare lo stile del sito senza modificare i file di tema.": "Verwenden Sie dieses Feld, um den Stil der Website anzupassen, ohne die Theme-Dateien zu ändern.", + "Usata per login e comunicazioni.": "Wird für Anmeldung und Kommunikation verwendet.", + "Username": "Benutzername", + "Users": "Benutzer", + "Utente": "Benutzer", + "Utente %s (%s) si è registrato": "Benutzer %s (%s) hat sich registriert", + "Utente admin creato:": "Admin-Benutzer erstellt:", + "Utente aggiornato con successo!": "Benutzer erfolgreich aktualisiert!", + "Utente approvato con successo!": "Benutzer erfolgreich genehmigt!", + "Utente attivato direttamente!": "Benutzer direkt aktiviert!", + "Utente creato con successo!": "Benutzer erfolgreich erstellt!", + "Utente eliminato con successo.": "Benutzer erfolgreich gelöscht.", + "Utente prenotante": "Vormerkender Benutzer", + "Utente preselezionato": "Vorausgewählter Benutzer", + "Utente sconosciuto": "Unbekannter Benutzer", + "Utente senza nome": "Unbenannter Benutzer", + "Utente:": "Benutzer:", + "Utenti": "Benutzer", + "Utenti Attivi": "Aktive Benutzer", + "Utenti in Attesa di Approvazione": "Benutzer mit ausstehender Genehmigung", + "Utenti registrati": "Registrierte Benutzer", + "Utilizza l'editor TinyMCE per formattare il testo e Uppy per caricare immagini di alta qualità. Le modifiche saranno immediatamente visibili nella pagina pubblica.": "Verwenden Sie den TinyMCE-Editor, um Text zu formatieren, und Uppy, um hochwertige Bilder hochzuladen. Änderungen werden sofort auf der öffentlichen Seite sichtbar.", + "Utilizziamo i cookie per migliorare la tua esperienza. Continuando a visitare questo sito, accetti il nostro uso dei cookie.": "Wir verwenden Cookies, um Ihre Erfahrung zu verbessern. Durch die weitere Nutzung dieser Website akzeptieren Sie unsere Verwendung von Cookies.", + "Vai": "Los", + "Vai al Login": "Zur Anmeldung", + "Vai al login": "Zur Anmeldung", + "Vai all'Applicazione": "Zur Anwendung", + "Vai all'applicazione": "Zur Anwendung", + "Vai alla Home": "Zur Startseite", + "Validazione prestito fallita": "Ausleihvalidierung fehlgeschlagen", + "Valore applicato": "Wert übernommen", + "Valore compreso tra 1 e 30 giorni. Consigliato: 3 giorni": "Wert zwischen 1 und 30 Tagen. Empfohlen: 3 Tage", + "Valore non valido": "Ungültiger Wert", + "Valutazione *": "Bewertung *", + "Valutazione non valida (1-5 stelle)": "Ungültige Bewertung (1–5 Sterne)", + "Variabili disponibili:": "Verfügbare Variablen:", + "Vecchio": "Alt", + "Vedi": "Anzeigen", + "Vedi Dettagli": "Details anzeigen", + "Vedi alternative": "Alternativen anzeigen", + "Vedi dettagli": "Details anzeigen", + "Vedi istruzioni sotto per correggere manualmente.": "Siehe Anleitung unten zur manuellen Korrektur.", + "Vedi tutte le notifiche": "Alle Benachrichtigungen anzeigen", + "Vedi tutti": "Alle anzeigen", + "Vedi tutti gli eventi": "Alle Veranstaltungen anzeigen", + "Verifica Leggibilità": "Lesbarkeit prüfen", + "Verifica che il database sia accessibile e configurato correttamente nel file .env": "Überprüfen Sie, ob die Datenbank erreichbar und in der .env-Datei korrekt konfiguriert ist", + "Verifica che le credenziali del database nel file .env siano corrette": "Überprüfen Sie, ob die Datenbank-Zugangsdaten in der .env-Datei korrekt sind", + "Verifica coerenza e integrità del database": "Datenbankkonsistenz und -integrität prüfen", + "Verifica completata OK": "Überprüfung erfolgreich abgeschlossen", + "Verifica i permessi di esecuzione: chmod +x cron/automatic-notifications.php": "Überprüfen Sie die Ausführungsberechtigungen: chmod +x cron/automatic-notifications.php", + "Verifica in corso...": "Überprüfung läuft...", + "Verifica installazione...": "Installation wird überprüft...", + "Verifica reCAPTCHA fallita. Riprova.": "reCAPTCHA-Überprüfung fehlgeschlagen. Bitte versuchen Sie es erneut.", + "Verifica versioni": "Versionen prüfen", + "Verificato": "Verifiziert", + "Verrà creato automaticamente un backup prima dell'aggiornamento.": "Vor der Aktualisierung wird automatisch ein Backup erstellt.", + "Verrà creato un backup completo del database.": "Es wird ein vollständiges Datenbank-Backup erstellt.", + "Versione": "Version", + "Versione Installata": "Installierte Version", + "Versione Installer:": "Installer-Version:", + "Versione non specificata": "Version nicht angegeben", + "Versione non trovata": "Version nicht gefunden", + "Versione:": "Version:", + "Via Roma 123, 00100 Roma RM, Italia": "Musterstraße 123, 10115 Berlin, Deutschland", + "Via, numero civico, città, CAP": "Straße, Hausnummer, Stadt, PLZ", + "Via, numero...": "Straße, Nummer...", + "Video": "Video", + "Video tutorial": "Video-Tutorial", + "Visibile": "Sichtbar", + "Visibile pubblicamente sulla pagina contatti": "Öffentlich sichtbar auf der Kontaktseite", + "Visibilità Sezione Eventi": "Sichtbarkeit des Veranstaltungsbereichs", + "Visibilità aggiornata!": "Sichtbarkeit aktualisiert!", + "Visita il sito ufficiale": "Offizielle Website besuchen", + "Vista griglia": "Rasteransicht", + "Vista tabella": "Tabellenansicht", + "Visualizza": "Anzeigen", + "Visualizza Libro": "Buch anzeigen", + "Visualizza Tutte le Categorie": "Alle Kategorien anzeigen", + "Visualizza Tutto il Catalogo": "Gesamten Katalog anzeigen", + "Visualizza dettagli": "Details anzeigen", + "Visualizza dettagli libro": "Buchdetails anzeigen", + "Visualizza e esporta l'elenco dei libri per posizione fisica": "Bücherliste nach physischem Standort anzeigen und exportieren", + "Visualizza e gestisci tutti i prestiti della biblioteca": "Alle Ausleihen der Bibliothek anzeigen und verwalten", + "Visualizza la cronologia degli import CSV e LibraryThing con report errori dettagliati": "Zeigen Sie den Verlauf der CSV- und LibraryThing-Importe mit detaillierten Fehlerberichten an", + "Visualizza pagina live": "Live-Seite anzeigen", + "Visualizzazione da _START_ a _END_ di _TOTAL_ libri": "Anzeige von _START_ bis _END_ von _TOTAL_ Büchern", + "Visualizzazione gerarchica di generi e sottogeneri": "Hierarchische Ansicht von Genres und Untergenres", + "Voci totali": "Einträge gesamt", + "Vuoi aggiornare il libro \"${title}\"?": "Möchten Sie das Buch \"${title}\" aktualisieren?", + "Vuoi aggiornare il libro \"%s\"?": "Möchten Sie das Buch \"%s\" aktualisieren?", + "Vuoi aggiornare lo stato di questa copia?": "Möchten Sie den Status dieses Exemplars aktualisieren?", + "Vuoi approvare questa recensione e renderla visibile sul sito?": "Möchten Sie diese Rezension genehmigen und auf der Website sichtbar machen?", + "Vuoi attivare questo plugin?": "Möchten Sie dieses Plugin aktivieren?", + "Vuoi aumentare il numero di copie di questo libro?": "Möchten Sie die Anzahl der Exemplare dieses Buches erhöhen?", + "Vuoi correggere automaticamente i problemi di integrità rilevati?": "Möchten Sie die erkannten Integritätsprobleme automatisch beheben?", + "Vuoi creare gli indici mancanti? Questa operazione migliorerà le performance del database.": "Möchten Sie die fehlenden Indizes erstellen? Dieser Vorgang verbessert die Datenbankleistung.", + "Vuoi creare le tabelle di sistema mancanti? Queste sono necessarie per il sistema di aggiornamento.": "Möchten Sie die fehlenden Systemtabellen erstellen? Diese sind für das Aktualisierungssystem erforderlich.", + "Vuoi disattivare questo plugin?": "Möchten Sie dieses Plugin deaktivieren?", + "Vuoi disconnettere questo dispositivo?": "Möchten Sie dieses Gerät abmelden?", + "Vuoi disconnettere tutti i dispositivi? Dovrai effettuare nuovamente l'accesso su ogni dispositivo.": "Möchten Sie alle Geräte abmelden? Sie müssen sich auf jedem Gerät erneut anmelden.", + "Vuoi eliminare definitivamente questa recensione? Questa azione non può essere annullata.": "Möchten Sie diese Rezension endgültig löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "Vuoi eliminare questo elemento?": "Möchten Sie dieses Element löschen?", + "Vuoi eseguire la manutenzione completa del sistema? Questa operazione potrebbe richiedere alcuni minuti.": "Möchten Sie die vollständige Systemwartung ausführen? Dieser Vorgang kann einige Minuten dauern.", + "Vuoi impostare APP_CANONICAL_URL a:": "Möchten Sie APP_CANONICAL_URL setzen auf:", + "Vuoi procedere?": "Möchten Sie fortfahren?", + "Vuoi rifiutare questa recensione? L'utente verrà avvisato dell'esito.": "Möchten Sie diese Rezension ablehnen? Der Benutzer wird über das Ergebnis benachrichtigt.", + "WCAG AA Conforme": "WCAG AA konform", + "Website (Sito Web)": "Website", + "Wishlist": "Wunschliste", + "Wishlist disponibile": "Wunschliste verfügbar", + "Working...": "In Bearbeitung...", + "Yes, fix": "Ja, beheben", + "Yes, run": "Ja, ausführen", + "Zona Pericolosa": "Gefahrenbereich", + "acquisto": "Kauf", + "agosto": "August", + "al": "bis", + "altamente consigliato": "dringend empfohlen", + "aprile": "April", + "attivata": "aktiviert", + "autori": "Autoren", + "autori. Questa azione non può essere annullata.": "Autoren. Diese Aktion kann nicht rückgängig gemacht werden.", + "autori. Tutti i libri verranno assegnati all'autore risultante.": "Autoren. Alle Bücher werden dem resultierenden Autor zugeordnet.", + "biblioteca, prestito libri, catalogo online, scopri libri, prenotazioni": "Bibliothek, Buchausleihe, Online-Katalog, Bücher entdecken, Vormerkungen", + "bottoni nelle card": "Schaltflächen in Karten", + "bottoni principali": "Hauptschaltflächen", + "chiavi": "Schlüssel", + "chiavi tradotte": "übersetzte Schlüssel", + "classe principale": "Hauptklasse", + "come nuovo autore": "als neuer Autor", + "completamento": "Abschluss", + "con successo": "erfolgreich", + "copi": "Exemplar(e)", + "copia": "Exemplar", + "copie": "Exemplare", + "crontab -e": "crontab -e", + "danneggiato": "beschädigt", + "della lingua desiderata.": "der gewünschten Sprache.", + "deve iniziare con": "muss beginnen mit", + "di": "von", + "di %s": "von %s", + "dicembre": "Dezember", + "directory": "Verzeichnisse", + "disattivata": "deaktiviert", + "disponibile": "verfügbar", + "disponibili ora": "jetzt verfügbar", + "donazione": "Spende", + "dopo aver completato l'installazione.": "nach Abschluss der Installation.", + "eBook (PDF/ePub)": "eBook (PDF/ePub)", + "eBook caricato!": "eBook hochgeladen!", + "eBook disponibile": "eBook verfügbar", + "editori": "Verlage", + "editori. Questa azione non può essere annullata.": "Verlage. Diese Aktion kann nicht rückgängig gemacht werden.", + "editori. Tutti i libri verranno assegnati all'editore risultante.": "Verlage. Alle Bücher werden dem resultierenden Verlag zugeordnet.", + "elementi": "Elemente", + "elemento": "Element", + "elimina la cartella": "den Ordner löschen", + "errore di comunicazione con il server": "Kommunikationsfehler mit dem Server", + "es. 0.450": "z. B. 0,450", + "es. 15": "z. B. 15", + "es. 19.90": "z. B. 19,90", + "es. 2020": "z. B. 2020", + "es. 2024": "z. B. 2024", + "es. 2025": "z. B. 2025", + "es. 21x14 cm": "z. B. 21x14 cm", + "es. 26 agosto 2025": "z. B. 26. August 2025", + "es. 320": "z. B. 320", + "es. 599.9, 004.6782, 641.5945": "z.B. 599.9, 004.6782, 641.5945", + "es. 599.9, 004.6782, 641.5945, 599.1": "z.B. 599.9, 004.6782, 641.5945, 599.1", + "es. 8842935786": "z. B. 8842935786", + "es. 978-88-429-3578-0": "z. B. 978-88-429-3578-0", + "es. 9788842935780": "z. B. 9788842935780", + "es. Acquisto, Donazione, Prestito": "z. B. Kauf, Spende, Ausleihe", + "es. Biblioteca Civica": "z. B. Stadtbibliothek", + "es. Copertina rigida, Brossura": "z. B. Hardcover, Taschenbuch", + "es. Fantasy contemporaneo": "z. B. Zeitgenössische Fantasy", + "es. Gianni De Conno": "z. B. Gianni De Conno", + "es. I Classici": "z. B. Die Klassiker", + "es. INV-2024-001": "z. B. INV-2024-001", + "es. Integrazione Sito Web": "z. B. Website-Integration", + "es. Italiano, Inglese": "z. B. Italienisch, Englisch", + "es. La morale anarchica": "z. B. Die anarchistische Moral", + "es. Mario Rossi": "z. B. Max Mustermann", + "es. Noir mediterraneo": "z. B. Mediterraner Noir", + "es. Prima edizione": "z. B. Erstausgabe", + "es. RSSMRA80A01H501U": "z. B. RSSMRA80A01H501U", + "es. Urban fantasy": "z. B. Urban Fantasy", + "es. noreply@biblioteca.local": "z. B. noreply@bibliothek.local", + "es. romanzo, fantasy, avventura (separare con virgole)": "z. B. Roman, Fantasy, Abenteuer (mit Kommas trennen)", + "eventi": "Veranstaltungen", + "eventi, biblioteca, cultura": "Veranstaltungen, Bibliothek, Kultur", + "fallite.": "fehlgeschlagen.", + "fas fa-users": "fas fa-users", + "febbraio": "Februar", + "gennaio": "Januar", + "giorni prima della scadenza": "Tage vor Ablauf", + "giugno": "Juni", + "https://www.editore.com": "https://www.verlag.de", + "icone disponibili": "verfügbare Symbole", + "in attesa": "ausstehend", + "in_corso": "laufend", + "in_ritardo": "überfällig", + "info@editore.com": "info@verlag.de", + "installazione inglese usa": "Englische Installation verwendet", + "kg": "kg", + "libri": "Bücher", + "libri eliminati": "Bücher gelöscht", + "libri trovati": "Bücher gefunden", + "libri. Questa azione non può essere annullata.": "Bücher. Diese Aktion kann nicht rückgängig gemacht werden.", + "libro": "Buch", + "libro trovato": "Buch gefunden", + "linea": "Zeile", + "lingue": "Sprachen", + "lingue. Errori:": "Sprachen. Fehler:", + "link, accenti": "Links, Akzente", + "luglio": "Juli", + "maggio": "Mai", + "manutenzione": "Wartung", + "mario.rossi@email.it": "max.mustermann@email.de", + "marzo": "März", + "minuti fa": "vor Minuten", + "nell'header. Non includere i tag": "im Header. Fügen Sie keine Tags ein", + "nella directory dell'applicazione.": "im Anwendungsverzeichnis.", + "nella nostra biblioteca.": "in unserer Bibliothek.", + "nella root del progetto impedisce qualsiasi accesso non autorizzato.": "im Projektstammverzeichnis verhindert jeden unbefugten Zugriff.", + "non può contenere spazi": "darf keine Leerzeichen enthalten", + "non può essere vuota": "darf nicht leer sein", + "novembre": "November", + "o multipli separati da |": "oder mehrere getrennt durch |", + "o multipli: Engels;Marx": "oder mehrere: Engels;Marx", + "opzionale": "optional", + "opzionali": "optional", + "ordine:": "Reihenfolge:", + "ore fa": "vor Stunden", + "ottobre": "Oktober", + "pagina": "Seite", + "pagine": "Seiten", + "per conformità GDPR.": "zur DSGVO-Konformität.", + "per evitare blocchi (delay di 3 secondi tra ogni richiesta).": "um Blockierungen zu vermeiden (3 Sekunden Verzögerung zwischen jeder Anfrage).", + "per il giorno": "für den Tag", + "per pagina": "pro Seite", + "perso": "verloren", + "preferiti": "Favoriten", + "premi Invio per crearne uno nuovo.": "drücken Sie die Eingabetaste, um einen neuen zu erstellen.", + "prenotato": "vorgemerkt", + "prenotazione attiva": "aktive Vormerkung", + "prenotazioni": "Vormerkungen", + "prenotazioni attive": "aktive Vormerkungen", + "prestato": "ausgeliehen", + "prestiti attivi": "aktive Ausleihen", + "prestiti passati": "vergangene Ausleihen", + "prestiti totali": "Ausleihen gesamt", + "prestito attivo": "aktive Ausleihe", + "prestito passato": "vergangene Ausleihe", + "prima di procedere.": "bevor Sie fortfahren.", + "recensione": "Rezension", + "recensioni": "Rezensionen", + "referente@editore.com": "kontakt@verlag.de", + "restituito": "zurückgegeben", + "richiesta in sospeso": "ausstehende Anfrage", + "richieste in sospeso": "ausstehende Anfragen", + "risultati": "Ergebnisse", + "risultato": "Ergebnis", + "secondi (min: 5, max: 60)": "Sekunden (min: 5, max: 60)", + "seleziona": "durchsuchen", + "seleziona file": "Datei auswählen", + "selezionati": "ausgewählt", + "sessioni attive": "aktive Sitzungen", + "settembre": "September", + "sfoglia": "durchsuchen", + "sottogeneri": "Untergenres", + "sul server tramite SSH.": "auf dem Server über SSH.", + "titoli": "Titel", + "utente@example.com": "benutzer@beispiel.de", + "utenti": "Benutzer", + "verranno automaticamente selezionati.": "werden automatisch ausgewählt.", + "visualizzazione per copia": "Ansicht nach Exemplar", + "Български (BG)": "Bulgarisch (BG)", + "עברית (HE)": "Hebräisch (HE)", + "– Nessuno –": "– Keine –", + "••••••••": "••••••••", + "⚙️ Comportamento Automatico: Se inserisci codice in \"JavaScript Analitici\" o \"JavaScript Marketing\", i rispettivi toggle in Impostazioni Privacy verranno automaticamente selezionati.": "⚙️ Automatisches Verhalten: Wenn Sie Code in \"Analytics JavaScript\" oder \"Marketing JavaScript\" einfügen, werden die entsprechenden Schalter in den Datenschutzeinstellungen automatisch aktiviert.", + "⚠️ AZIONE RICHIESTA: Installazione Dipendenze PHP": "⚠️ AKTION ERFORDERLICH: Installation der PHP-Abhängigkeiten", + "⚠️ Privacy: Le mappe esterne vengono caricate solo se l'utente accetta i cookie Analytics.": "⚠️ Datenschutz: Externe Karten werden nur geladen, wenn der Benutzer Analytics-Cookies akzeptiert.", + "✅ Dipendenze PHP installate correttamente": "✅ PHP-Abhängigkeiten korrekt installiert", + "✓ Connessione riuscita! Database è vuoto e pronto per l'installazione.": "✓ Verbindung erfolgreich! Datenbank ist leer und bereit für die Installation.", + "✓ Crea autori mancanti": "✓ Fehlende Autoren erstellen", + "✓ Crea editori mancanti": "✓ Fehlende Verlage erstellen", + "✓ Report errori": "✓ Fehlerbericht", + "✓ Validazione dati": "✓ Datenvalidierung", + "❌ Errore di comunicazione con il server": "Kommunikationsfehler mit dem Server", + "💡 Non hai accesso SSH?": "💡 Sie haben keinen SSH-Zugang?", + "📋 Importante: Devi elencare manualmente i cookie tracciati da questi script nella Pagina Cookie per conformità GDPR.": "📋 Wichtig: Sie müssen die von diesen Skripten erfassten Cookies manuell auf der Cookie-Seite auflisten, um die DSGVO-Konformität zu gewährleisten.", + "📋 Istruzioni SSH (Click per espandere/chiudere)": "📋 SSH-Anleitung (Klicken zum Ein-/Ausklappen)", + "🔒 Sicurezza Importante": "🔒 Wichtige Sicherheit", + "Leggi PDF": "PDF lesen", + "Chiudi Visualizzatore": "Viewer schließen", + "Visualizzatore PDF": "PDF-Viewer", + "Usa la funzione di ricerca del browser per trovare testo nel documento": "Verwenden Sie die Suchfunktion des Browsers, um Text im Dokument zu finden", + "Usa il controllo schermo intero del viewer o del browser": "Verwenden Sie die Vollbildsteuerung des Viewers oder Browsers", + "Condivisione": "Teilen", + "Seleziona i pulsanti di condivisione da mostrare nella pagina del libro.": "Wählen Sie die Teilen-Schaltflächen aus, die auf der Buchseite angezeigt werden sollen.", + "Nessun pulsante selezionato": "Keine Schaltflächen ausgewählt", + "Salva impostazioni condivisione": "Freigabeeinstellungen speichern", + "Impostazioni di condivisione aggiornate.": "Freigabeeinstellungen aktualisiert.", + "Condividi su X": "Auf X teilen", + "Condividi su Telegram": "Auf Telegram teilen", + "Condividi su LinkedIn": "Auf LinkedIn teilen", + "Condividi su Reddit": "Auf Reddit teilen", + "Condividi su Pinterest": "Auf Pinterest teilen", + "Condividi su Threads": "Auf Threads teilen", + "Condividi su Bluesky": "Auf Bluesky teilen", + "Condividi su Tumblr": "Auf Tumblr teilen", + "Salva su Pocket": "Auf Pocket speichern", + "Condividi su VK": "Auf VK teilen", + "Condividi su LINE": "Auf LINE teilen", + "Invia via SMS": "Per SMS senden", + "Invia per email": "Per E-Mail senden", + "Copia link": "Link kopieren", + "Collezione: %d libri, %d autori, %d editori.": "Sammlung: %d Bücher, %d Autoren, %d Verlage.", + "Catalogo bibliotecario gestito con [Pinakes](https://github.com/fabiodalez-dev/Pinakes). Disponibile in: %s.": "Bibliothekskatalog betrieben mit [Pinakes](https://github.com/fabiodalez-dev/Pinakes). Verfügbar in: %s.", + "Pagine Principali": "Hauptseiten", + "Sfoglia e cerca la collezione completa": "Die gesamte Buchsammlung durchsuchen", + "Informazioni sulla biblioteca": "Über diese Bibliothek", + "Calendario eventi culturali": "Kulturveranstaltungskalender", + "Informativa sulla privacy": "Datenschutzerklärung", + "Feed e Scoperta": "Feeds & Entdecken", + "Feed RSS": "RSS-Feed", + "Ultime aggiunte al catalogo (RSS 2.0)": "Neueste Katalogeinträge (RSS 2.0)", + "Indice completo degli URL": "Vollständiges URL-Verzeichnis", + "Interoperabilità bibliotecaria (MARCXML, Dublin Core)": "Bibliotheksinteroperabilität (MARCXML, Dublin Core)", + "Autenticazione utente": "Benutzeranmeldung", + "Registrazione nuovo utente": "Neue Benutzerregistrierung", + "Genera automaticamente un file llms.txt per rendere la biblioteca comprensibile ai modelli linguistici (LLM)": "Automatische Generierung einer llms.txt-Datei, damit die Bibliothek für große Sprachmodelle (LLMs) verständlich wird", + "Cos'è llms.txt:": "Was ist llms.txt:", + "È uno standard emergente (llmstxt.org) che fornisce ai motori AI un sommario strutturato del sito in formato Markdown. Quando attivo, il file viene generato dinamicamente con le statistiche della biblioteca, le pagine pubbliche e le informazioni API.": "Ein aufkommender Standard (llmstxt.org), der KI-Systemen eine strukturierte Markdown-Zusammenfassung der Website bereitstellt. Wenn aktiviert, wird die Datei dynamisch mit Bibliotheksstatistiken, öffentlichen Seiten und API-Informationen generiert.", + "Abilita llms.txt": "llms.txt aktivieren", + "Rende disponibile /llms.txt e lo aggiunge a robots.txt": "Macht /llms.txt verfügbar und fügt es zur robots.txt hinzu", + "Disattivato": "Deaktiviert", + "Tipo Media": "Medientyp", + "Disco": "Schallplatte", + "Tutti i media": "Alle Medien", + "Impossibile scaricare (senza ISBN/barcode):": "Download nicht möglich (kein ISBN/Barcode):" } \ No newline at end of file diff --git a/locale/en_US.json b/locale/en_US.json index 9229580c..3e1c19d6 100644 --- a/locale/en_US.json +++ b/locale/en_US.json @@ -1,4196 +1,4197 @@ { - "\"%s\" prestato a %s è in ritardo di %d giorni": "\"%s\" loaned to %s is %d days overdue", - "$1": "$1", - "$2": "$2", - "%d Problemi": "%d Issues", - "%d minuti fa": "%d minutes ago", - "%d minuto fa": "%d minute ago", - "%d notifica non letta": "%d unread notification", - "%d notifiche non lette": "%d unread notifications", - "%d ora fa": "%d hour ago", - "%d ore fa": "%d hours ago", - "%d prenotazione attiva": "%d active reservation", - "%d prenotazioni attive": "%d active reservations", - "%d prestiti attivi": "%d active loans", - "%d prestiti in ritardo": "%d overdue loans", - "%d prestiti passati": "%d past loans", - "%d prestito attivo": "%d active loan", - "%d prestito in ritardo": "%d overdue loan", - "%d prestito passato": "%d past loan", - "%d problemi rilevati": "%d issues detected", - "%d recensione": "%d review", - "%d recensioni": "%d reviews", - "%d richiesta in sospeso": "%d pending request", - "%d richieste in sospeso": "%d pending requests", - "%d titoli": "%d titles", - "%s ha prenotato \"%s\"": "%s has reserved \"%s\"", - "(filtrati da _MAX_ libri totali)": "(filtered from _MAX_ total books)", - "(opzionale - URL completo)": "(optional - full URL)", - "(opzionale - max 160 caratteri)": "(optional - max 160 characters)", - "(opzionale - max 60 caratteri)": "(optional - max 60 characters)", - "(opzionale - separate da virgola)": "(optional - comma separated)", - "+ 15 campi aggiuntivi disponibili (vedi CSV di esempio)": "+ 15 additional fields available (see example CSV)", - "+39 02 1234567": "+1 (555) 123-4567", - "+39 123 456 7890": "+1 123 456 7890", - ", %d errori": ", %d errors", - ", %d libri arricchiti con scraping": ", %d books enriched via scraping", - "-- Seleziona --": "-- Select --", - "-- Seleziona un template --": "-- Select a template --", - "... e altri %d errori": "... and %d more errors", - ".env caricato OK": ".env loaded OK", - "/* Inserisci il tuo codice CSS qui */\n/* Esempio: */\n/* body { font-size: 16px; } */": "/* Insert your CSS code here */\n/* Example: */\n/* body { font-size: 16px; } */", - "// Script analytics (es. Google Analytics)\n// Esempio Google Analytics 4:\n// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n// ga('create', 'UA-XXXXX-Y', 'auto');\n// ga('send', 'pageview');": "// Analytics scripts (e.g. Google Analytics)\n// Google Analytics 4 Example:\n// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n// ga('create', 'UA-XXXXX-Y', 'auto');\n// ga('send', 'pageview');", - "// Script essenziali (es. chat, accessibility)\n// Esempio:\n// console.log('Essential JS loaded');": "// Essential scripts (e.g. chat, accessibility)\n// Example:\n// console.log('Essential JS loaded');", - "// Script marketing (es. Facebook Pixel)\n// Esempio Facebook Pixel:\n// !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n// n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n// n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n// t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n// document,'script','https://connect.facebook.net/en_US/fbevents.js');\n// fbq('init', 'YOUR_PIXEL_ID');\n// fbq('track', 'PageView');": "// Marketing scripts (e.g. Facebook Pixel)\n// Facebook Pixel Example:\n// !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n// n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n// n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n// t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n// document,'script','https://connect.facebook.net/en_US/fbevents.js');\n// fbq('init', 'YOUR_PIXEL_ID');\n// fbq('track', 'PageView');", - "/catalogo": "/catalog", - "0-10 libri": "0-10 books", - "1. Accesso al server": "1. Server Access", - "1. Collegati al server via SSH:": "1. Connect to the server via SSH:", - "101-500 libri": "101-500 books", - "11-50 libri": "11-50 books", - "2. Aggiungi una delle configurazioni seguenti:": "2. Add one of the following configurations:", - "2. Vai nella directory dell'applicazione:": "2. Go to the application directory:", - "3. Installa le dipendenze con Composer:": "3. Install dependencies with Composer:", - "4. Verifica che le dipendenze siano state installate:": "4. Verify that dependencies have been installed:", - "51-100 libri": "51-100 books", - ": attiva per ordinare la colonna in ordine crescente": ": activate to sort column ascending", - ": attiva per ordinare la colonna in ordine decrescente": ": activate to sort column descending", - "A": "A", - "API": "API", - "API Keys": "API Keys", - "API Pubblica": "Public API", - "API abilitata con successo.": "API enabled successfully.", - "API disabilitata con successo.": "API disabled successfully.", - "API key creata con successo.": "API key created successfully.", - "API key eliminata con successo.": "API key deleted successfully.", - "AVVISO Trigger:": "Trigger WARNING:", - "Abilita": "Enable", - "Abilita Cookie Banner": "Enable Cookie Banner", - "Abilita Modalità Catalogo": "Enable Catalogue Mode", - "Abilita Modalità Solo Catalogo": "Enable Catalogue Only Mode", - "Abilita o disabilita l'accesso all'API pubblica": "Enable or disable public API access", - "Abilitata - Visibile nel frontend": "Enabled - Visible in frontend", - "Abilitata": "Enabled", - "Abilitato": "Enabled", - "Accedi": "Login", - "Directory Upload Pubblici": "Public Uploads Directory", - "Accedi a /installer/?force=1 per forzare una reinstallazione": "Go to /installer/?force=1 to force a reinstallation", - "Accedi al server tramite SSH e modifica il crontab:": "Access the server via SSH and edit the crontab:", - "Accedi al tuo account": "Sign in to your account", - "Accedi all'area admin con le credenziali sopra indicate": "Log in to the admin area with the credentials above", - "Accedi per aggiungere ai Preferiti": "Log in to add to Favorites", - "Accesso": "Login", - "Accesso Richiesto": "Login Required", - "Accesso in corso...": "Signing in...", - "Accesso non autorizzato": "Unauthorized access", - "Accetta selezionati": "Accept Selected", - "Accetta tutti": "Accept All", - "Accetto la": "I accept the", - "Account": "Account", - "Account In Attesa": "Pending Account", - "Account Sospeso": "Suspended Account", - "Account creato con successo! Verifica la tua email.": "Account created successfully! Check your email.", - "Account creato! In attesa di approvazione da parte dell'amministratore.": "Account created! Awaiting administrator approval.", - "Acquisto": "Purchase", - "Adesso": "Just now", - "Admin": "Admin", - "Admin Dewey": "Dewey Admin", - "Aggiorna": "Refresh", - "Aggiorna Dati": "Update Data", - "Aggiorna Evento": "Update Event", - "Aggiorna Statistiche": "Refresh Statistics", - "Aggiorna da ISBN": "Update from ISBN", - "Aggiorna i dettagli del libro:": "Update book details:", - "Aggiorna i dettagli dell'autore: %s": "Update author details: %s", - "Aggiorna i dettagli dell'editore:": "Update publisher details:", - "Aggiorna le informazioni del profilo selezionato.": "Update selected profile information.", - "Aggiorna password": "Update password", - "Aggiorna Ora": "Update Now", - "Aggiornamento alla versione %s completato": "Update to version %s completed", - "Aggiornamento completato!": "Update completed!", - "Aggiornamento completato con successo": "Update completed successfully", - "Aggiornamento fallito": "Update failed", - "Aggiornamento già in corso": "Update already in progress", - "Avvio aggiornamento": "Starting update", - "Avvio backup database": "Starting database backup", - "Backup completato": "Backup completed", - "Backup database completato": "Database backup completed", - "Backup tabella": "Backing up table", - "Download completato": "Download completed", - "Errore backup database": "Database backup error", - "Errore fatale durante aggiornamento": "Fatal error during update", - "Impossibile aprire file di backup per scrittura": "Unable to open backup file for writing", - "Impossibile creare lock file": "Unable to create lock file", - "Installazione completata": "Installation completed", - "Memory limit aumentato": "Memory limit increased", - "Modalità manutenzione rimossa automaticamente (scaduta)": "Maintenance mode automatically removed (expired)", - "Step 1: Creazione backup": "Step 1: Creating backup", - "Step 2: Download aggiornamento": "Step 2: Downloading update", - "Step 3: Installazione aggiornamento": "Step 3: Installing update", - "Trovate tabelle da backuppare": "Found tables to backup", - "Errore SQL durante migrazione %s: %s": "SQL error during migration %s: %s", - "Errore preparazione query migrazioni": "Error preparing migrations query", - "Errore recupero risultati migrazioni": "Error fetching migrations results", - "Errore recupero batch migrazioni": "Error fetching migrations batch", - "Errore preparazione insert migrazione": "Error preparing migration insert", - "Errore creazione tabella migrazioni": "Error creating migrations table", - "Errore creazione tabella update_logs": "Error creating update_logs table", - "Errore nel recupero delle tabelle": "Error retrieving tables", - "Errore nel recupero struttura tabella %s": "Error retrieving structure for table %s", - "Errore nel recupero dati tabella %s": "Error retrieving data for table %s", - "Pacchetto di aggiornamento non valido: manca %s": "Invalid update package: missing %s", - "Errore preparazione log aggiornamento": "Error preparing update log", - "Errore preparazione completamento log": "Error preparing log completion", - "Errore aggiornamento log": "Error updating log", - "URL di download non trovato": "Download URL not found", - "File di aggiornamento non valido": "Invalid update file", - "Impossibile creare directory di backup": "Unable to create backup directory", - "Impossibile creare directory di backup applicazione": "Unable to create application backup directory", - "Impossibile creare directory di backup: %s": "Unable to create backup directory: %s", - "Impossibile creare directory temporanea": "Unable to create temporary directory", - "Impossibile salvare il file di aggiornamento": "Unable to save update file", - "Impossibile creare il file di lock per l'aggiornamento": "Unable to create update lock file", - "Estrazione del pacchetto fallita": "Package extraction failed", - "Impossibile scrivere file di backup": "Unable to write backup file", - "Directory sorgente non trovata": "Source directory not found", - "Impossibile recuperare informazioni sulla release": "Unable to retrieve release information", - "Impossibile connettersi a GitHub": "Unable to connect to GitHub", - "Percorso non valido nel pacchetto: %s": "Invalid path in package: %s", - "Impossibile creare directory: %s": "Unable to create directory: %s", - "Errore nella copia del file: %s": "Error copying file: %s", - "Errore durante il controllo": "Error during check", - "Aggiornamento in corso...": "Updating...", - "Aggiornamento in corso. Riprova tra qualche minuto.": "Update in progress. Please try again in a few minutes.", - "Aggiornamento...": "Updating...", - "Aggiornamenti": "Updates", - "Aggiornata in base a scaffale, mensola e posizione.": "Updated based on shelf, rack and position.", - "Aggiornate %d righe": "Updated %d rows", - "Aggiungere una Nuova Lingua": "Adding a New Language", - "Aggiungi": "Add", - "Aggiungi Genere Rapido": "Quick Add Genre", - "Aggiungi Lingua": "Add Language", - "Aggiungi Nuova Lingua": "Add New Language", - "Aggiungi Nuovo Autore": "Add New Author", - "Aggiungi Nuovo Editore": "Add New Publisher", - "Aggiungi Nuovo Libro": "Add New Book", - "Aggiungi Prima Lingua": "Add First Language", - "Aggiungi Sottogenere": "Add Subgenre", - "Aggiungi ai Preferiti": "Add to Favorites", - "Aggiungi alla collezione": "Add to collection", - "Aggiungi eventuali note sul prestito": "Add any loan notes", - "Aggiungi eventuali note...": "Add any notes...", - "Aggiungi i libri che ti interessano dalla scheda di dettaglio per ricevere un promemoria quando tornano disponibili.": "Add books you're interested in from the detail page to receive a reminder when they become available.", - "Aggiungi la tua API key per interrogare Google Books quando importi un ISBN. Google viene utilizzato prima di Open Library, ma dopo Scraping Pro.": "Add your API key to query Google Books when importing an ISBN. Google is used before Open Library but after Scraping Pro.", - "Aggiungi le mensole (livelli) a ogni scaffale": "Add levels (shelves) to each bookcase", - "Aggiungi nuovo libro": "Add new book", - "Aggiungi primo libro": "Add first book", - "Aggiungi scaffali e mensole per la tua biblioteca": "Add shelves and racks for your library", - "Aggiungi un motivo (opzionale)": "Add a reason (optional)", - "Aggiungi un nuovo titolo per arricchire il catalogo di questo editore.": "Add a new title to enrich this publisher's catalog.", - "Aggiunto il": "Added on", - "Aiuto": "Help", - "Al momento non ci sono eventi attivi. Continua a seguirci per restare aggiornato sui prossimi appuntamenti.": "There are no active events at the moment. Keep following us to stay updated on upcoming appointments.", - "Al momento non ci sono eventi programmati. Torna a visitare questa pagina per scoprire i prossimi appuntamenti.": "There are currently no scheduled events. Come back to this page to discover upcoming events.", - "Al": "To", - "Al:": "To:", - "Alcune date richieste non sono disponibili": "Some requested dates are not available", - "Alcuni mancanti": "Some missing", - "Alcuni requisiti non sono soddisfatti. Risolvi i problemi prima di continuare.": "Some requirements are not met. Fix the issues before continuing.", - "Allegato": "Attachment", - "Almeno uno dei seguenti parametri è richiesto:": "At least one of the following parameters is required:", - "Altri eventi in programma": "Other upcoming events", - "Altri filtri": "More filters", - "Altro": "Other", - "Amministratore": "Administrator", - "Anno": "Year", - "Anno (YYYY)": "Year (YYYY)", - "Anno di Pubblicazione": "Publication Year", - "Anno di pubblicazione": "Publication year", - "Anno di Uscita": "Release Year", - "Anno max": "Year max", - "Anno min": "Year min", - "Anno numerico (usato per filtri e ordinamento)": "Numeric year (used for filters and sorting)", - "Anno pubblicazione": "Publication year", - "Anno pubblicazione a": "Publication year to", - "Anno pubblicazione da": "Publication year from", - "Anno:": "Year:", - "Annulla": "Cancel", - "Annulla prenotazione": "Cancel reservation", - "Annullare questa prenotazione?": "Cancel this reservation?", - "Annullata": "Cancelled", - "Annullato": "Cancelled", - "Anteprima": "Preview", - "Anteprima Banner": "Banner preview", - "Anteprima copertina": "Cover preview", - "Anteprima immagine caricata": "Uploaded image preview", - "Anteprima logo": "Logo preview", - "Anteprima non disponibile": "Preview not available", - "Anteprima:": "Preview:", - "Apparirà nei risultati di ricerca Google. Se vuoto, usa il titolo hero o il nome dell'app.": "Will appear in Google search results. If empty, uses the hero title or app name.", - "Apparirà sotto il titolo nei risultati di ricerca. Se vuoto, usa il sottotitolo hero o una descrizione generica.": "Will appear under the title in search results. If empty, uses the hero subtitle or a generic description.", - "Applica": "Apply", - "Applica Filtri": "Apply Filters", - "Applicazione Già Installata": "Application Already Installed", - "Applicazione configurata:": "Application configured:", - "Approva": "Approve", - "Approva Prestiti": "Approve Loans", - "Approva Prestito?": "Approve Loan?", - "Approva e Invia Email Attivazione": "Approve and Send Activation Email", - "Approva o rifiuta le recensioni degli utenti": "Approve or reject user reviews", - "Approva o rifiuta le richieste degli utenti": "Approve or reject user requests", - "Approva prestito?": "Approve loan?", - "Approva recensione": "Approve review", - "Approvata": "Approved", - "Approvata il": "Approved on", - "Approvato": "Approved", - "Approvato!": "Approved!", - "Approverai questa richiesta di prestito?": "Will you approve this loan request?", - "Apri": "Open", - "Apri Editor": "Open Editor", - "Apri Google Cloud Console": "Open Google Cloud Console", - "Apri file": "Open file", - "Apri menu": "Open menu", - "Archivia": "Archive", - "Archiviato": "Archived", - "Archivio": "Archive", - "Arricchimento automatico dati": "Automatic Data Enrichment", - "Artista": "Artist", - "Artista sconosciuto": "Unknown artist", - "Artisti": "Artists", - "Articolo": "Article", - "Ascolta Audiobook": "Listen to Audiobook", - "Ascolta l'audiobook": "Listen to the audiobook", - "Assicurati che corrisponda al tipo di carta per etichette che utilizzi.": "Make sure it matches the type of label paper you use.", - "Assicurati che il path assoluto dello script sia corretto": "Make sure the absolute path to the script is correct", - "Assicurati che sia configurato correttamente per evitare URL duplicati.": "Make sure it's configured correctly to avoid duplicate URLs.", - "At least one search parameter is required (ean, isbn13, isbn10, or author)": "At least one search parameter is required (ean, isbn13, isbn10, or author)", - "Attendere prego": "Please wait", - "Attendere prego...": "Please wait...", - "Attenzione": "Warning", - "Attenzione!": "Warning!", - "Attenzione:": "Warning:", - "Attenzione: %d prestiti in ritardo": "Warning: %d overdue loans", - "Attenzione: %d prestito in ritardo": "Warning: %d overdue loan", - "Attenzione: Azione Manuale Richiesta": "Warning: Manual Action Required", - "Attenzione: Non è stato possibile rimuovere tutte le copie richieste. Alcune copie sono attualmente in prestito.": "Warning: Could not remove all requested copies. Some copies are currently on loan.", - "Attivando questa modalità verranno disabilitati completamente i prestiti, le prenotazioni e la wishlist. Gli utenti potranno solo consultare il catalogo.": "Enabling this mode will completely disable loans, reservations and wishlist. Users will only be able to browse the catalogue.", - "Attiva": "Active", - "Attiva Direttamente": "Activate Directly", - "Attivato:": "Activated:", - "Attivi": "Active", - "Attività": "Activity", - "Attivo": "Active", - "Attivo:": "Active:", - "Attuale": "Current", - "Attualmente prestati": "Currently on loan", - "Audio": "Audio", - "Audio URL": "Audio URL", - "Audiobook": "Audiobook", - "Audiobook (MP3/M4A/OGG)": "Audiobook (MP3/M4A/OGG)", - "Audiobook caricato!": "Audiobook uploaded!", - "Audiobook disponibile": "Audiobook available", - "Aumenta Copie": "Increase Copies", - "Autenticazione": "Authentication", - "Auto": "Auto", - "Auto-attivazione: Se compili questo campo, il toggle \"Mostra Cookie Analitici\" in Privacy verrà attivato automaticamente.": "Auto-activation: If you fill this field, the \"Show Analytics Cookies\" toggle in Privacy will be automatically activated.", - "Auto-attivazione: Se compili questo campo, il toggle \"Mostra Cookie Marketing\" in Privacy verrà attivato automaticamente.": "Auto-activation: If you fill this field, the \"Show Marketing Cookies\" toggle in Privacy will be automatically activated.", - "Auto-detect se vuoto": "Auto-detect if empty", - "Automatismi": "Automations", - "Autore": "Author", - "Autore \"${normalizedLabel}\" pronto per essere creato": "Author \"${normalizedLabel}\" ready to be created", - "Autore \"${normalizedLabel}\" è già selezionato": "Author \"${normalizedLabel}\" is already selected", - "Autore \"%s\" pronto per essere creato": "Author \"%s\" ready to be created", - "Autore \"%s\" è già selezionato": "Author \"%s\" is already selected", - "Autore A-Z": "Author A-Z", - "Autore Z-A": "Author Z-A", - "Autore eliminato con successo.": "Author deleted successfully.", - "Autore principale": "Primary author", - "Autore sconosciuto": "Unknown author", - "Autore/i:": "Author(s):", - "Autore:": "Author:", - "Autori": "Authors", - "Autori con biografie": "Authors with biographies", - "Autori ed editori vengono creati automaticamente": "Authors and publishers are created automatically", - "Autori multipli separati da %s": "Multiple authors separated by %s", - "Autori multipli separati da %s o %s": "Multiple authors separated by %s or %s", - "Autori pubblicati": "Published Authors", - "Autori uniti": "Authors merged", - "Autori uniti con successo": "Authors merged successfully", - "Autori:": "Authors:", - "Avanti": "Next", - "Avanzate": "Advanced", - "Avvisi scadenza prestiti (configurabile in Impostazioni → Avanzate, default 3 giorni prima)": "Loan expiration warnings (configurable in Settings → Advanced, default 3 days before)", - "Avviso": "Warning", - "Azione richiesta:": "Action required:", - "Azioni": "Actions", - "Azioni Rapide": "Quick Actions", - "Azioni Veloci": "Quick Actions", - "Azioni di Approvazione": "Approval Actions", - "Azioni di Manutenzione": "Maintenance Actions", - "Azzera": "Clear", - "Backup": "Backup", - "Backup Automatico": "Automatic Backup", - "Backup creato con successo": "Backup created successfully", - "Backup disponibili": "Available backups", - "Backup e Sicurezza": "Backup and Security", - "I backup sono salvati in:": "Backups are saved in:", - "Backup fallito": "Backup failed", - "Backup Salvati": "Saved Backups", - "Backup eliminato": "Backup deleted", - "Backup non trovato": "Backup not found", - "Caricamento backup...": "Loading backups...", - "Crea un backup manuale o attendi il prossimo aggiornamento.": "Create a manual backup or wait for the next update.", - "Eliminare questo backup?": "Delete this backup?", - "Eliminazione in corso...": "Deleting...", - "Impossibile eliminare il backup": "Unable to delete backup", - "Impossibile leggere il file di backup": "Unable to read backup file", - "Nessun backup disponibile": "No backups available", - "Nome File": "File Name", - "Nome backup non specificato": "Backup name not specified", - "Nome backup non valido": "Invalid backup name", - "Barcode": "Barcode", - "Barra laterale": "Sidebar", - "Benvenuto": "Welcome", - "Benvenuto nell'Installer": "Welcome to the Installer", - "Benvenuto, %s!": "Welcome, %s!", - "Biblioteca": "Library", - "Biblioteca Digitale": "Digital Library", - "Biblioteca Digitale - La tua biblioteca online": "Digital Library - Your Online Library", - "Biblioteca Digitale - Scopri e Prenota i Tuoi Libri Preferiti": "Digital Library - Discover and Reserve Your Favorite Books", - "Biblioteca digitale con catalogo completo di libri disponibili per il prestito": "Digital library with complete catalog of books available for loan", - "Biografia": "Biography", - "Biografia dell'autore": "Author Biography", - "Bluesky": "Bluesky", - "Books": "Books", - "Breadcrumb": "Breadcrumb", - "Breve descrizione per i motori di ricerca": "Short description for search engines", - "Breve descrizione per i motori di ricerca (max 160 caratteri)": "Short description for search engines (max 160 characters)", - "Buono": "Good", - "CMS": "CMS", - "CSRF Fallito": "CSRF Failed", - "CSRF non valido.": "Invalid CSRF token.", - "CSS Personalizzato": "Custom CSS", - "CSV": "CSV", - "Calendario eventi": "Events calendar", - "Call to Action": "Call to Action", - "Call to Action (CTA)": "Call to Action (CTA)", - "Cambia lingua": "Change language", - "Cambia password": "Change password", - "Campo": "Field", - "Campo %s obbligatorio": "%s field required", - "Campo Obbligatorio": "Required Field", - "Campo obbligatorio": "Required field", - "Campo obbligatorio mancante: %s": "Missing required field: %s", - "Cancella filtri": "Clear filters", - "Cancella tutti i filtri": "Clear all filters", - "Caratteristica": "Feature", - "Carica": "Upload", - "Carica %{smart_count} file": "Upload %{smart_count} file", - "Carica Altri": "Load More", - "Carica File CSV": "Upload CSV File", - "Carica File JSON": "Upload JSON File", - "Carica Nuovo File JSON": "Upload New JSON File", - "Carica Plugin": "Upload Plugin", - "Carica il file JSON di traduzione (opzionale)": "Upload the translation JSON file (optional)", - "Carica il file usando l'uploader": "Upload the file using the uploader", - "Carica logo (PNG, JPG, SVG)": "Upload logo (PNG, JPG, SVG)", - "Carica o collega eBook (PDF/ePub) e audiobook (MP3/M4A) per renderli disponibili agli utenti.": "Upload or link eBooks (PDF/ePub) and audiobooks (MP3/M4A) to make them available to users.", - "Carica un file CSV per importare più libri contemporaneamente": "Upload a CSV file to import multiple books at once", - "Carica un file ZIP contenente il plugin. Il file deve includere un %s con le informazioni del plugin.": "Upload a ZIP file containing the plugin. The file must include a %s with the plugin information.", - "Carica un nuovo file per aggiornare le traduzioni (opzionale). Verrà creato un backup del file precedente.": "Upload a new file to update translations (optional). A backup of the previous file will be created.", - "Caricamento .env...": "Loading .env...", - "Caricamento categorie...": "Loading categories...", - "Caricamento completato": "Upload completed", - "Caricamento condizionale:": "Conditional loading:", - "Caricamento fallito": "Upload failed", - "Caricamento file...": "Uploading file...", - "Caricamento in corso...": "Uploading...", - "Caricamento libri...": "Loading books...", - "Caricamento non riuscito. Riprova.": "Upload failed. Please try again.", - "Caricamento...": "Loading...", - "Caroselli Generi": "Genre Carousels", - "Casa Editrice": "Publisher", - "Case editrici": "Publishing houses", - "Catalogo": "Catalog", - "Catalogo Completo Libri - Biblioteca Digitale": "Complete Book Catalog - Digital Library", - "Catalogo Libri": "Book Catalog", - "Catalogo Libri - Biblioteca": "Book Catalog - Library", - "Catalogo libri": "Book Catalog", - "Català (CA)": "Catalan (CA)", - "Categoria": "Category", - "Categorie": "Categories", - "Categorie Cookie": "Cookie Categories", - "Centro Impostazioni": "Settings Center", - "Cerca": "Search", - "Cerca IP...": "Search IP...", - "Cerca Libri": "Search Books", - "Cerca Libro": "Search Book", - "Cerca Utente": "Search User", - "Cerca autore...": "Search author...", - "Cerca codice o nome...": "Search code or name...", - "Cerca autori esistenti o aggiungine di nuovi...": "Search for existing authors or add new ones...", - "Cerca editore esistente o inserisci nuovo...": "Search for existing publisher or enter new...", - "Cerca editore...": "Search publisher...", - "Cerca email...": "Search email...", - "Cerca genere...": "Search genre...", - "Cerca icona... (es. user, home, book)": "Search icon... (e.g. user, home, book)", - "Cerca libri, autori, editori, utenti...": "Search books, authors, publishers, users...", - "Cerca libri, autori, editori...": "Search books, authors, publishers...", - "Cerca libri, autori...": "Search books, authors...", - "Cerca libri, autori, ISBN...": "Search books, authors, ISBN...", - "Cerca libri...": "Search books...", - "Cerca nella biblioteca": "Search the library", - "Cerca per ISBN-10": "Search by ISBN-10", - "Cerca per ISBN-13": "Search by ISBN-13", - "Cerca per codice EAN": "Search by EAN code", - "Cerca per nome autore (corrispondenza parziale)": "Search by author name (partial match)", - "Cerca per nome, cognome, telefono, email o tessera": "Search by name, surname, phone, email or card", - "Cerca per nome...": "Search by name...", - "Cerca per pseudonimo...": "Search by pseudonym...", - "Cerca pseudonimo...": "Search pseudonym...", - "Cerca per titolo o sottotitolo": "Search by title or subtitle", - "Cerca per titolo o stato (es. disponibile)": "Search by title or status (e.g. available)", - "Cerca posizione...": "Search location...", - "Cerca rapido...": "Quick search...", - "Cerca testo": "Search text", - "Cerca titoli": "Search Titles", - "Cerca titoli, autori, ISBN...": "Search titles, authors, ISBN...", - "Cerca:": "Search:", - "Chi Siamo": "About Us", - "Chiave": "Key", - "Chiave API Google Books": "Google Books API key", - "Chiave Google Books aggiornata.": "Google Books key updated.", - "Chiave Google Books rimossa.": "Google Books key removed.", - "Chiave Google Books salvata correttamente.": "Google Books key saved successfully.", - "Chiave Route": "Route Key", - "Chiedi al tuo amministratore di database di eseguire i comandi contenuti nel file": "Ask your database administrator to execute the commands contained in the file", - "Chiudi": "Close", - "Chiudi Player": "Close Player", - "Chiudi menu": "Close menu", - "Chiudi alternative": "Close alternatives", - "Citazione": "Quote", - "Città": "City", - "Classe (000-900)": "Class (000-900)", - "Classificazione Dewey": "Dewey Classification", - "Classi principali": "Main classes", - "classe principale": "main class", - "Clicca o trascina per caricare un logo": "Click or drag to upload a logo", - "Clicca per selezionare": "Click to select", - "Clicca su \"Esegui Manutenzione\" per correggere automaticamente i problemi riparabili.": "Click \"Run Maintenance\" to automatically fix repairable issues.", - "Clicca su 'Aggiungi Lingua'": "Click on 'Add Language'", - "Clicca su \\": "Click on \\", - "Clicca su un'icona per selezionarla": "Click on an icon to select it", - "Codice": "Code", - "Codice *": "Code *", - "Codice CSS": "CSS Code", - "Codice CSS da applicare a tutte le pagine del frontend": "CSS code to apply to all frontend pages", - "Codice Dewey selezionato:": "Selected Dewey code:", - "Codice Fiscale": "Tax ID", - "Codice ISBN o EAN": "ISBN or EAN Code", - "Codice ISO 2 lettere (es: IT, FR, GB)": "ISO 2-letter code (e.g. IT, FR, GB)", - "Codice JavaScript": "JavaScript Code", - "Codice JavaScript Analytics": "Analytics JavaScript Code", - "Codice Lingua": "Language Code", - "Codice Tessera": "Card Number", - "Codice Tessera:": "Membership Code:", - "Codice embed completo": "Full embed code", - "Codice fiscale": "Tax code", - "Codice fiscale dell'editore (opzionale)": "Publisher's tax code (optional)", - "Codice fiscale italiano (opzionale)": "Italian tax ID (optional)", - "Codice postale...": "ZIP code...", - "Codice tessera": "Card Code", - "Cognome": "Last Name", - "Collana": "Series", - "Collocazione": "Location", - "Collocazione calcolata": "Calculated location", - "Collocazione suggerita": "Suggested location", - "Segui l'installazione guidata per completare la configurazione.": "Follow the guided installation to complete the configuration.", - "Come Funziona": "How It Works", - "Come ottenere il codice": "How to get the code", - "Commento": "Comment", - "Compila con i dati dei tuoi libri": "Fill in with your book data", - "Compila i dettagli del libro per aggiungerlo alla biblioteca": "Fill in the book details to add it to the library", - "Compila i dettagli dell'autore per aggiungerlo alla biblioteca": "Fill in the author details to add them to the library", - "Compila i dettagli della casa editrice per aggiungerla alla biblioteca": "Fill in the publishing house details to add it to the library", - "Compila tutti i campi obbligatori prima di salvare.": "Fill in all required fields before saving.", - "Compila tutti i campi per creare una nuova prenotazione": "Fill in all fields to create a new reservation", - "Compila tutti i campi richiesti": "Fill in all required fields", - "Compila nome e URL per tutti i server.": "Fill in name and URL for all servers.", - "Completamento": "Completion", - "Completata": "Completed", - "Completati": "Completed", - "Completato": "Completed", - "Completato!": "Completed!", - "Complimenti!": "Congratulations!", - "Componente": "Component", - "Con valore 3, un prestito che scade il 15 Gennaio riceverà l'avviso il 12 Gennaio": "With value 3, a loan expiring on January 15 will receive the notice on January 12", - "Condividi": "Share", - "Condividi la tua opinione su questo libro...": "Share your opinion about this book...", - "Condividi su Facebook": "Share on Facebook", - "Condividi su Twitter": "Share on Twitter", - "Condividi su WhatsApp": "Share on WhatsApp", - "Condiviso": "Shared", - "Condizioni": "Conditions", - "Consegna immediata": "Immediate delivery", - "Conferma": "Confirm", - "Conferma Aggiornamento": "Confirm Update", - "Conferma aggiornamento": "Confirm update", - "Controlla Aggiornamenti": "Check for Updates", - "Controllo aggiornamenti": "Checking for updates", - "Crea Backup Manuale": "Create Manual Backup", - "Creazione backup database": "Creating database backup", - "Creazione backup...": "Creating backup...", - "Creare backup?": "Create backup?", - "Cronologia Aggiornamenti": "Update History", - "Conferma Annullamento": "Confirm Cancellation", - "Conferma Disinstallazione": "Confirm Uninstallation", - "Conferma eliminazione": "Confirm deletion", - "Conferma Password": "Confirm Password", - "Conferma Salvataggio": "Confirm Save", - "Conferma la tua email": "Confirm your email", - "Conferma modifica": "Confirm change", - "Conferma password": "Confirm password", - "Conferma restituzione": "Confirm return", - "Confermi l'eliminazione dell'editore?": "Confirm publisher deletion?", - "Confermi l'operazione?": "Confirm the operation?", - "Confermi?": "Confirm?", - "Configura Google Books": "Configure Google Books", - "Configura i testi mostrati all'interno del pannello delle preferenze dei cookie.": "Configure the texts shown inside the cookie preferences panel.", - "Configura i testi visualizzati agli utenti in ogni parte del cookie banner.": "Configure the texts displayed to users in every part of the cookie banner.", - "Configura i testi visualizzati agli utenti nel banner iniziale.": "Configure the texts displayed to users in the initial banner.", - "Configura l'identità dell'applicazione, i metodi di invio email e personalizza i template delle notifiche automatiche.": "Configure application identity, email sending methods and customize automatic notification templates.", - "Configura le date della prenotazione": "Configure reservation dates", - "Configura le impostazioni email per l'invio di notifiche agli utenti.": "Configure email settings for sending notifications to users.", - "Configura le impostazioni rimanenti (privacy, contatti, etc.)": "Configure the remaining settings (privacy, contacts, etc.)", - "Configura quando inviare l'avviso di scadenza prestiti agli utenti": "Configure when to send loan expiry warning to users", - "Configurazione": "Configuration", - "Configurazione Cron Job": "Cron Job Configuration", - "Configurazione Database": "Database Configuration", - "Configurazione Email": "Email Configuration", - "Configurazione Etichette Libri": "Book Labels Configuration", - "Configurazione SMTP": "SMTP Configuration", - "Configurazione del banner cookie": "Cookie banner configuration", - "Configurazione guidata in pochi passaggi.": "Guided configuration in a few steps.", - "Configurazione invio": "Sending Configuration", - "Configurazione sistema": "System configuration", - "Connessione al database fallita": "Database connection failed", - "Connessione fallita": "Connection failed", - "Connesso": "Connected", - "Conserva queste informazioni in un luogo sicuro!": "Keep this information in a safe place!", - "Consigliato": "Recommended", - "Consigliato JPG o PNG ad alta risoluzione (min 1920x1080px). Max 5MB.": "Recommended high-resolution JPG or PNG (min 1920x1080px). Max 5MB.", - "Consigliato JPG, PNG o WebP (min 800x600px). Max 5MB.": "Recommended JPG, PNG or WebP (min 800x600px). Max 5MB.", - "Consigliato PNG o SVG con sfondo trasparente. Dimensione massima 2MB.": "Recommended PNG or SVG with transparent background. Maximum size 2MB.", - "Consigliato: 150-160 caratteri": "Recommended: 150-160 characters", - "Consigliato: 50-60 caratteri": "Recommended: 50-60 characters", - "Consigliato: PHP mail() per semplicità, SMTP per maggiore controllo": "Recommended: PHP mail() for simplicity, SMTP for more control", - "Contatta il tuo provider di hosting e chiedi di eseguire": "Contact your hosting provider and ask them to run", - "Contattaci": "Contact Us", - "Contatti": "Contacts", - "Contatti e accesso": "Contacts and Access", - "Contenuti Digitali": "Digital Content", - "Contenuti homepage aggiornati con successo!": "Homepage content updated successfully!", - "Contenuto": "Content", - "Contenuto Cookie Policy": "Cookie Policy Content", - "Contenuto Pagina": "Page Content", - "Contenuto Privacy Policy": "Privacy Policy Content", - "Contenuto Testuale": "Text Content", - "Contenuto della pagina /cookies accessibile dal banner": "Content of /cookies page accessible from banner", - "Contenuto pagina": "Page content", - "Contenuto testuale HTML con editor avanzato": "HTML text content with advanced editor", - "Continua": "Continue", - "Cookie Analitici": "Analytics Cookies", - "Cookie Banner": "Cookie Banner", - "Cookie Essenziali": "Essential Cookies", - "Cookie di Marketing": "Marketing Cookies", - "Cookies": "Cookies", - "Copertina": "Cover", - "Copertina Attuale": "Current Cover", - "Copertina attuale": "Current cover", - "Copertina del Libro": "Book Cover", - "Copertina del libro": "Book cover", - "Copertina recuperata automaticamente": "Cover automatically retrieved", - "Copia": "Copy", - "Copia link negli appunti": "Copy link to clipboard", - "Copiato!": "Copied!", - "Copie": "Copies", - "Copie Aggiunte!": "Copies Added!", - "Copie Disponibili": "Available Copies", - "Copie Eccessive": "Excess Copies", - "Copie Fisiche": "Physical Copies", - "Copie Negative": "Negative Copies", - "Copie Totali": "Total Copies", - "Copie disponibili:": "Available copies:", - "Copie totali:": "Total copies:", - "Copyright": "Copyright", - "Corpo Email": "Email Body", - "Corpo email": "Email body", - "Correggi Permessi Automaticamente": "Fix Permissions Automatically", - "Corrente": "Current", - "Correzione Automatica Permessi": "Auto-fix Permissions", - "Correzione Manuale via SSH (se automatica fallisce)": "Manual Fix via SSH (if automatic fails)", - "Correzione parziale:": "Partial fix:", - "Correzioni applicate: %d record aggiornati": "Corrections applied: %d records updated", - "Cos'è la Collocazione?": "What is Location?", - "Cosa fare:": "What to do:", - "Cosa ne pensi di questo libro?": "What do you think about this book?", - "Cosa sono le Route?": "What are Routes?", - "Cosa viene nascosto:": "What will be hidden:", - "Crea": "Create", - "Crea API Key": "Create API Key", - "Crea Admin": "Create Admin", - "Crea Evento": "Create Event", - "Crea Nuova API Key": "Create New API Key", - "Crea Nuova Prenotazione": "Create New Reservation", - "Crea Nuovo Evento": "Create New Event", - "Crea Nuovo Genere": "Create New Genre", - "Crea Nuovo Prestito": "Create New Loan", - "Crea Prenotazione": "Create Reservation", - "Crea Prestito": "Create Loan", - "Crea Prima API Key": "Create First API Key", - "Crea Primo Genere": "Create First Genre", - "Crea Utente Admin": "Create Admin User", - "Crea Utente Amministratore": "Create Administrator User", - "Crea e gestisci gli eventi della biblioteca": "Create and manage library events", - "Crea gli scaffali (es: A, B, C)": "Create shelves (e.g.: A, B, C)", - "Crea il primo utente amministratore. Questo account avrà accesso completo a tutte le funzionalità del sistema.": "Create the first administrator user. This account will have full access to all system features.", - "Crea il tuo primo evento": "Create your first event", - "Crea la cartella logs se non esiste: mkdir -p logs": "Create the logs folder if it doesn't exist: mkdir -p logs", - "Crea nuovo": "Create new", - "Crea nuovo \"${item.label}\"": "Create new \"${item.label}\"", - "Crea un nuovo account": "Create a new account", - "Crea un nuovo profilo amministratore o lettore.": "Create a new administrator or reader profile.", - "Creata:": "Created:", - "Creato il": "Created on", - "Credenziali Admin:": "Admin Credentials:", - "Credenziali Errate": "Invalid Credentials", - "Crediti": "Credits", - "Crescente": "Ascending", - "Crittografia": "Encryption", - "Cronologia": "History", - "Da": "From", - "Da Inventariare": "To Be Inventoried", - "Da approvare": "To approve", - "Da consegnare": "To deliver", - "Da creare": "To be created", - "Da prenotazione": "From reservation", - "Da prenotazioni": "From reservations", - "Da %s (%s)": "From %s (%s)", - "Da qui puoi gestire tutte le lingue disponibili nell'applicazione. Carica file JSON di traduzione e abilita/disabilita lingue.": "From here you can manage all available languages in the application. Upload JSON translation files and enable/disable languages.", - "Dal": "From", - "Dal %s al %s": "From %s to %s", - "Dal:": "From:", - "Danneggiato": "Damaged", - "Dansk (DA)": "Danish (DA)", - "Dashboard": "Dashboard", - "Data": "Date", - "Data Acq.": "Acq. Date", - "Data Acquisizione": "Acquisition Date", - "Data Evento": "Event Date", - "Data Fine": "End Date", - "Data Inizio": "Start Date", - "Data Prenotazione": "Reservation Date", - "Data Prestito": "Loan Date", - "Data Prestito:": "Loan Date:", - "Data Pubblicazione": "Publication Date", - "Data Restituzione:": "Return Date:", - "Data Scadenza": "Due Date", - "Data Scadenza:": "Due Date:", - "Data acquisizione": "Acquisition date", - "Data acquisizione a": "Acquisition date to", - "Data acquisizione da": "Acquisition date from", - "Data di Pubblicazione": "Publication Date", - "Data di inizio della prenotazione (default: oggi)": "Reservation start date (default: today)", - "Data di morte": "Date of Death", - "Data di nascita": "Date of Birth", - "Data di pubblicazione": "Publication date", - "Data di scadenza della prenotazione (default: +30 giorni)": "Reservation expiry date (default: +30 days)", - "Data fine": "End date", - "Data inizio": "Start date", - "Data inizio richiesta mancante": "Request start date missing", - "Data morte a": "Death date to", - "Data morte da": "Death date from", - "Data nascita a": "Birth date to", - "Data nascita da": "Birth date from", - "Data originale di pubblicazione (formato italiano)": "Original publication date (Italian format)", - "Data prestito": "Loan date", - "Data prestito (A)": "Loan date (To)", - "Data prestito (Da)": "Loan date (From)", - "Data pubblicazione da": "Publication date from", - "Data scadenza prevista": "Expected due date", - "Data:": "Date:", - "Database installato (30 tabelle)": "Database installed (30 tables)", - "Database:": "Database:", - "Date": "Dates", - "Date Non Valide": "Invalid Dates", - "Dati Account": "Account Data", - "Dati bibliografici completi (titolo, sottotitolo, ISBN, EAN, ecc.)": "Complete bibliographic data (title, subtitle, ISBN, EAN, etc.)", - "Dati della Prenotazione": "Reservation Details", - "Dati essenziali caricati": "Essential data loaded", - "Database installato (41 tabelle)": "Database installed (41 tables)", - "Dati iniziali importati OK": "Initial data imported OK", - "Dati mancanti": "Missing data", - "Dati personali": "Personal data", - "Dati Utente": "User Details", - "Debug": "Debug", - "Debug Log:": "Debug Log:", - "Deceduto il %s": "Died on %s", - "Decrescente": "Descending", - "Default: un mese dopo la data inizio": "Default: one month after start date", - "Definisce i privilegi dell'utente.": "Defines user privileges.", - "Demo": "Demo", - "Deseleziona tutti": "Deselect all", - "Decimali": "Decimals", - "Descrivi l'utilizzo di questa API key...": "Describe the usage of this API key...", - "Descrizione": "Description", - "Descrizione Banner": "Banner Description", - "Descrizione Evento": "Event Description", - "Descrizione Modale": "Modal Description", - "Descrizione OG": "OG Description", - "Descrizione Open Graph": "Open Graph Description", - "Descrizione SEO": "SEO Description", - "Descrizione Twitter": "Twitter Description", - "Descrizione banner": "Banner description", - "Descrizione breve": "Short description", - "Descrizione completa dell'evento con possibilità di formattazione HTML": "Full event description with HTML formatting options", - "Descrizione cookie analitici": "Analytics cookies description", - "Descrizione cookie essenziali": "Essential cookies description", - "Descrizione cookie marketing": "Marketing cookies description", - "Descrizione del libro...": "Book description...", - "Descrizione footer": "Footer description", - "Descrizione modale": "Modal description", - "Descrizione nella modale preferenze. Puoi usare HTML.": "Description in the preferences modal. You can use HTML.", - "Descrizione per anteprima social. Se vuoto, usa la descrizione SEO.": "Description for social preview. If empty, uses the SEO description.", - "Descrizione troppo lunga (max 2000 caratteri)": "Description too long (max 2000 characters)", - "Descrizione:": "Description:", - "Dettagli": "Details", - "Dettagli Acquisizione": "Acquisition Details", - "Dettagli Fisici": "Physical Details", - "Dettagli Libro": "Book Details", - "Dettagli Messaggio": "Message Details", - "Dettagli del Prestito": "Loan Details", - "Dettagli evento": "Event details", - "Dettagli principali dell'evento": "Main event details", - "Dettagli restituzione": "Return details", - "Deutsch (DE)": "German (DE)", - "Deve contenere maiuscole, minuscole e numeri": "Must contain uppercase, lowercase and numbers", - "Deve iniziare con": "Must start with", - "Devi accettare la Privacy Policy per procedere": "You must accept the Privacy Policy to proceed", - "Devi eseguire": "You must run", - "Dewey": "Dewey", - "Dimensione": "Size", - "Dimensioni": "Dimensions", - "Dipendenze": "Dependencies", - "Directory plugin già esistente.": "Plugin directory already exists.", - "Disabilita": "Disable", - "Disabilita se il tuo sito non usa cookie analitici (es. Google Analytics)": "Disable if your site doesn't use analytics cookies (e.g. Google Analytics)", - "Disabilita se il tuo sito non usa cookie di marketing/advertising": "Disable if your site doesn't use marketing/advertising cookies", - "Disabilitata - Nascosta nel frontend": "Disabled - Hidden in frontend", - "Disabilitata": "Disabled", - "Disabilita prestiti, prenotazioni e wishlist. Gli utenti potranno solo consultare il catalogo.": "Disable loans, reservations and wishlist. Users will only be able to browse the catalogue.", - "Disabilita tutte le funzionalità di prestito e prenotazione": "Disable all loan and reservation features", - "Disabilitato": "Disabled", - "Disattiva": "Deactivate", - "Disattiva modalità manutenzione": "Disable maintenance mode", - "Disattivata": "Inactive", - "Discografia": "Discography", - "Disconnesso": "Disconnected", - "Disinstalla": "Uninstall", - "Divisioni": "Divisions", - "Disponibile": "Available", - "Disponibile dal:": "Available from:", - "Disponibile ora": "Available Now", - "Disponibile per il prestito.": "Available for loan.", - "Disponibile solo con driver SMTP": "Available only with SMTP driver", - "Disponibili": "Available", - "Disponibili e in prestito": "Available and on loan", - "Disponibilità": "Availability", - "Disponibilità copie": "Copy availability", - "Divisione (010-990)": "Division (010-990)", - "Documentazione": "Documentation", - "Documentazione API": "API Documentation", - "Documento": "Document", - "Documento generato il %s alle %s": "Document generated on %s at %s", - "Donazione": "Donation", - "Dopo la conferma, un amministratore approverà la tua iscrizione.": "After confirmation, an administrator will approve your registration.", - "Dopo la rigenerazione, invia l'URL della sitemap a Google Search Console e Bing Webmaster Tools": "After regeneration, submit sitemap URL to Google Search Console and Bing Webmaster Tools", - "Driver": "Driver", - "Driver Email": "Email Driver", - "EAN": "EAN", - "EAN:": "EAN:", - "ERRORE:": "ERROR:", - "Eccellente": "Excellent", - "Editor Classificazione Dewey": "Dewey Classification Editor", - "Editore": "Publisher", - "Editore \"${item.label}\" selezionato": "Publisher \"${item.label}\" selected", - "Editore \"${value}\" pronto per essere creato": "Publisher \"${value}\" ready to be created", - "Editore \"%s\" pronto per essere creato": "Publisher \"%s\" ready to be created", - "Editore \"%s\" selezionato": "Publisher \"%s\" selected", - "Editore eliminato con successo.": "Publisher deleted successfully.", - "Editore sconosciuto": "Unknown publisher", - "Editore selezionato:": "Selected publisher:", - "Editore trovato:": "Publisher found:", - "Editore:": "Publisher:", - "Editore: %s": "Publisher: %s", - "Editori": "Publishers", - "Editori uniti": "Publishers merged", - "Editori uniti con successo": "Publishers merged successfully", - "Editore principale": "Primary publisher", - "Edizione": "Edition", - "Elaborato da": "Processed by", - "Elementi": "Items", - "Elenco Autori": "Authors List", - "Elenco Autori - Biblioteca": "Author List - Library", - "Elenco Editori": "Publishers List", - "Elenco Editori - Biblioteca": "Publisher List - Library", - "Elenco Libri": "Books List", - "Elenco Libri - Biblioteca": "Book List - Library", - "Elenco Prestiti": "Loans List", - "Elenco Utenti": "Users List", - "Elenco Utenti - Biblioteca": "Users List - Library", - "Elimina": "Delete", - "Elimina Installer": "Delete Installer", - "Elimina Installer (Richiede Composer)": "Delete Installer (Requires Composer)", - "Elimina Lingua": "Delete Language", - "Elimina copia": "Delete copy", - "Elimina il file .installed dalla root del progetto e riprova": "Delete the .installed file from the project root and try again", - "Elimina questa lingua. Questa azione non può essere annullata.": "Delete this language. This action cannot be undone.", - "Eliminare il libro?": "Delete book?", - "Eliminare l'utente?": "Delete the user?", - "Eliminare questa mensola? (Solo se vuota)": "Delete this shelf? (Only if empty)", - "Eliminare questo scaffale? (Solo se vuoto)": "Delete this bookcase? (Only if empty)", - "Eliminato!": "Deleted!", - "Eliminati": "Deleted", - "Email": "Email", - "Email *": "Email *", - "Email Contatto": "Contact Email", - "Email Non Valida": "Invalid Email", - "Email Non Verificata": "Unverified Email", - "Email Referente": "Contact Person Email", - "Email associata al tuo account": "Email associated with your account", - "Email configurata": "Email configured", - "Email di contatto": "Contact email", - "Email di recupero inviata con successo!": "Recovery email sent successfully!", - "Email dove ricevere i messaggi dal form contatti": "Email where to receive messages from contact form", - "Email e telefono visibili sulla pagina contatti": "Email and phone visible on contact page", - "Email già registrata": "Email already registered", - "Email non trovata nel nostro sistema": "Email not found in our system", - "Email non valida. Verifica il formato": "Invalid email. Check the format", - "Email non verificata. Controlla la tua casella di posta e clicca sul link di verifica": "Email not verified. Check your inbox and click the verification link", - "Email o password non corretti. Verifica le credenziali e riprova": "Email or password incorrect. Check your credentials and try again", - "Email per notifiche": "Email for notifications", - "Email troppo lunga (massimo 255 caratteri)": "Email too long (maximum 255 characters)", - "Email utente": "User email", - "Email:": "Email:", - "Embed della mappa (Google Maps o OpenStreetMap). Puoi inserire l'URL o il codice iframe completo.": "Map embed (Google Maps or OpenStreetMap). You can insert the URL or full iframe code.", - "Emoji Bandiera": "Flag Emoji", - "Emoji della bandiera del paese (opzionale)": "Country flag emoji (optional)", - "Emoji della bandiera del paese (opzionale, default: 🌐)": "Country flag emoji (optional, default: 🌐)", - "Encryption": "Encryption", - "Endpoint": "Endpoint", - "Es. Italiana...": "E.g. Italian...", - "Es. Milano...": "E.g. Milan...", - "English (EN)": "English (EN)", - "Errore": "Error", - "Errore Installazione": "Installation Error", - "Errore Upload": "Upload Error", - "Errore caricamento Audiobook": "Audiobook upload error", - "Errore caricamento classificazione Dewey": "Error loading Dewey classification", - "Errore caricamento eBook": "eBook upload error", - "Errore database:": "Database error:", - "Errore del Server": "Server Error", - "Errore del database": "Database error", - "Errore del database durante la registrazione. Riprova più tardi": "Database error during registration. Please try again later", - "Errore del server": "Server error", - "Errore del server. Riprova più tardi.": "Server error. Please try again later.", - "Errore di comunicazione con il server": "Server communication error", - "Errore di configurazione del server.": "Server configuration error.", - "Errore di configurazione.": "Configuration error.", - "Errore di connessione": "Connection error", - "Errore di connessione durante l'importazione": "Connection error during import", - "Errore di connessione:": "Connection error:", - "Errore di salvataggio": "Save error", - "Errore di sicurezza": "Security error", - "Errore di sicurezza, riprova": "Security error, try again", - "Errore di sicurezza. Aggiorna la pagina e riprova": "Security error. Refresh the page and try again", - "Errore di sicurezza. Ricarica la pagina e riprova.": "Security error. Reload the page and try again.", - "Errore di sistema.": "System error.", - "Errore durante il caricamento dei dettagli del plugin.": "Error loading plugin details.", - "Errore durante il caricamento del file (code: %s).": "Error uploading file (code: %s).", - "Errore durante il caricamento del file.": "Error during file upload.", - "Errore durante il ricalcolo:": "Error during recalculation:", - "Errore durante il rifiuto": "Error during rejection", - "Errore durante il salvataggio": "Error while saving", - "Errore durante il salvataggio delle impostazioni:": "Error saving settings:", - "Errore durante il salvataggio nel database.": "Error saving to database.", - "Errore durante il salvataggio.": "Error during save.", - "Errore durante il salvataggio:": "Error during save:", - "Errore durante il seed": "Error during seed", - "Errore durante l'aggiornamento": "Error during update", - "Errore durante l'aggiornamento dell'evento.": "Error updating event.", - "Errore durante l'aggiornamento della chiave Google Books.": "Error updating Google Books key.", - "Errore durante l'approvazione": "Error during approval", - "Errore durante l'attivazione del plugin.": "Error activating plugin.", - "Errore durante l'attivazione: %s": "Error during activation: %s", - "Errore durante l'eliminazione dell'evento.": "Error deleting event.", - "Errore durante l'estrazione del plugin.": "Error extracting plugin.", - "Errore durante l'import: %s": "Import error: %s", - "Errore durante l'importazione (HTTP %d)": "Import error (HTTP %d)", - "Errore durante l'importazione dati": "Error during data import", - "Errore durante l'installazione del plugin.": "Error installing plugin.", - "Errore durante l'installazione:": "Error during installation:", - "Errore durante l'installazione: %s": "Error during installation: %s", - "Errore durante l'invio dell'email. Riprova più tardi": "Error sending the email. Please try again later", - "Errore durante l'unione degli autori": "Error merging authors", - "Errore durante l'unione degli editori": "Error merging publishers", - "Errore imprevisto durante l'unione degli autori": "Unexpected error merging authors", - "Errore imprevisto durante l'unione degli editori": "Unexpected error merging publishers", - "Errore durante l'upload.": "Upload error.", - "Errore durante la correzione:": "Error during correction:", - "Errore durante la creazione del prestito.": "Error creating the loan.", - "Errore durante la creazione dell'evento.": "Error creating event.", - "Errore durante la creazione dell'utente:": "Error during user creation:", - "Errore durante la disattivazione del plugin.": "Error during plugin deactivation.", - "Errore durante la disattivazione: %s": "Error during deactivation: %s", - "Errore durante la disinstallazione del plugin.": "Error during plugin uninstallation.", - "Errore durante la finalizzazione:": "Error during finalization:", - "Errore durante la manutenzione:": "Error during maintenance:", - "Errore durante la registrazione": "Registration error", - "Errore durante la ricerca su": "Error during search on", - "Errore durante la rimozione dal database.": "Error removing from database.", - "Errore interno del database. Riprova più tardi.": "Internal database error. Please try again later.", - "Errore interno durante l'approvazione": "Internal error during approval", - "Errore interno: %s": "Internal error: %s", - "Errore nel caricamento dei libri": "Error loading books", - "Errore nel caricamento del file": "Error while uploading the file", - "Aggiunge badge cliccabili alla scheda libro per cercare su Anna's Archive, Z-Library e Project Gutenberg con un click. Ispirato all'estensione browser GoodLib.": "Adds clickable badges to the book detail page to search on Anna's Archive, Z-Library, and Project Gutenberg in one click. Inspired by the GoodLib browser extension.", - "Anna's Archive": "Anna's Archive", - "Catalogo pubblico": "Public catalog", - "Configura Fonti": "Configure Sources", - "Domini mirror": "Mirror domains", - "Dominio non valido. Inserisci solo host o host:porta, senza percorsi.": "Invalid domain. Enter only host or host:port, without paths.", - "Dominio personalizzato...": "Custom domain...", - "Errore durante l'aggiornamento del profilo.": "Error updating profile.", - "Cerca su:": "Search on:", - "Predefinita del sito": "Site default", - "Cerca \"%s\" su %s": "Search \"%s\" on %s", - "Fonti attive": "Active sources", - "GoodLib — External Sources": "GoodLib — External Sources", - "GoodLib — Fonti Esterne": "GoodLib — External Sources", - "Impostazioni GoodLib salvate correttamente.": "GoodLib settings saved successfully.", - "Mostra badge nella pagina dettaglio libro": "Show badges on the book detail page", - "Mostra badge nell'area amministrazione": "Show badges in the admin area", - "Mostra i badge nella pagina dettaglio libro del catalogo": "Show badges on the catalog book detail page", - "Mostra i badge nella scheda libro dell'area amministrazione": "Show badges on the admin book page", - "Project Gutenberg": "Project Gutenberg", - "Puoi scegliere un mirror suggerito oppure selezionare dominio personalizzato.": "You can choose a suggested mirror or select a custom domain.", - "Puoi usare i mirror suggeriti oppure inserire un dominio custom.": "You can use the suggested mirrors or enter a custom domain.", - "Questi siti cambiano dominio spesso. Seleziona un mirror funzionante.": "These sites often change domain. Select a working mirror.", - "Scheda libro admin": "Admin book page", - "Sono accettati anche domini personalizzati; se incolli un URL completo verrà salvato solo l'host.": "Custom domains are also accepted; if you paste a full URL, only the host will be saved.", - "Visibilita": "Visibility", - "Visibilità": "Visibility", - "Z-Library": "Z-Library", - "Errore nel caricamento del file JSON": "Error loading JSON file", - "Errore nel caricamento. Riprova.": "Error loading. Please try again.", - "Errore nel download della copertina.": "Error downloading the cover.", - "Errore nel recupero delle categorie.": "Error fetching the categories.", - "Errore nel recupero delle divisioni.": "Error fetching the divisions.", - "Errore nel recupero delle specifiche.": "Error fetching the specific sections.", - "Errore nel rifiuto": "Error in rejection", - "Errore nel rifiuto della richiesta": "Error while rejecting the request", - "Errore nel salvataggio dell'immagine.": "Error saving the image.", - "Errore nel salvataggio dell'ordine. Ricarica la pagina e riprova.": "Error saving order. Please reload the page and try again.", - "Errore nell'aggiornamento del template": "Error updating template", - "Errore nell'aggiornamento dello stato dell'API key: %s": "Error updating API key status: %s", - "Errore nell'aggiornamento:": "Error updating:", - "Errore nell'aggiornare i preferiti.": "Error updating favorites.", - "Errore nell'approvazione": "Error in approval", - "Errore nell'eliminazione dell'API key: %s": "Error deleting API key: %s", - "Errore nell'eliminazione:": "Error deleting:", - "Errore nell'operazione:": "Error in operation:", - "Errore nella Verifica dell'Installazione": "Installation Verification Error", - "Errore nella comunicazione con il server": "Server communication error", - "Errore nella copia:": "Copy error:", - "Errore nella copia: ": "Copy error: ", - "Errore nella creazione del genere.": "Error while creating the genre.", - "Errore nella creazione dell'API key: %s": "Error creating API key: %s", - "Errore nella creazione della recensione": "Error creating review", - "Errore nella creazione della richiesta di prestito": "Error creating loan request", - "Errore nella creazione:": "Error creating:", - "Errore nella prenotazione": "Reservation error", - "Errore nella query.": "Query error.", - "Errore nella ricerca": "Search error", - "Errore suggerimento": "Suggestion error", - "Errore!": "Error!", - "Errore:": "Error:", - "Errore: ": "Error: ", - "Errore: Utente non trovato": "Error: User not found", - "Errore: la data di scadenza deve essere successiva alla data di prestito.": "Error: the due date must be after the loan date.", - "Errore: tutti i campi obbligatori devono essere compilati.": "Error: all required fields must be filled.", - "Errori durante l'import": "Import Errors", - "Errori di validazione dopo il merge.": "Validation errors after merge.", - "Es. Biblioteca Digitale - Migliaia di libri da esplorare": "E.g. Digital Library - Thousands of books to explore", - "Es. Esplora migliaia di libri, prenota online e gestisci i tuoi prestiti.": "E.g. Explore thousands of books, book online and manage your loans.", - "Es. Italiana, Americana, Francese...": "E.g. Italian, American, French...", - "Es. Italiana, Americana...": "E.g. Italian, American...", - "Es. La Tua Biblioteca Digitale": "E.g. Your Digital Library", - "Es. Presentazione libro \"Il Nome della Rosa\"": "E.g. Book presentation \"The Name of the Rose\"", - "Es. Scopri il nostro catalogo digitale con migliaia di libri disponibili per il prestito. Registrati gratuitamente e inizia a leggere oggi stesso.": "E.g. Discover our digital catalog with thousands of books available for loan. Register for free and start reading today.", - "Es. Un libro fantastico!": "E.g. An amazing book!", - "Es. Un libro straordinario!": "E.g. An extraordinary book!", - "Es. biblioteca digitale, prestito libri, catalogo online, libri gratis": "E.g. digital library, book loan, online catalog, free books", - "Es. https://tuosito.com": "E.g. https://yoursite.com", - "Es. https://tuosito.com/uploads/og-image.jpg": "E.g. https://yoursite.com/uploads/og-image.jpg", - "Esci": "Logout", - "Esecuzione ogni 30 minuti (consigliato)": "Execute every 30 minutes (recommended)", - "Esecuzione ogni ora (8:00-20:00)": "Execute every hour (8:00-20:00)", - "Esegue la rigenerazione ogni giorno alle 02:00 e registra il log in": "Runs regeneration daily at 02:00 and logs to", - "Esegue la rigenerazione ogni giorno alle 02:00 e registra il log in storage/logs/sitemap.log.": "Executes regeneration daily at 02:00 and logs to storage/logs/sitemap.log.", - "Esegui": "Run", - "Esegui Manutenzione": "Run Maintenance", - "Eseguito da": "Executed by", - "Esempio": "Example", - "Esempio di Chiamata": "Request Example", - "Esempio route inglese:": "English route example:", - "Esempio route italiana:": "Italian route example:", - "Esempio:": "Example:", - "Esistente": "Existing", - "Esito restituzione": "Return outcome", - "Español (ES)": "Spanish (ES)", - "Esplora Catalogo": "Explore Catalog", - "Esplora catalogo": "Browse Catalog", - "Esplora e gestisci gli autori della biblioteca": "Explore and manage library authors", - "Esplora e gestisci gli editori della biblioteca": "Explore and manage library publishers", - "Esplora e gestisci gli utenti registrati alla biblioteca": "Explore and manage registered library users", - "Esplora e gestisci la collezione della biblioteca": "Explore and manage the library collection", - "Esplora i generi principali": "Explore the main genres", - "Esplora il catalogo": "Explore the catalog", - "Esplora il nostro vasto catalogo di libri, prenota i tuoi titoli preferiti e scopri nuove letture": "Explore our vast catalog of books, reserve your favorite titles and discover new reads", - "Esplora il nostro vasto catalogo di libri, prenota i tuoi titoli preferiti e scopri nuove letture. Sistema di prestito moderno e intuitivo con ricerca avanzata e categorie organizzate.": "Explore our vast book catalog, reserve your favorite titles and discover new reads. Modern and intuitive lending system with advanced search and organized categories.", - "Esplora per Categoria": "Explore by Category", - "Esporta": "Export", - "Esporta CSV": "Export CSV", - "Esporta Prestiti": "Export Loans", - "Seleziona gli stati dei prestiti da esportare:": "Select the loan statuses to export:", - "Seleziona almeno 2 autori da unire": "Select at least 2 authors to merge", - "Seleziona almeno 2 autori": "Select at least 2 authors", - "Seleziona almeno 2 editori": "Select at least 2 publishers", - "Seleziona almeno 2 editori da unire": "Select at least 2 publishers to merge", - "Seleziona almeno uno stato": "Select at least one status", - "Esporta CSV (formato compatibile per import)": "Export CSV (compatible format for import)", - "Esporta Excel": "Export Excel", - "Esporta PDF": "Export PDF", - "Esporta selezionati": "Export selected", - "Esportazione di %d utenti filtrati su %d totali": "Exporting %d filtered users out of %d total", - "Esportazione di tutti i %d utenti": "Exporting all %d users", - "Esportazione di %d libri filtrati su %d totali": "Exporting %d filtered books out of %d total", - "Esportazione di tutti i %d libri del catalogo": "Exporting all %d books from the catalog", - "Estensione": "Extension", - "Estensione del file non valida.": "Invalid file extension.", - "Estensioni": "Extensions", - "Etichetta": "Label", - "Etichette": "Labels", - "Etichette interne grandi (Herma 4630, Avery 3490)": "Large internal labels (Herma 4630, Avery 3490)", - "European Article Number (opzionale)": "European Article Number (optional)", - "Eventi": "Events", - "Eventi Recenti": "Recent Events", - "Evento": "Event", - "Evento aggiornato con successo!": "Event updated successfully!", - "Evento creato con successo!": "Event created successfully!", - "Evento della biblioteca": "Library event", - "Evento eliminato con successo!": "Event deleted successfully!", - "Evento non trovato.": "Event not found.", - "Evento visibile sul sito": "Event visible on website", - "Eventuali annotazioni sullo stato del libro...": "Any notes on book condition...", - "Excel": "Excel", - "Exporting %d filtered users out of %d total": "Exporting %d filtered users out of %d total", - "Exporting all %d users": "Exporting all %d users", - "FAQ": "FAQ", - "FATAL ERROR:": "FATAL ERROR:", - "Facebook": "Facebook", - "Fallimento": "Failure", - "Fatal Error:": "Fatal Error:", - "Fatto!": "Done!", - "Feature %d": "Feature %d", - "Feature 1": "Feature 1", - "Feature 2": "Feature 2", - "Feature 3": "Feature 3", - "Feature 4": "Feature 4", - "Features - Caratteristiche": "Features - Features", - "Femmina": "Female", - "File": "File", - "File \"%s\" pronto per l'upload": "File \"%s\" ready for upload", - "File %s nella directory root": "File %s in the root directory", - "File .env:": ".env file:", - "File .htaccess creato": ".htaccess file created", - "File .installed:": ".installed file:", - "File CSV (max 10MB)": "CSV file (max 10MB)", - "File CSV non valido: usa \";\" o \",\" come separatore.": "Invalid CSV file: use ';' or ',' as delimiter.", - "File CSV vuoto o formato non valido": "Empty CSV file or invalid format", - "File JSON con le traduzioni (opzionale). Puoi caricarlo anche in seguito.": "JSON file with translations (optional). You can upload it later.", - "File JSON non valido": "Invalid JSON file", - "File Principale:": "Main File:", - "File URL": "File URL", - "File ZIP con struttura plugin valida": "ZIP file with valid plugin structure", - "File ZIP non trovato.": "ZIP file not found.", - "File ZIP troppo grande. Dimensione massima: 100 MB.": "ZIP file too large. Maximum size: 100 MB.", - "File attuale": "Current file", - "File di Esempio": "Example File", - "File di Traduzione": "Translation File", - "File di Traduzione Attuale": "Current Translation File", - "File di Traduzione JSON": "JSON Translation File", - "File di traduzione non trovato": "Translation file not found", - "File esistente (data modifica)": "Existing file (modification date)", - "File non trovato nell'upload.": "File not found in upload.", - "File non valido o corrotto.": "Invalid or corrupted file.", - "File plugin.json non trovato nel pacchetto.": "plugin.json file not found in package.", - "File plugin.json non valido.": "Invalid plugin.json file.", - "File principale PHP specificato in %s": "Main PHP file specified in %s", - "File principale del plugin non trovato.": "Plugin main file not found.", - "File sitemap non trovato": "Sitemap file not found", - "File sitemap presente": "Sitemap file present", - "File troppo grande. Dimensione massima 10MB.": "File too large. Maximum size 10MB.", - "File:": "File:", - "Filtra": "Filter", - "Filtra per Mensola": "Filter by Shelf", - "Filtra per Scaffale": "Filter by Bookcase", - "Filtra per tipo": "Filter by type", - "Filtra mensole per scaffale": "Filter shelves by bookcase", - "Filtri": "Filters", - "Filtri attivi:": "Active filters:", - "Filtri cancellati": "Filters cleared", - "Filtri di Ricerca": "Search Filters", - "Filtri salvati": "Filters saved", - "Filtro Libro": "Book Filter", - "Filtro Utente": "User Filter", - "Filtro genere attivo": "Genre filter active", - "Filtro attivo": "Active filter", - "Filtro sottogenere attivo": "Subgenre filter active", - "Fallito": "Failed", - "Fine": "Finish", - "Fine:": "End:", - "Fino a quando? (opzionale):": "Until when? (optional):", - "Footer": "Footer", - "Formati supportati: JPG, PNG, GIF, WebP. Dimensione massima: 5MB": "Supported formats: JPG, PNG, GIF, WebP. Maximum size: 5MB", - "Formati supportati: MP3, M4A, OGG • Dimensione massima: 500 MB": "Supported formats: MP3, M4A, OGG • Max size: 500 MB", - "Formati supportati: PDF, ePub • Dimensione massima: 100 MB": "Supported formats: PDF, ePub • Max size: 100 MB", - "Formato": "Format", - "Formato CSV Dettagliato": "Detailed CSV Format", - "Formato Etichetta": "Label Format", - "Formato File JSON": "JSON File Format", - "Formato ISBN non valido.": "Invalid ISBN format.", - "Formato biblioteche scolastiche (compatibile A4)": "School library format (A4 compatible)", - "Formato biblioteche scolastiche (compatibili A4)": "School library format (A4 compatible)", - "Formato immagine non supportato. Usa JPG, PNG o WebP.": "Image format not supported. Use JPG, PNG or WebP.", - "Formato impostazioni non valido.": "Invalid settings format.", - "Formato orizzontale per dorso": "Horizontal format for spine", - "Formato quadrato Tirrenia": "Tirrenia square format", - "Formato: CSV con separatore %s • Max 10MB": "Format: CSV with %s separator • Max 10MB", - "Formato: xx_XX (es. it_IT, en_US, es_ES)": "Format: xx_XX (e.g. it_IT, en_US, es_ES)", - "Français (FR)": "French (FR)", - "Frecce ↑ ↓ per il volume": "↑ ↓ arrows for volume", - "From Email": "From Email", - "From Name": "From Name", - "Fuori Catalogo": "Out of Catalog", - "Genera automaticamente": "Generate automatically", - "Generato il": "Generated on", - "Generato il:": "Generated on:", - "Generazione CSV in corso...": "Generating CSV...", - "Generazione...": "Generating...", - "Genere": "Genre", - "Genere letterario": "Literary genre", - "Genere letterario del libro": "Literary genre of the book", - "Genere padre (opz.)": "Parent genre (opt.)", - "Genere principale": "Main genre", - "Genere:": "Genre:", - "Generi": "Genres", - "Generi Principali": "Main Genres", - "Generi e sottogeneri": "Genres and subgenres", - "Gestione Autori": "Authors Management", - "Gestione Biblioteca": "Library Management", - "Gestione Collocazione": "Location Management", - "Gestione Contenuti (CMS)": "Content Management (CMS)", - "Gestione Editori": "Publishers Management", - "Gestione Eventi": "Event Management", - "Gestione Generi": "Genres Management", - "Gestione Generi e Sottogeneri": "Genres and Subgenres Management", - "Gestione JavaScript Personalizzati basata su Cookie": "Cookie-based Custom JavaScript Management", - "Gestione Libri": "Books Management", - "Gestione Lingue": "Language Management", - "Gestione Multilingua": "Multilingual Management", - "Gestione Plugin": "Plugin Management", - "Gestione Prenotazioni": "Reservation Management", - "Gestione Prestiti": "Loans Management", - "Gestione Recensioni": "Reviews Management", - "Gestione Utenti": "Users Management", - "Gestione autori": "Authors management", - "Gestione classificazione Dewey: seed e statistiche": "Dewey classification management: seed and statistics", - "Gestione collezione": "Collection management", - "Gestione prestiti": "Loans management", - "Gestione recensioni": "Reviews management", - "Gestione utenti": "Users management", - "Gestisci": "Manage", - "Gestisci Eventi": "Manage Events", - "Gestisci Restituzione": "Manage Return", - "Gestisci gli aggiornamenti dell'applicazione": "Manage application updates", - "Gestisci gli autori della collezione": "Manage collection authors", - "Gestisci gli eventi della biblioteca: crea, modifica ed elimina eventi con immagini e descrizioni": "Manage library events: create, edit and delete events with images and descriptions", - "Gestisci i generi letterari": "Manage literary genres", - "Gestisci i prestiti attivi e storici": "Manage active and historical loans", - "Gestisci i tuoi titoli preferiti, scopri quando tornano disponibili e accedi rapidamente ai dettagli del libro.": "Manage your favorite titles, find out when they become available, and quickly access book details.", - "Gestisci il contenuto della pagina Chi Siamo con testo e immagine": "Manage the About Us page content with text and image", - "Gestisci il contenuto della pagina Chi Siamo con testo e immagine personalizzati": "Manage About Us page content with custom text and image", - "Gestisci l'accesso all'API per cercare libri via EAN, ISBN e autore": "Manage API access to search books via EAN, ISBN and author", - "Gestisci la collocazione fisica dei libri": "Manage physical location of books", - "Gestisci la visibilità delle categorie di cookie nel banner. I cookie essenziali sono sempre visibili e obbligatori.": "Manage cookie category visibility in banner. Essential cookies are always visible and mandatory.", - "Gestisci le case editrici": "Manage publishers", - "Gestisci le classificazioni Dewey per italiano e inglese": "Manage Dewey classifications for Italian and English", - "Gestisci le estensioni dell'applicazione": "Manage application extensions", - "Gestisci preferenze cookie": "Manage cookie preferences", - "Gestisci restituzione": "Manage return", - "Gestisci tutte": "Manage all", - "Gestito da": "Managed by", - "Giorni di preavviso per scadenza prestito": "Days of advance warning for loan expiry", - "Già Installato": "Already Installed", - "Già recensito": "Already reviewed", - "Gli amministratori non richiedono tessera e riceveranno un invito per impostare la password.": "Administrators do not require a library card and will receive an invitation to set their password.", - "Gli appuntamenti della biblioteca": "Library events", - "Gli script JavaScript sono divisi in 3 categorie in base alla tipologia di cookie:": "JavaScript scripts are divided into 3 categories based on cookie type:", - "Gli utenti possono selezionare questa lingua": "Users can select this language", - "Globale": "Global", - "Google Books API": "Google Books API", - "Google Books Configurato": "Google Books configured", - "Google reCAPTCHA v3": "Google reCAPTCHA v3", - "Grazie per aver scelto Pinakes!": "Thank you for choosing Pinakes!", - "Gruppo": "Group", - "Guida": "Guide", - "Guida alla Gestione Lingue": "Language Management Guide", - "Guida alle Route": "Route Guide", - "Hai aggiunto %s copie a \"%s\"": "You added %s copies to \"%s\"", - "Hai già un account?": "Already have an account?", - "Hai libri che dovevano essere restituiti. Restituiscili al più presto per evitare sanzioni.": "You have books that should have been returned. Return them as soon as possible to avoid penalties.", - "Hai modifiche non salvate che andranno perse. Continuare?": "You have unsaved changes that will be lost. Continue?", - "Hai modifiche non salvate. I dati attuali verranno sostituiti.": "You have unsaved changes. Current data will be replaced.", - "Hai modifiche non salvate. Vuoi continuare e perderle?": "You have unsaved changes. Do you want to continue and lose them?", - "Header HTTP (consigliato):": "HTTP Header (recommended):", - "Heading 1": "Heading 1", - "Heading 2": "Heading 2", - "Heading 3": "Heading 3", - "Heading 4": "Heading 4", - "Heading 5": "Heading 5", - "Heading 6": "Heading 6", - "Hero - Testata principale": "Hero - Main Header", - "Home": "Home", - "Homepage": "Homepage", - "Host": "Host", - "Host Database": "Database Host", - "I Cookie Essenziali sono sempre visibili e non possono essere disabilitati poiché necessari per il funzionamento del sito.": "Essential Cookies are always visible and cannot be disabled as they are necessary for site functionality.", - "I Miei Preferiti": "My Favorites", - "I campi con * sono obbligatori": "Fields with * are required", - "I campi null indicano dati non disponibili": "Null fields indicate unavailable data", - "I contenitori fisici principali dove sono organizzati i libri": "The main physical containers where books are organized", - "I dati provengono dal file JSON, nessun seeding necessario.": "Data comes from the JSON file, no seeding required.", - "I doppioni (per ID, ISBN13 o EAN) vengono aggiornati senza modificare le copie fisiche": "Duplicates (by ID, ISBN13 or EAN) are updated without modifying physical copies", - "I filtri correnti sono stati salvati nell'URL": "Current filters have been saved in the URL", - "I filtri vengono applicati automaticamente mentre digiti": "Filters are applied automatically as you type", - "I livelli (ripiani) all'interno di ogni scaffale": "The levels (shelves) within each bookcase", - "I miei preferiti": "My Favorites", - "I tuoi preferiti": "Your Favorites", - "ID": "ID", - "ID:": "ID:", - "ID Editore": "Publisher ID", - "ID Prestito": "Loan ID", - "ID Prestito:": "Loan ID:", - "ID libro non valido": "Invalid book ID", - "ID libro:": "Book ID:", - "ID prestito non valido": "Invalid loan ID", - "ID utente:": "User ID:", - "IP": "IP", - "IP Address": "IP Address", - "ISBN": "ISBN", - "ISBN 10": "ISBN 10", - "ISBN 13": "ISBN 13", - "ISBN Mancante": "Missing ISBN", - "ISBN a 13 cifre (univoco)": "13-digit ISBN (unique)", - "ISBN non trovato nelle fonti disponibili.": "ISBN not found in available sources.", - "ISBN non valido. Specifica 10 o 13 cifre (eventualmente con X finale).": "Invalid ISBN. Please provide 10 or 13 digits (X allowed at the end).", - "ISBN-13:": "ISBN-13:", - "ISBN10": "ISBN10", - "ISBN10 Non Valido": "Invalid ISBN10", - "ISBN10 deve contenere esattamente 10 caratteri (9 cifre + 1 cifra o X).": "ISBN10 must contain exactly 10 characters (9 digits + 1 digit or X).", - "ISBN10 o ISBN13": "ISBN10 or ISBN13", - "ISBN13": "ISBN13", - "ISBN13 Non Valido": "Invalid ISBN13", - "ISBN13 deve contenere esattamente 13 cifre.": "ISBN13 must contain exactly 13 digits.", - "ISBN13: %s": "ISBN13: %s", - "ISBN:": "ISBN:", - "IT": "IT", - "Icona FontAwesome": "FontAwesome Icon", - "Identità": "Identity", - "Identità Applicazione": "Application Identity", - "Ieri": "Yesterday", - "Ieri alle %s": "Yesterday at %s", - "Il Mio Profilo": "My Profile", - "Prima di ogni aggiornamento viene creato automaticamente un backup del database.": "Before each update, a database backup is automatically created.", - "Pinakes è aggiornato": "Pinakes is up to date", - "Pinakes è stato aggiornato con successo.": "Pinakes has been successfully updated.", - "Pinakes è stato installato con successo ed è pronto per essere utilizzato.": "Pinakes has been successfully installed and is ready to use.", - "Il campo è obbligatorio": "This field is required", - "Il codice lingua non può essere modificato dopo la creazione.": "The language code cannot be modified after creation.", - "Il codice lingua è obbligatorio (es. it_IT, en_US)": "Language code is required (e.g. it_IT, en_US)", - "Il codice scaffale \"%s\" esiste già. Usa un codice diverso.": "Shelf code \"%s\" already exists. Use a different code.", - "Il codice tessera sarà generato automaticamente (formato: ADMIN-YYYYMMDD-XXX).": "The membership code will be generated automatically (format: ADMIN-YYYYMMDD-XXX).", - "Il codice deve iniziare con le stesse tre cifre della classe principale": "The code must start with the same three digits of the main class", - "Il codice verrà inserito in un tag ": "The code will be inserted in a tags", - "Il cron utilizza gli stessi permessi dell'utente di sistema che lo esegue": "Cron uses same permissions as system user executing it", - "Il database '%s' non è vuoto. Deve essere un database vuoto.": "The database '%s' is not empty. It must be an empty database.", - "Il database deve essere vuoto.": "The database must be empty.", - "Il database è coerente e non sono stati rilevati problemi.": "The database is consistent and no issues were found.", - "Il database è stato installato, ma mancano le librerie PHP necessarie per eseguire l'applicazione.": "The database has been installed, but the PHP libraries needed to run the application are missing.", - "Il file JSON deve contenere coppie chiave-valore:": "The JSON file must contain key-value pairs:", - "Il file JSON non è valido:": "JSON file is not valid:", - "Il file deve avere estensione .csv": "The file must have a .csv extension", - "Il file deve contenere coppie chiave (italiano) - valore (traduzione).": "The file must contain key (Italian) - value (translation) pairs.", - "Il file deve essere un JSON valido": "File must be a valid JSON", - "Il file generato si trova in": "Generated file is located in", - "Il file generato si trova in public/sitemap.xml": "Generated file is located at public/sitemap.xml", - "Il formato scelto verrà utilizzato per generare i PDF delle etichette con codice a barre.": "The chosen format will be used to generate label PDFs with barcodes.", - "Il formato selezionato verrà applicato a tutte le etichette generate dal sistema.": "The selected format will be applied to all labels generated by the system.", - "Il libro selezionato è già in prestito. Seleziona un altro libro.": "The selected book is already on loan. Select another book.", - "Il libro viene consegnato subito all'utente. Se deselezionato, il prestito rimarrà in stato 'Da ritirare' fino alla conferma del ritiro.": "The book is delivered immediately to the user. If unchecked, the loan will remain in 'Ready for pickup' status until pickup is confirmed.", - "Il logo verrà ridimensionato automaticamente": "The logo will be automatically resized", - "Il mio profilo": "My Profile", - "Il nome del genere è obbligatorio.": "Genre name is required.", - "Il nome dell'": "The name of", - "Il nome dell'API key è obbligatorio.": "API key name is required.", - "Il nome dell'autore è obbligatorio.": "Author name is required.", - "Il nome dell'editore è obbligatorio.": "Publisher name is required.", - "Il nome della rosa": "The Name of the Rose", - "Il nome inglese è obbligatorio": "English name is required", - "Il nome inglese è obbligatorio (es. Italian, English)": "English name is required (e.g. Italian, English)", - "Il nome nativo è obbligatorio": "Native name is required", - "Il nome nativo è obbligatorio (es. Italiano, English)": "Native name is required (e.g. Italiano, English)", - "Il nostro team è stato notificato e sta lavorando per risolvere il problema.": "Our team has been notified and is working to resolve the issue.", - "Il pacchetto contiene percorsi non validi.": "Package contains invalid paths.", - "Il pacchetto non contiene file validi.": "Package does not contain valid files.", - "Il prestito è stato approvato con successo.": "The loan has been successfully approved.", - "Il prestito è stato rifiutato.": "The loan has been rejected.", - "Il sistema creerà automaticamente libri, autori ed editori": "The system will automatically create books, authors, and publishers", - "Il sistema include un cron job che gestisce automaticamente:": "The system includes a cron job that automatically handles:", - "Il sistema invierà automaticamente una email di promemoria agli utenti prima della scadenza del prestito. Il valore predefinito è 3 giorni.": "The system will automatically send a reminder email to users before the loan expires. Default value is 3 days.", - "Il server ha restituito una risposta non valida. Controlla i log per dettagli.": "The server returned an invalid response. Check the logs for details.", - "Il sito web deve essere un URL valido (es. https://www.esempio.com).": "Website must be a valid URL (e.g. https://www.example.com).", - "Il sito web deve essere un URL valido.": "Website must be a valid URL.", - "Il titolo del libro è obbligatorio.": "The book title is required.", - "Il titolo principale della pagina": "The main page title", - "Il titolo verrà utilizzato anche per generare l'URL della pagina": "The title will also be used to generate the page URL", - "Il titolo è obbligatorio.": "Title is required.", - "Il tuo account è in attesa di approvazione. Riceverai un'email quando sarà attivato": "Your account is pending approval. You will receive an email when it is activated", - "Il tuo account è stato sospeso. Contatta l'amministratore per maggiori informazioni": "Your account has been suspended. Contact the administrator for more information", - "Il tuo browser non supporta la riproduzione audio.": "Your browser does not support audio playback.", - "Immagine": "Image", - "Immagine Caricata!": "Image Uploaded!", - "Immagine Open Graph": "Open Graph Image", - "Immagine attuale": "Current Image", - "Immagine di copertina della pagina (opzionale)": "Page cover image (optional)", - "Immagine di sfondo Hero": "Hero Background Image", - "Immagine in Evidenza": "Featured Image", - "Immagine mostrata quando condividi la pagina su social media (Facebook, Twitter, LinkedIn). Se vuoto, usa l'immagine hero di sfondo. Dimensioni consigliate: 1200x630px (rapporto 1.91:1).": "Image shown when sharing the page on social media (Facebook, Twitter, LinkedIn). If empty, uses the hero background image. Recommended size: 1200x630px (1.91:1 ratio).", - "Immagine mostrata quando condividi su social. Dimensioni consigliate: 1200x630px (rapporto 1.91:1). Se vuoto, usa l'immagine hero di sfondo.": "Image shown when sharing on social media. Recommended dimensions: 1200x630px (1.91:1 ratio). If empty, uses the hero background image.", - "Immagini JPG, PNG o WebP (max 5MB)": "JPG, PNG or WebP images (max 5MB)", - "Import CSV": "CSV Import", - "Import Libri da CSV": "Import Books from CSV", - "Import Massivo Libri": "Bulk Book Import", - "Import completato: %d libri nuovi, %d libri aggiornati, %d autori creati, %d editori creati": "Import completed: %d new books, %d updated books, %d authors created, %d publishers created", - "Import dati iniziali...": "Importing initial data...", - "Import massivo da CSV": "Bulk import from CSV", - "Import schema in corso...": "Importing schema...", - "Import trigger...": "Importing triggers...", - "Importa": "Import", - "Importa Dati": "Import Data", - "Importa da ISBN": "Import from ISBN", - "Importazione completata con successo!": "Import completed successfully!", - "Importazione in corso...": "Import in progress...", - "Importazione libro": "Importing book", - "Importazione...": "Importing...", - "Impossibile aggiornare l'utente. Riprova più tardi.": "Unable to update user. Please try again later.", - "Impossibile aggiornare la chiave Google Books.": "Unable to update the Google Books key.", - "Impossibile aggiornare la posizione automatica": "Unable to update automatic position", - "Impossibile aggiornare le copie.": "Unable to update copies.", - "Impossibile approvare la recensione": "Unable to approve the review", - "Impossibile aprire il file CSV": "Unable to open the CSV file", - "Impossibile aprire il file ZIP.": "Unable to open ZIP file.", - "Impossibile archiviare il messaggio.": "Unable to archive the message.", - "Impossibile caricare gli editori. Controlla la console per i dettagli.": "Unable to load publishers. Check console for details.", - "Impossibile caricare i libri. Controlla la console per i dettagli.": "Unable to load books. Check console for details.", - "Impossibile completare l'operazione. Riprova più tardi.": "Unable to complete the operation. Try again later.", - "Impossibile comunicare con il server. Riprova più tardi.": "Unable to communicate with the server. Please try again later.", - "Impossibile configurare autocomplete: elementi mancanti": "Unable to configure autocomplete: missing elements", - "Impossibile contattare il servizio di scraping. Riprova più tardi.": "Unable to contact the scraping service. Please try again later.", - "Impossibile creare il file .env. Verifica i permessi.": "Unable to create the .env file. Check permissions.", - "Impossibile creare la cartella di upload.": "Unable to create the upload directory.", - "Impossibile creare la directory del plugin.": "Unable to create plugin directory.", - "Impossibile creare la prenotazione": "Unable to create reservation", - "Impossibile creare la struttura del plugin.": "Unable to create plugin structure.", - "Impossibile eliminare il file di manutenzione": "Unable to delete maintenance file", - "Impossibile eliminare il messaggio.": "Unable to delete the message.", - "Impossibile eliminare l'autore: sono presenti libri associati.": "Cannot delete the author: there are books associated with them.", - "Impossibile eliminare l'editore: sono presenti libri associati.": "Cannot delete the publisher: there are books associated with it.", - "Impossibile eliminare l'installer:": "Cannot delete the installer:", - "Impossibile eliminare l'installer: devi prima installare le dipendenze PHP con": "Cannot delete the installer: you must first install the PHP dependencies with", - "Impossibile eliminare la notifica.": "Unable to delete the notification.", - "Impossibile generare la risposta JSON.": "Unable to generate the JSON response.", - "Impossibile importare i dati per questo ISBN.": "Unable to import data for this ISBN.", - "Impossibile inizializzare Uppy per i contenuti digitali.": "Unable to initialize Uppy for digital content.", - "Impossibile inviare la recensione": "Unable to submit review", - "Impossibile inviare la recensione.": "Unable to submit review.", - "Impossibile leggere il file caricato": "Unable to read the uploaded file", - "Impossibile processare l'immagine.": "Unable to process the image.", - "Impossibile ridurre le copie a %d. Ci sono %d copie non disponibili (in prestito, perse o danneggiate). Il numero minimo di copie totali è %d.": "Cannot reduce the copies to %d. There are %d unavailable copies (on loan, lost, or damaged). The minimum total number of copies is %d.", - "Impossibile rifiutare la recensione": "Unable to reject the review", - "Impossibile rigenerare la sitemap: %s": "Unable to regenerate sitemap: %s", - "Impossibile salvare l'utente. Riprova più tardi.": "Unable to save user. Please try again later.", - "Impossibile segnare come letta la notifica.": "Unable to mark the notification as read.", - "Impossibile segnare tutte le notifiche come lette.": "Unable to mark all notifications as read.", - "Impossibile segnare tutti i messaggi come letti.": "Unable to mark all messages as read.", - "Impossibile recuperare i dati degli autori": "Unable to retrieve author data", - "Impossibile recuperare i dati degli editori": "Unable to retrieve publisher data", - "Imposta come Predefinita": "Set as Default", - "Imposta come attiva o predefinita": "Set as active or default", - "Imposta come lingua predefinita per nuovi utenti": "Set as default language for new users", - "Imposta il nome mostrato nel backend e il logo utilizzato nel layout.": "Set the name shown in the backend and the logo used in the layout.", - "Impostare questa lingua come predefinita?\n\nQuesta diventerà la lingua dell'intera applicazione per tutti gli utenti.": "Set this language as default?\n\nThis will become the language of the entire application for all users.", - "Impostare questa lingua come predefinita?\\n\\nQuesta diventerà la lingua dell'intera applicazione per tutti gli utenti.": "Set this language as default?\\n\\nThis will become the language of the entire application for all users.", - "Impostazioni": "Settings", - "Impostazioni Applicazione": "Application Settings", - "Impostazioni Date": "Date Settings", - "Impostazioni Discogs salvate correttamente.": "Discogs settings saved successfully.", - "Impostazioni SEO": "SEO Settings", - "Impostazioni avanzate aggiornate correttamente.": "Advanced settings updated successfully.", - "Impostazioni contatti aggiornate correttamente.": "Contact settings updated successfully.", - "Impostazioni email aggiornate correttamente.": "Email settings updated successfully.", - "Impostazioni generali aggiornate correttamente.": "General settings updated successfully.", - "Impostazioni privacy aggiornate correttamente.": "Privacy settings updated successfully.", - "Impostazioni salvate.": "Settings saved.", - "In Attesa di Approvazione": "Pending Approval", - "In Corso": "In Progress", - "In Riparazione": "Under Repair", - "In Ritardo": "Overdue", - "In attesa": "Pending", - "In attesa di approvazione": "Pending approval", - "In corso": "In progress", - "In corso di restituzione": "Pending return", - "In corso...": "In progress...", - "In manutenzione": "Under maintenance", - "In prestito": "On loan", - "In questa pagina trovi tutti gli eventi, gli incontri e i laboratori organizzati dalla biblioteca.": "On this page you will find every event, talk, and workshop organized by the library.", - "In ritardo": "Overdue", - "Inattivo": "Inactive", - "Indietro": "Back", - "Indirizzo": "Address", - "Indirizzo:": "Address:", - "Indirizzo completo": "Full Address", - "Indirizzo completo *": "Full address *", - "Info": "Info", - "Informazione": "Information", - "Informazioni": "Information", - "Informazioni Base": "Basic Information", - "Informazioni Evento": "Event Information", - "Informazioni Importanti": "Important Information", - "Informazioni Libro": "Book Information", - "Informazioni Personali": "Personal Information", - "Informazioni Prestito": "Loan Information", - "Informazioni Report": "Report Info", - "Informazioni di Contatto": "Contact Information", - "Informazioni di contatto": "Contact information", - "Informazioni editore": "Publisher information", - "Informazioni generali": "General Information", - "Informazioni personali": "Personal Information", - "Informazioni tessera": "Card information", - "Informazioni utili per il personale": "Useful information for staff", - "Inizia Installazione": "Start Installation", - "Inizia ad aggiungere libri al catalogo": "Start adding books to the catalog", - "Inizia aggiungendo il primo libro alla collezione": "Start by adding the first book to the collection", - "Inizia aggiungendo la prima lingua.": "Start by adding the first language.", - "Inizia caricando il tuo primo plugin": "Get started by uploading your first plugin", - "Inizia creando il primo genere letterario": "Start by creating your first literary genre", - "Inizia la Tua Avventura Letteraria": "Start Your Literary Adventure", - "Inizializzazione...": "Initializing...", - "Inizio installazione...": "Starting installation...", - "Inizio:": "Start:", - "Inserisci $1": "Enter $1", - "Inserisci codice locale (es. es_ES per Spagnolo)": "Enter locale code (e.g. es_ES for Spanish)", - "Inserisci il motivo del rifiuto...": "Enter the reason for rejection...", - "Inserisci il titolo": "Enter title", - "Inserisci la data di inizio (YYYY-MM-DD)": "Enter the start date (YYYY-MM-DD)", - "Inserisci la tua email per ricevere il link di reset.": "Enter your email to receive the reset link.", - "Inserisci la tua email per ricevere un link di reset": "Enter your email to receive a reset link", - "Inserisci la tua nuova password": "Enter your new password", - "Inserisci le credenziali del tuo database MySQL. Assicurati che il database sia già stato creato e sia vuoto.": "Enter your MySQL database credentials. Make sure the database has been created and is empty.", - "Inserisci le informazioni del nuovo evento": "Enter the information for the new event", - "Inserisci parole chiave separate da virgole per facilitare la ricerca": "Enter keywords separated by commas to facilitate searching", - "Inserisci solo script che NON tracciano utenti. Per analytics/marketing usa le sezioni dedicate.": "Only insert scripts that DO NOT track users. For analytics/marketing use the dedicated sections.", - "Inserisci un codice ISBN per continuare.": "Enter an ISBN code to continue.", - "Inserisci un numero valido di copie": "Enter a valid number of copies", - "Instagram": "Instagram", - "Installa": "Install", - "Installa Plugin": "Install Plugin", - "Installato": "Installed", - "Installato:": "Installed:", - "Installazione": "Installation", - "Installazione Completata": "Installation Completed", - "Installazione Completata!": "Installation Completed!", - "Installazione Cron Job": "Cron Job Installation", - "Installazione Database": "Database Installation", - "Installazione Guidata": "Guided Installation", - "Installazione delle tabelle del database e configurazione iniziale...": "Installing database tables and initial configuration...", - "Installazione fallita": "Installation failed", - "Installazione file": "Installing files", - "Installazione in corso...": "Installation in progress...", - "Installazione italiana usa": "Italian installation uses", - "Installazione plugin Open Library...": "Installing Open Library plugin...", - "Installer Pinakes": "Pinakes Installer", - "Installer eliminato con successo!": "Installer deleted successfully!", - "Integrità dati": "Data integrity", - "Internal server error": "Internal server error", - "Intestazione": "Header", - "Intestazione sezione": "Section Header", - "Inventario": "Inventory", - "Invia Richiesta": "Submit Request", - "Invia link": "Send link", - "Invia link di reset": "Send reset link", - "Invia messaggio": "Send message", - "Invia recensione": "Submit review", - "Inviaci un messaggio": "Send us a message", - "Inviato": "Sent", - "Invio in corso...": "Sending...", - "Invita gli utenti a registrarsi": "Invite users to register", - "Italiano (IT)": "Italian (IT)", - "JPG, PNG, GIF, WEBP - Max 5MB": "JPG, PNG, GIF, WEBP - Max 5MB", - "JavaScript Analitici": "Analytics JavaScript", - "JavaScript Essenziali": "Essential JavaScript", - "JavaScript Marketing": "Marketing JavaScript", - "L'API key può essere fornita in due modi:": "API key can be provided in two ways:", - "L'API è limitata a 50 risultati per richiesta": "API is limited to 50 results per request", - "L'applicazione NON può funzionare senza questo passaggio!": "The application CANNOT work without this step!", - "L'applicazione è stata installata correttamente e tutte le verifiche sono andate a buon fine.": "The application has been successfully installed and all checks have passed.", - "L'email di attivazione è stata inviata. L'utente potrà verificare il proprio account cliccando il link ricevuto (valido 7 giorni).": "Activation email has been sent. User can verify their account by clicking the link received (valid for 7 days).", - "L'immagine verrà scaricata al salvataggio": "The image will be downloaded on save", - "L'immagine è troppo grande. Max 5MB.": "Image is too large. Max 5MB.", - "L'indirizzo email deve essere valido.": "Email address must be valid.", - "L'installazione non è completa o valida.": "The installation is not complete or valid.", - "L'installazione è stata completata senza errori.": "The installation has been completed without errors.", - "L'ID primario deve essere presente nella lista degli autori da unire": "The primary ID must be present in the list of authors to merge", - "L'ID primario deve essere presente nella lista degli editori da unire": "The primary ID must be present in the list of publishers to merge", - "L'ora dell'evento deve essere nel formato corretto (HH:MM).": "Event time must be in the correct format (HH:MM).", - "L'ora deve essere nel formato corretto (HH:MM).": "Time must be in the correct format (HH:MM).", - "L'URL canonico non è valido. Deve iniziare con http:// o https://": "Canonical URL is not valid. It must start with http:// or https://", - "L'ultima sezione che invita all'azione": "The final call-to-action section", - "L'utente del database non ha i permessi per creare i TRIGGER. L'installazione è stata completata, ma per garantire la piena integrità dei dati è necessario installarli manualmente.": "The database user does not have permissions to create TRIGGERS. The installation has been completed, but to ensure full data integrity it is necessary to install them manually.", - "L'utente non è in stato sospeso. Solo gli utenti sospesi richiedono approvazione.": "User is not in suspended state. Only suspended users require approval.", - "L'utente riceverà un'email con link di verifica (valido 7 giorni) e potrà attivare autonomamente l'account.": "User will receive an email with verification link (valid for 7 days) and can activate the account autonomously.", - "L'utente riceverà una notifica via email della prenotazione creata": "User will receive email notification of the created reservation", - "L'utente richiesto non esiste nel database.": "Requested user does not exist in database.", - "L'utente sarà attivato immediatamente e riceverà un'email di benvenuto. Potrà accedere subito.": "User will be activated immediately and will receive a welcome email. Can log in right away.", - "L'utente è stato attivato e può già effettuare il login. È stata inviata un'email di benvenuto.": "User has been activated and can already log in. A welcome email has been sent.", - "L'utente è stato eliminato.": "The user has been deleted.", - "La Tua Biblioteca Digitale": "Your Digital Library", - "La cartella vendor/ esiste e contiene le librerie necessarie.": "The vendor/ folder exists and contains the necessary libraries.", - "La classificazione Dewey è utilizzata per organizzare i libri per argomento secondo standard internazionali": "The Dewey classification is used to organize books by subject according to international standards", - "La collocazione può essere assegnata automaticamente o inserita manualmente durante la creazione/modifica del libro": "Location can be assigned automatically or entered manually during book creation/editing", - "La collocazione è l'indirizzo fisico che identifica dove si trova un libro nella biblioteca.": "Location is the physical address that identifies where a book is located in the library.", - "La copertina verrà rimossa al salvataggio del libro": "The cover will be removed when saving the book", - "La data dell'evento è obbligatoria e deve essere nel formato corretto.": "Event date is required and must be in the correct format.", - "La data dell'evento è obbligatoria.": "Event date is required.", - "La data di nascita deve essere precedente alla data di morte.": "Birth date must be before death date.", - "La lingua contrassegnata come 'Predefinita' verrà usata in tutta l'applicazione per tutti gli utenti. Per cambiare la lingua dell'intera app, clicca sull'icona stella": "The language marked as 'Default' will be used throughout the application for all users. To change the language of the entire app, click the star icon", - "La pagina che stai cercando non esiste o è stata spostata.": "The page you are looking for does not exist or has been moved.", - "La password deve contenere almeno 8 caratteri, lettere maiuscole, minuscole e numeri": "Password must contain at least 8 characters with uppercase letters, lowercase letters, and numbers", - "La password deve contenere almeno una lettera maiuscola, una minuscola e un numero": "Password must contain at least one uppercase letter, one lowercase letter and one number", - "La password deve essere lunga almeno 8 caratteri": "Password must be at least 8 characters long", - "La password deve essere lunga almeno 8 caratteri!": "Password must be at least 8 characters long!", - "La posizione fisica è indipendente dalla classificazione Dewey e indica dove si trova il libro sugli scaffali.": "The physical position is independent of the Dewey classification and indicates where the book is located on the shelves.", - "La posizione in coda sarà calcolata automaticamente in base alle prenotazioni esistenti": "Queue position will be calculated automatically based on existing reservations", - "La posizione viene assegnata automaticamente": "Position is assigned automatically", - "La recensione è stata approvata e pubblicata con successo.": "The review has been approved and published successfully.", - "La recensione è stata rifiutata e non sarà pubblicata.": "The review has been rejected and will not be published.", - "La risposta include tutti i dati del libro:": "Response includes all book data:", - "La scadenza verrà estesa di 14 giorni": "The due date will be extended by 14 days", - "La sessione è scaduta. Aggiorna la pagina e riprova.": "The session has expired. Refresh the page and try again.", - "La sezione principale che appare per prima sulla home": "The main section that appears first on the homepage", - "La sitemap viene aggiornata automaticamente quando premi il pulsante oppure tramite lo script CLI": "Sitemap is updated automatically when you press the button or via CLI script", - "La sitemap viene aggiornata automaticamente quando premi il pulsante oppure tramite lo script CLI php scripts/generate-sitemap.php. Usa questa azione dopo aver importato un grande numero di libri o modifiche ai contenuti CMS.": "Sitemap is automatically updated when you press button or via CLI script php scripts/generate-sitemap.php. Use this action after importing many books or CMS content changes.", - "La cronologia degli aggiornamenti apparirà qui": "The update history will appear here", - "La tua biblioteca digitale...": "Your digital library...", - "La versione %s è disponibile. Prima di aggiornare, verrà creato un backup automatico del database.": "Version %s is available. Before updating, an automatic database backup will be created.", - "La tua sessione è scaduta. Per motivi di sicurezza, effettua nuovamente l'accesso": "Your session has expired. For security reasons, please sign in again", - "La tua sessione è scaduta. Per motivi di sicurezza, ricarica la pagina e riprova": "Your session has expired. For security reasons, refresh the page and try again", - "La tua sessione è scaduta. Per motivi di sicurezza, ricarica la pagina ed effettua nuovamente l'accesso.": "Your session has expired. For security reasons, reload the page and log in again.", - "La tua wishlist è vuota": "Your wishlist is empty", - "Lascia una recensione": "Leave a review", - "Lascia vuoto o usa \"Genera\" per assegnare automaticamente la prossima posizione disponibile.": "Leave empty or use \"Generate\" to automatically assign the next available position.", - "Lascia vuoto o usa \\": "Leave empty or use \\", - "Lascia vuoto per 1 mese": "Leave empty for 1 month", - "Lascia vuoto per auto-rilevamento. Necessario solo su macOS/Linux con socket personalizzati.": "Leave empty for auto-detection. Only needed on macOS/Linux with custom sockets.", - "Lascia vuoto per generare automaticamente": "Leave blank to generate automatically", - "Lascia vuoto per inviare un link di impostazione": "Leave blank to send a setup link", - "Lascia vuoto per nascondere il social dal footer": "Leave empty to hide the social from footer", - "Lascia vuoto per nascondere il titolo": "Leave empty to hide the title", - "Lascia vuoto per mantenere la chiave esistente. Inserisci un nuovo valore per aggiornarla.": "Leave empty to keep the existing key. Enter a new value to update it.", - "Lascia vuoto per mantenere il nome attuale": "Leave empty to keep the current name", - "Lascia vuoto per non modificare": "Leave empty to not modify", - "Lascia vuoto se l'autore è vivente": "Leave blank if the author is alive", - "Le API key disattivate restituiranno errore 401": "Disabled API keys will return 401 error", - "Le Mie Prenotazioni": "My Reservations", - "Le Mie Recensioni": "My Reviews", - "Le copie disponibili vengono calcolate automaticamente": "Available copies are calculated automatically", - "Le date rosse non sono disponibili. La richiesta verrà valutata da un amministratore.": "Red dates are unavailable. Your request will be reviewed by an administrator.", - "Le mie prenotazioni": "My Reservations", - "Le password non coincidono": "Passwords do not match", - "Le password non coincidono!": "Passwords do not match!", - "Le posizioni si generano automaticamente": "Positions are generated automatically", - "Le route non possono contenere spazi": "Routes cannot contain spaces", - "Le route sono gli URL usati nell'applicazione. Traducendole, puoi avere URL in italiano o inglese in base alla lingua dell'installazione.": "Routes are the URLs used in the application. By translating them, you can have URLs in Italian or English based on the installation language.", - "Le tue recensioni": "Your reviews", - "Letto": "Read", - "Lettore": "Reader", - "Libero": "Free", - "Librerie di upload non caricate. Ricarica la pagina.": "Upload libraries not loaded. Please reload the page.", - "Libri": "Books", - "Libri Disponibili": "Available Books", - "Libri Prestati": "Loaned Books", - "Libri Totali": "Total Books", - "Libri per Collocazione": "Books by Location", - "Libro": "Book", - "Libro Esistente:": "Existing Book:", - "Libro Già Esistente": "Book Already Exists", - "Libro aggiornato con successo!": "Book updated successfully!", - "Libro aggiunto con successo!": "Book added successfully!", - "Libro da prenotare": "Book to reserve", - "Libro e utente sono campi obbligatori.": "Book and user are required fields.", - "Libro non disponibile": "Book not available", - "Libro non trovato su Open Library.": "Book not found on Open Library.", - "Libro non trovato.": "Book not found.", - "Libro non trovato": "Book not found", - "Libro senza titolo": "Untitled book", - "Libro:": "Book:", - "Licenza": "License", - "Limite massimo rinnovi raggiunto": "Maximum renewal limit reached", - "Limiti: massimo 50 libri con scraping attivo, timeout 5 minuti": "Limits: maximum 50 books with scraping enabled, 5 minute timeout", - "Lingua": "Language", - "Lingua App": "App Language", - "Lingua Attiva": "Active Language", - "Lingua Predefinita": "Default Language", - "Lingua Predefinita:": "Default Language:", - "Lingua aggiornata con successo": "Language updated successfully", - "Lingua creata con successo": "Language created successfully", - "Lingua eliminata con successo": "Language deleted successfully", - "Lingua non trovata": "Language not found", - "Lingua originale del libro": "Original language of the book", - "Lingua predefinita impostata con successo": "Default language set successfully", - "Lingue": "Languages", - "Lingue Configurate": "Configured Languages", - "Link": "Link", - "Link Cookie Statement": "Cookie Statement Link", - "Link Cookie Technologies": "Cookie Technologies Link", - "Link Social Media": "Social Media Links", - "Link al file digitale (se disponibile)": "Link to digital file (if available)", - "Link all'audiolibro (se disponibile)": "Link to audiobook (if available)", - "Link copiato!": "Link copied!", - "Link di reset non valido o scaduto": "Reset link invalid or expired", - "Link pulsante": "Button Link", - "LinkedIn": "LinkedIn", - "Livello": "Level", - "Livello ${m.numero_livello}": "Level ${m.numero_livello}", - "Livello *": "Level *", - "Livello 1 (Classi)": "Level 1 (Classes)", - "Livello 2 (Divisioni)": "Level 2 (Divisions)", - "Livello 3 (Specifiche)": "Level 3 (Specifics)", - "Livello principale (es. Prosa, Poesia, Teatro)": "Main level (e.g. Prose, Poetry, Theater)", - "Lo script CLI utilizza il valore di APP_CANONICAL_URL. Assicurati che sia configurato correttamente per evitare URL duplicati.": "CLI script uses APP_CANONICAL_URL value. Make sure it is configured correctly to avoid duplicate URLs.", - "Lo stato della prenotazione sarà impostato automaticamente come \"attiva\"": "The reservation status will be automatically set as \"active\"", - "Lo stato della prenotazione sarà impostato automaticamente come \\": "Reservation status will be automatically set as \\", - "Loans": "Loans", - "Locale": "Local", - "Lock file creato (installazione protetta)": "Lock file created (installation protected)", - "Log": "Log", - "Log Sicurezza": "Security Logs", - "Log di Sicurezza": "Security Log", - "Login": "Login", - "Login Riuscito": "Login Successful", - "Logo": "Logo", - "Logo Applicazione (opzionale)": "Application Logo (optional)", - "Logout effettuato con successo": "Logout successful", - "MP3, M4A o OGG, max 500 MB": "MP3, M4A or OGG, max 500 MB", - "Mai generata": "Never generated", - "Mai utilizzata": "Never used", - "Mancante": "Missing", - "Mantieni in ritardo": "Keep overdue", - "Manuale": "Manual", - "Manutenzione": "Maintenance", - "Manutenzione completata: %d record corretti": "Maintenance completed: %d records fixed", - "Manutenzione giornaliera del database": "Daily database maintenance", - "MaintenanceService connessione database fallita": "MaintenanceService database connection failed", - "MaintenanceService errore attivazione prestiti": "MaintenanceService loan activation error", - "MaintenanceService errore attivazione prestito": "MaintenanceService loan activation error", - "MaintenanceService errore conversione prenotazioni": "MaintenanceService reservation conversion error", - "MaintenanceService errore durante hook login admin": "MaintenanceService admin login hook error", - "MaintenanceService errore elaborazione prenotazione": "MaintenanceService reservation processing error", - "MaintenanceService errore generazione ICS": "MaintenanceService ICS generation error", - "MaintenanceService errore notifiche": "MaintenanceService notification error", - "MaintenanceService errore prenotazioni scadute": "MaintenanceService expired reservations error", - "MaintenanceService errore prestiti in ritardo": "MaintenanceService overdue loans error", - "MaintenanceService errore scadenza prenotazione": "MaintenanceService reservation expiration error", - "MaintenanceService eseguito al login admin": "MaintenanceService executed on admin login", - "MaintenanceService ICS non generato": "MaintenanceService ICS not generated", - "MaintenanceService prenotazione convertita in prestito": "MaintenanceService reservation converted to loan", - "MaintenanceService prenotazione scaduta": "MaintenanceService reservation expired", - "Manutenzione disattivata": "Maintenance disabled", - "Mappa Interattiva": "Interactive Map", - "Mappa del sito per i motori di ricerca": "Site map for search engines", - "Mappa non disponibile": "Map not available", - "Mario": "John", - "Maschio": "Male", - "Max 10.000 righe • Max 100 copie per libro": "Max 10,000 rows • Max 100 copies per book", - "Mediocre": "Fair", - "Membro": "Member", - "Mensola": "Shelf", - "Mensola creata e %d posizioni generate.": "Shelf created and %d positions generated.", - "Mensola creata.": "Shelf created.", - "Mensole": "Shelves", - "Menu": "Menu", - "Menu Principale": "Main Menu", - "Menu \"Prestiti\" nell'admin sidebar": "\"Loans\" menu in admin sidebar", - "Migrazione database": "Database migration", - "Messaggi": "Messages", - "Messaggi di Contatto": "Contact Messages", - "Messaggio": "Message", - "Messaggio inviato con successo! Ti risponderemo al più presto.": "Message sent successfully! We will reply as soon as possible.", - "Messaggio non trovato.": "Message not found.", - "Metadati:": "Metadata:", - "Metodo di invio": "Sending method", - "Minimo 8 caratteri": "Minimum 8 characters", - "Minimo 8 caratteri, con lettere maiuscole, minuscole e numeri": "Minimum 8 characters, with uppercase, lowercase and numbers", - "Mittente": "From", - "Mittente (email)": "Sender (email)", - "Mittente (nome)": "Sender (name)", - "Moderatore": "Moderator", - "Modalità Catalogo": "Catalogue Mode", - "Modalità Solo Catalogo": "Catalogue Only Mode", - "Modalità di importazione": "Import mode", - "Merge - Aggiungi e aggiorna (mantiene dati esistenti)": "Merge - Add and update (keeps existing data)", - "Merge completato": "Merge completed", - "Merge completato: %d aggiunti, %d aggiornati, %d invariati. Totale: %d voci.": "Merge completed: %d added, %d updated, %d unchanged. Total: %d entries.", - "Modifica": "Edit", - "Modifica %s": "Edit %s", - "Modifica Autore": "Edit Author", - "Modifica Autore:": "Edit Author:", - "Modifica Chi Siamo": "Edit About Us", - "Modifica Editore": "Edit Publisher", - "Modifica Evento": "Edit Event", - "Modifica Evento: %s": "Edit Event: %s", - "Modifica Homepage": "Edit Homepage", - "Modifica Libro": "Edit Book", - "Modifica Lingua:": "Edit Language:", - "Modifica Prenotazione": "Edit Reservation", - "Modifica Prenotazione #%s": "Edit Reservation #%s", - "Modifica Route Tradotte": "Edit Translated Routes", - "Modifica Stato Copia": "Edit Copy Status", - "Modifica Utente": "Edit User", - "Modifica i contenuti della homepage: hero, features, CTA e immagine di sfondo": "Edit homepage content: hero, features, CTA and background image", - "Modifica il contenuto e le impostazioni della pagina": "Edit page content and settings", - "Modifica le informazioni dell'evento": "Edit the event information", - "Modifica le pagine statiche del sito": "Edit static site pages", - "Modifica prestito": "Edit loan", - "Modifica prestito #%s": "Edit Loan #%s", - "Modifica profilo": "Edit profile", - "Modifica stato": "Edit status", - "Modifica utente": "Edit user", - "Modulo": "Module", - "Molto buono": "Very good", - "Mondadori": "Mondadori", - "Monitora tentativi di login e eventi di sicurezza": "Monitor login attempts and security events", - "Mostra": "Show", - "Mostra API Key": "Show API Key", - "Mostra Cookie Analitici": "Show Analytics Cookies", - "Mostra Cookie di Marketing": "Show Marketing Cookies", - "Mostra _MENU_ libri": "Show _MENU_ books", - "Mostra categoria \\": "Show category \\", - "Mostra filtri": "Show filters", - "Mostra gli ultimi libri aggiunti al catalogo": "Show the latest books added to the catalog", - "Motivo del rifiuto (opzionale)": "Reason for rejection (optional)", - "Motivo del rifiuto (opzionale):": "Reason for rejection (optional):", - "N. Libri": "No. of Books", - "N/D": "N/A", - "Narrativa": "Fiction", - "Nascondi": "Hide", - "Nascondi API Key": "Hide API Key", - "Nascondi filtri": "Hide filters", - "Nascondi se il sito non utilizza cookie di marketing o advertising": "Hide if site does not use marketing or advertising cookies", - "Nascondi se il sito non utilizza strumenti di analytics (es. Google Analytics)": "Hide if site does not use analytics tools (e.g. Google Analytics)", - "Nascita a": "Birth date to", - "Nascita da": "Birth date from", - "Nascosto": "Hidden", - "Nato il %s": "Born on %s", - "Nazionalità": "Nationality", - "Nederlands (NL)": "Dutch (NL)", - "Nei Preferiti": "In Favorites", - "Nella collezione": "In collection", - "Nessun aggiornamento": "No updates", - "Nessun Problema": "No Issues", - "Nessun autore trovato": "No authors found", - "Nessun autore trovato, premi Invio per aggiungerne uno nuovo": "No author found, press Enter to add a new one", - "Nessun dato": "No data", - "Nessun dato trovato su LibreriaUniversitaria/Feltrinelli.": "No data found on LibreriaUniversitaria/Feltrinelli.", - "Nessun editore trovato": "No publishers found", - "Nessun editore trovato per \"${query}\" — premi Invio per crearne uno nuovo.": "No publisher found for \"${query}\" — press Enter to create a new one.", - "Nessun elemento trovato": "No items found", - "Nessun evento": "No events", - "Nessun evento in programma": "No events scheduled", - "Nessun file caricato": "No file uploaded", - "Nessun file caricato.": "No file uploaded.", - "Nessun file di traduzione caricato. Carica un file JSON per abilitare questa lingua.": "No translation file uploaded. Upload a JSON file to enable this language.", - "Nessun genere trovato": "No genres found", - "Nessun libro": "No books", - "Nessun libro ancora inserito": "No books added yet", - "Nessun libro con collocazione trovato": "No books with location found", - "Nessun libro nel database": "No books in database", - "Nessun libro recente disponibile": "No recent books available", - "Nessun libro registrato": "No books registered", - "Nessun libro trovato": "No books found", - "Nessun log disponibile": "No logs available", - "Nessun logo caricato": "No logo uploaded", - "Nessun messaggio ricevuto": "No messages received", - "Nessun motivo specificato": "No reason specified", - "Nessun plugin installato": "No plugins installed", - "Nessun prestito attivo": "No active loans", - "Nessun prestito disponibile per generare il grafico": "No loans available to generate chart", - "Nessun prestito in corso": "No active loans", - "Nessun prestito passato": "No past loans", - "Nessun prestito registrato": "No loans registered", - "Nessun prestito scaduto": "No overdue loans", - "Nessun prestito trovato": "No loans found", - "Nessun prestito trovato.": "No loans found.", - "Nessun ritiro": "No pickups", - "Nessun risultato": "No results", - "Nessun risultato trovato": "No results found", - "Nessun risultato trovato con i filtri applicati": "No results found with applied filters", - "Nessun risultato trovato per la ricerca.": "No results found for search.", - "Nessun sottogenere": "No subgenre", - "Nessun sottogenere definito": "No subgenres defined", - "Nessun suggerimento": "No suggestion", - "Nessun suggerimento disponibile": "No suggestion available", - "Nessun titolo corrisponde al filtro corrente.": "No titles match the current filter.", - "Nessuna": "None", - "Nessun aggiornamento registrato": "No updates recorded", - "Nessuna API key configurata": "No API keys configured", - "Nessuna collocazione trovata": "No locations found", - "Nessuna copia attualmente disponibile": "No copy currently available", - "Nessuna copertina caricata": "No cover uploaded", - "Nessuna copia disponibile per questo libro": "No copy available for this book", - "Nessuna copia disponibile per il periodo richiesto.": "No copy available for the requested period.", - "Nessuna descrizione disponibile": "No description available", - "Nessuna descrizione disponibile per questo libro.": "No description available for this book.", - "Nessuna lingua configurata": "No languages configured", - "Nessuna mensola. Creane una per iniziare!": "No shelves. Create one to get started!", - "Nessuna mensola per questo scaffale. Creane una!": "No shelves for this bookcase. Create one!", - "Nessuna notifica": "No notifications", - "Nessuna prenotazione": "No reservations", - "Nessuna prenotazione attiva": "No active reservations", - "Nessuna recensione": "No reviews", - "Nessuna recensione approvata": "No approved reviews", - "Nessuna recensione in attesa": "No pending reviews", - "Nessuna recensione rifiutata": "No rejected reviews", - "Nessuna richiesta": "No requests", - "Nessuna richiesta in attesa": "No pending requests", - "Nessuna richiesta in attesa di approvazione.": "No requests pending approval.", - "Nessuna selezione": "No selection", - "Nessuno": "None", - "Nessuno scaffale. Creane uno per iniziare!": "No bookcases. Create one to get started!", - "Nessuno storico": "No history", - "No": "No", - "Nome": "First Name", - "Nome *": "Name *", - "Nome Applicazione": "Application Name", - "Nome Categoria": "Category Name", - "Nome Cognome": "First Last Name", - "Nome Database": "Database Name", - "Nome Editore": "Publisher Name", - "Nome Inglese": "English Name", - "Nome Nativo": "Native Name", - "Nome Referente": "Contact Person Name", - "Nome applicazione": "Application name", - "Nome autore": "Author name", - "Nome editore...": "Publisher name...", - "Nome, pseudonimo, biografia...": "Name, pseudonym, biography...", - "Nome categoria esistente": "Existing category name", - "Nome completo": "Full Name", - "Nome cookie analitici": "Analytics cookies name", - "Nome cookie essenziali": "Essential cookies name", - "Nome cookie marketing": "Marketing cookies name", - "Nome d'arte o pseudonimo": "Stage name or pseudonym", - "Nome dell'editore": "Publisher name", - "Nome della casa editrice": "Publisher name", - "Nome della lingua in inglese (es. Italian, English, Spanish)": "Name of the language in English (e.g. Italian, English, Spanish)", - "Nome della lingua nella lingua stessa (es. Italiano, English, Español)": "Name of the language in the language itself (e.g. Italiano, English, Español)", - "Nome e cognome del referente": "Contact person name", - "Nome e cognome dell'autore": "Author's full name", - "Nome editore": "Publisher name", - "Nome o cognome troppo lungo (massimo 100 caratteri)": "Name or surname too long (maximum 100 characters)", - "Nome plugin non valido. Usa solo lettere, numeri, trattini o underscore.": "Invalid plugin name. Use only letters, numbers, hyphens or underscores.", - "Nome, cognome, email...": "Name, surname, email...", - "Nome:": "Name:", - "Non Disponibile": "Not Available", - "Non Disponibili": "Unavailable", - "Non ancora restituito": "Not yet returned", - "Non assegnata": "Not assigned", - "Non autenticato": "Not authenticated", - "Non autorizzato.": "Unauthorized.", - "Non ci sono dati da esportare": "There is no data to export", - "Non ci sono recensioni in attesa di approvazione.": "There are no reviews waiting for approval.", - "Non ci sono richieste di prestito in attesa di approvazione.": "There are no loan requests pending approval.", - "Non disponibile": "Not available", - "Non disponibile ora": "Not available now", - "Non eliminabile": "Cannot Delete", - "Non hai ancora creato nessun evento. Inizia creando il tuo primo evento.": "You haven't created any events yet. Start by creating your first event.", - "Non hai ancora lasciato recensioni": "You have not left any reviews yet", - "Non hai libri in prestito al momento": "You have no books on loan at the moment", - "Non hai prenotazioni attive al momento": "You have no active reservations at the moment", - "Non hai prestiti passati": "You have no past loans", - "Non hai un account?": "Don't have an account?", - "Non includere tag ": "Do not include tags", - "Non letto": "Unread", - "Non puoi eliminare l'installer finché non completi l'installazione delle dipendenze PHP.": "You cannot delete the installer until you complete the PHP dependencies installation.", - "Non puoi recensire questo libro (devi averlo preso in prestito e non averlo già recensito)": "You cannot review this book (you must have borrowed it and not already reviewed it)", - "Non rinnovabile: prestito in ritardo": "Not renewable: loan overdue", - "Non installato": "Not installed", - "Non scrivibile": "Not writable", - "Non selezionato": "Not selected", - "Non specificata": "Not specified", - "Non specificato": "Not specified", - "Non usare spazi nelle route": "Do not use spaces in routes", - "Non è stato possibile eliminare l'utente. Controlla la console.": "Unable to delete the user. Check the console.", - "Non è stato trovato alcun aggiornamento": "No updates found", - "Nota:": "Note:", - "Nota: Impostare come predefinita disattiverà lo status di predefinita per tutte le altre lingue.": "Note: Setting as default will disable the default status for all other languages.", - "Nota: in produzione limita questa funzione agli amministratori.": "Note: in production limit this function to administrators.", - "Note": "Notes", - "Note (opzionali)": "Notes (optional)", - "Note Importanti": "Important Notes", - "Note Varie": "Miscellaneous Notes", - "Note aggiuntive o osservazioni particolari...": "Additional notes or special observations...", - "Note importanti:": "Important notes:", - "Note interne": "Internal Notes", - "Note sul prestito": "Loan notes", - "Note sulla restituzione": "Return notes", - "Note tecniche": "Technical notes", - "Notifiche": "Notifications", - "Notifiche Automatiche": "Automatic Notifications", - "Notifiche Prestiti": "Loan Notifications", - "Notifiche disponibilità libri in wishlist": "Wishlist book availability notifications", - "Notifiche prestiti scaduti": "Overdue loan notifications", - "N. Inventario": "Inventory No.", - "Numero Inventario": "Inventory Number", - "Numero Libri": "Number of Books", - "Numero Pagine": "Number of Pages", - "Numero Serie": "Series Number", - "Numero di Pagine": "Number of Pages", - "Numero di copie non valido.": "Invalid number of copies.", - "Numero di libri": "Number of books", - "Numero inventario": "Inventory number", - "Numero massimo di righe superato (%d). Dividi il file in parti più piccole.": "Maximum number of rows exceeded (%d). Split the file into smaller parts.", - "Numero o descrizione dell'edizione": "Edition number or description", - "Numero prenotazioni attive": "Number of active reservations", - "Numero serie": "Series number", - "Numero tessera": "Card number", - "Nuova Collocazione": "New Location", - "Nuova Password": "New Password", - "Nuova password": "New password", - "Nuova prenotazione": "New Reservation", - "Nuova recensione da approvare": "New review to approve", - "Nuova registrazione utente": "New User Registration", - "Nuova richiesta di prestito": "New loan request", - "Nuovo": "New", - "Novità nelle versioni successive": "What's new in upcoming versions", - "Non chiudere questa finestra": "Do not close this window", - "Nuovo aggiornamento disponibile!": "New update available!", - "Nuovo Autore": "New Author", - "Nuovo Editore": "New Publisher", - "Nuovo Evento": "New Event", - "Nuovo Genere": "New Genre", - "Nuovo Libro": "New Book", - "Nuovo messaggio di contatto": "New Contact Message", - "Nuovo Prestito": "New Loan", - "Nuovo Utente": "New User", - "Nuovo editore:": "New publisher:", - "Nuovo utente": "New User", - "Nuovo nome (opzionale)": "New name (optional)", - "OFF": "Off", - "OK": "OK", - "ON": "On", - "Obbligatorio": "Required", - "Obbligatorio per utenti non amministratori.": "Required for non-administrator users.", - "Obsoleto": "Obsolete", - "Occupato": "Busy", - "Occupato (prestito attivo)": "Occupied (active loan)", - "Occupato (in ritardo)": "Occupied (overdue)", - "Prenota questo libro": "Reserve this book", - "Seleziona le date per la tua prenotazione. La richiesta verrà inviata alla biblioteca per approvazione.": "Select dates for your reservation. The request will be sent to the library for approval.", - "Accedi per Prenotare": "Login to Reserve", - "Libro disponibile per la prenotazione": "Book available for reservation", - "Richiesta inviata!": "Request sent!", - "La tua richiesta di prestito è stata inviata. Riceverai una notifica quando verrà approvata.": "Your loan request has been sent. You will receive a notification when it is approved.", - "Richiesta inviata con successo!": "Request sent successfully!", - "Errore durante la prenotazione": "Error during reservation", - "Offline": "Offline", - "Oggetto": "Subject", - "Oggetto dell'email": "Email subject", - "Ogni 15 minuti nei giorni lavorativi (8:00-18:00)": "Every 15 minutes on weekdays (8:00-18:00)", - "Ogni route deve iniziare con": "Each route must start with", - "Online": "Online", - "Open Graph (Facebook)": "Open Graph (Facebook)", - "Open Graph (Facebook, LinkedIn)": "Open Graph (Facebook, LinkedIn)", - "Operatore": "Operator", - "Operazione annullata": "Operation cancelled", - "Operazione completata": "Operation completed", - "Operazione non consentita": "Operation not allowed", - "Operazioni": "Operations", - "Opere": "Works", - "Oppure usa il terminale SSH del tuo hosting (cPanel, Plesk, etc.)": "Or use your hosting's SSH terminal (cPanel, Plesk, etc.)", - "Ops, qualcosa è andato storto": "Oops, something went wrong", - "Opzionale": "Optional", - "Opzionale per amministratori": "Optional for administrators", - "Opzione 1:": "Option 1:", - "Opzione 2:": "Option 2:", - "Opzione 3:": "Option 3:", - "Ora Evento": "Event Time", - "Ora puoi accedere con la tua nuova password.": "You can now sign in with your new password.", - "Ora puoi ricaricare questa pagina - il warning sparirà se tutto è OK.": "Now you can reload this page - the warning will disappear if everything is OK.", - "Ordina Sezioni Homepage": "Sort Homepage Sections", - "Ordina per": "Sort by", - "Ordinamento": "Sorting", - "Ordinamento libri": "Book sorting", - "Ordine salvato con successo!": "Order saved successfully!", - "Ordine:": "Order:", - "Organizza e gestisci i generi letterari della biblioteca": "Organize and manage library literary genres", - "Organizza scaffali, mensole e posizioni per la biblioteca fisica": "Organize shelves, levels, and positions for the physical library", - "Ospite": "Guest", - "Ottieni le chiavi da Google reCAPTCHA": "Get keys from Google reCAPTCHA", - "Ottimizza l'evento per i motori di ricerca e i social media": "Optimize event for search engines and social media", - "Ottimizzazione": "Optimization", - "Ottimizzazione SEO (Meta Tags)": "SEO Optimization (Meta Tags)", - "Ottimizzazione SEO e Social Media": "SEO and Social Media Optimization", - "Output atteso: cartella vendor/ con sottocartelle (slim, monolog, etc.)": "Expected output: vendor/ folder with subfolders (slim, monolog, etc.)", - "PDF": "PDF", - "PDF o ePub, max 100 MB": "PDF or ePub, max 100 MB", - "PHP mail()": "PHP mail()", - "PHP mail() - Predefinito": "PHP mail() - Default", - "PHPMailer": "PHPMailer", - "PNG, SVG, JPG o WebP (max 2MB)": "PNG, SVG, JPG or WebP (max 2MB)", - "Paese": "Country", - "Pagina": "Page", - "Pagina Cookie Policy": "Cookie Policy Page", - "Pagina Non Trovata": "Page Not Found", - "Pagina \\": "Page \\", - "Pagina aggiornata con successo.": "Page updated successfully.", - "Pagina attiva (visibile sul sito)": "Active page (visible on site)", - "Pagina non trovata.": "Page not found.", - "Pagina precedente": "Previous page", - "Pagina successiva": "Next page", - "Paginazione eventi": "Events pagination", - "Pagine": "Pages", - "Pannello": "Panel", - "Panoramica generale": "General overview", - "Panoramica generale di Pinakes": "General overview of Pinakes", - "Panoramica completa di prestiti, ritiri e prenotazioni": "Complete overview of loans, pickups and reservations", - "Paragrafo": "Paragraph", - "Paragraph": "Paragraph", - "Parametri di Ricerca": "Search Parameters", - "Parametri non validi": "Invalid parameters.", - "Parametro ISBN mancante.": "Missing ISBN parameter.", - "Parametro category_id obbligatorio.": "Parameter category_id is required.", - "Parametro cover_url mancante.": "Missing cover_url parameter.", - "Parametro division_id obbligatorio.": "Parameter division_id is required.", - "Parole Chiave": "Keywords", - "Parole Chiave SEO": "SEO Keywords", - "Parole chiave": "Keywords", - "Parole chiave SEO": "SEO Keywords", - "Parole chiave per i motori di ricerca (impatto SEO limitato). Separate da virgola.": "Keywords for search engines (limited SEO impact). Comma separated.", - "Password": "Password", - "Password aggiornata con successo.": "Password updated successfully.", - "Password dimenticata": "Forgot password", - "Password dimenticata?": "Forgot password?", - "Password iniziale": "Initial Password", - "Password resettata con successo!": "Password reset successfully!", - "Password troppo lunga (massimo 128 caratteri)": "Password too long (maximum 128 characters)", - "Pattern URL": "URL Pattern", - "Pendente": "Pending", - "Pending": "Pending", - "Per aggiornare automaticamente la sitemap ogni giorno:": "To automatically update sitemap daily:", - "Per assistenza, contatta l'amministrazione della biblioteca.": "For assistance, contact the library administration.", - "Per inserire il codice JavaScript Analytics (Google Analytics, Matomo, ecc.), vai su {{variabile}} per inserire dati dinamici.": "Customize the content of automatic emails with the TinyMCE editor. Use placeholders {{variable}} to insert dynamic data.", - "Personalizza il contenuto delle mail automatiche con l'editor TinyMCE. Usa i segnaposto sospeso e richiede approvazione. Scegli un'opzione:": "This user is in suspended state and requires approval. Choose an option:", - "Radice": "Root", - "Rallenta l'importazione": "Slows down import", - "Recensione (opzionale)": "Review (optional)", - "Recensione approvata": "Review approved", - "Recensione del": "Review on", - "Recensione inviata con successo!": "Review submitted successfully!", - "Recensione inviata con successo! Sarà pubblicata dopo l'approvazione di un amministratore.": "Review successfully submitted! It will be published after administrator approval.", - "Recensione inviata!": "Review submitted!", - "Recensione per \"%s\" da %s - %s": "Review for \"%s\" by %s - %s", - "Recensione rifiutata": "Review rejected", - "Recensione eliminata": "Review deleted", - "La recensione è stata eliminata definitivamente.": "The review has been permanently deleted.", - "Elimina recensione": "Delete review", - "Vuoi eliminare definitivamente questa recensione? Questa azione non può essere annullata.": "Do you want to permanently delete this review? This action cannot be undone.", - "Impossibile eliminare la recensione": "Unable to delete the review", - "Operazione non riuscita": "Operation failed", - "Recensioni": "Reviews", - "Recensioni Approvate": "Approved Reviews", - "Recensioni Rifiutate": "Rejected Reviews", - "Recensioni utenti": "User reviews", - "Recente": "Recent", - "Recupera Password": "Recover Password", - "Referente": "Contact Person", - "Registra Restituzione": "Register Return", - "Registra prestito": "Register loan", - "Registra restituzione": "Register return", - "Registra restituzione prestito": "Register loan return", - "Registra una prenotazione per permettere ad un utente di riservare un libro specifico": "Register a reservation to allow a user to reserve a specific book", - "Registrati": "Register", - "Registrati Ora": "Register Now", - "Registrato da": "Registered from", - "Registrato il": "Registered on", - "Registrazione": "Registration", - "Registrazione Completata": "Registration Completed", - "Registrazione completata": "Registration completed", - "Registrazione completata! Effettua l'accesso": "Registration completed! Please sign in", - "Reimposta password": "Reset password", - "Reindirizzamento verso dominio non autorizzato bloccato.": "Redirect to an unauthorized domain blocked.", - "Reinstalla da Capo": "Reinstall from Scratch", - "Remoto": "Remote", - "Report": "Report", - "Report Integrità Dati": "Data Integrity Report", - "Report e analisi": "Reports and analytics", - "Requisiti": "Requirements", - "Requisiti del plugin:": "Plugin requirements:", - "Requisiti di Sistema": "System Requirements", - "Requisiti di sistema non soddisfatti": "System requirements not met", - "Richiesto": "Required", - "Reset": "Reset", - "Reset Filtri": "Reset Filters", - "Reset anni": "Reset years", - "Resetta Password": "Reset Password", - "Recupera la tua password": "Recover your password", - "Abbiamo ricevuto una richiesta di reset della password per il tuo account.": "We received a request to reset the password for your account.", - "Clicca sul pulsante qui sotto per resettare la tua password:": "Click the button below to reset your password:", - "Oppure copia e incolla questo link nel tuo browser:": "Or copy and paste this link in your browser:", - "Questo link scadrà tra 2 ore.": "This link will expire in 2 hours.", - "Se non hai richiesto il reset della password, puoi ignorare questa email. Il tuo account rimane sicuro.": "If you did not request a password reset, you can ignore this email. Your account remains secure.", - "Ciao": "Hello", - "Restituito": "Returned", - "Restituito in ritardo": "Returned late", - "Restituito regolarmente": "Returned on time", - "Restituzione": "Return", - "Restituzione prestito": "Loan return", - "Restituzione prestito #%s": "Loan Return #%s", - "Ricarica Dewey (seed)": "Reload Dewey (seed)", - "Ricarica Pagina": "Reload Page", - "Ricerca": "Search", - "Ricerca Libro": "Search Book", - "Ricerca Utente": "Search User", - "Ricerca in corso...": "Searching...", - "Ricerca rapida": "Quick Search", - "Riceverai un link di reset via email. Il link sarà valido per 24 ore.": "You will receive a reset link via email. The link will be valid for 24 hours.", - "Riceverai una conferma via email appena la richiesta sarà approvata.": "You'll receive an email confirmation once the request is approved.", - "Ricevuto": "Received", - "Richiede App:": "Requires App:", - "Richiede PHP:": "Requires PHP:", - "Richiedi Prestito": "Request Loan", - "Richiedi approvazione admin dopo la conferma email": "Require admin approval after email confirmation", - "Richiesta Inviata!": "Request Sent!", - "Richiesta Prestito": "Loan Request", - "Richiesta del %s": "Request of %s", - "Ricevuta di Prestito": "Loan Receipt", - "Ricevuta di prestito bibliotecario": "Library loan receipt", - "Richiesta di prestito dal %1$s al %2$s": "Loan request from %1$s to %2$s", - "Richiesta di prestito dal %s per 1 mese": "Loan request starting on %s for 1 month", - "Richiesta di prestito inviata con successo": "Loan request successfully submitted", - "Richiesta di prestito per \"%s\" da %s dal %s al %s": "Loan request for \"%s\" by %s from %s to %s", - "Richiesta di prestito per \\": "Loan request for \\", - "Richiesta fallita:": "Request failed:", - "Richiesta manuale": "Manual request", - "Richieste Manuali": "Manual Requests", - "Richiesta rifiutata": "Request rejected", - "Richieste Pendenti": "Pending Requests", - "Richieste di Prestito": "Loan Requests", - "Richieste di Prestito in Attesa": "Pending Loan Requests", - "Richieste in Sospeso": "Pending Requests", - "Richieste in sospeso": "Pending requests", - "Richieste pendenti": "Pending Requests", - "Richiesto il": "Requested on", - "Richiesto il %s": "Requested on %s", - "Ricordami": "Remember me", - "Ricordi la password?": "Remember your password?", - "Riepilogo Installazione": "Installation Summary", - "Riepilogo wishlist": "Wishlist Summary", - "Rifiuta": "Reject", - "Rifiuta Prestito?": "Reject Loan?", - "Rifiuta non essenziali": "Reject Non-Essential", - "Rifiuta prestito": "Reject loan", - "Rifiuta recensione": "Reject review", - "Rifiutata": "Rejected", - "Rifiutata il": "Rejected on", - "Rifiutato": "Rejected", - "Rifiuterai questa richiesta di prestito?": "Will you reject this loan request?", - "Ritiri da Confermare": "Pickups to Confirm", - "Riga %d (%s): %s": "Row %d (%s): %s", - "Riga %d: numero di colonne non corrispondente": "Row %d: column count does not match", - "Rigenera Sitemap": "Regenerate Sitemap", - "Rigenera adesso": "Regenerate now", - "Rimuovere dalla wishlist?": "Remove from Wishlist?", - "Rimuovere i libri associati prima di eliminare l'autore": "Remove associated books before deleting the author", - "Rimuovere i libri dell'editore prima di eliminarlo": "Remove publisher's books before deleting", - "Rimuovi": "Remove", - "Rimuovi dai Preferiti": "Remove from Favorites", - "Rimuovi dalla wishlist": "Remove from Wishlist", - "Rimuovi editore": "Remove publisher", - "Rimuovi filtro": "Remove filter", - "Rimuovi immagine": "Remove image", - "Rimuovi immagine attuale": "Remove current image", - "Rimuovi immagine di sfondo attuale": "Remove current background image", - "Rimuovi logo attuale": "Remove current logo", - "Rimuovi tutti i filtri": "Remove all filters", - "Rinnova": "Renew", - "Rinnova prestito (+14 giorni)": "Renew loan (+14 days)", - "Rinnova prestito?": "Renew loan?", - "Rinnovare il prestito? La scadenza verrà estesa di 14 giorni.": "Renew loan? The due date will be extended by 14 days.", - "Rinnovi": "Renewals", - "Rinnovi Effettuati:": "Renewals Made:", - "Rinnovi effettuati": "Renewals made", - "Riordina trascinando gli elementi": "Reorder by dragging elements", - "Ripeti la password": "Repeat password", - "Ripristina Default": "Reset to Default", - "Ripristino": "Restore", - "Riprova": "Retry", - "Riservato": "Reserved", - "Risolvi i problemi indicati sopra e ricarica la pagina.": "Fix the issues indicated above and reload the page.", - "Risorsa": "Resource", - "Risorse esterne": "External Resources", - "Rispettiamo il tuo diritto alla privacy. Puoi scegliere di non consentire alcuni tipi di cookie. Le tue preferenze si applicheranno all'intero sito web.": "We respect your right to privacy. You can choose not to allow some types of cookies. Your preferences will apply to the entire website.", - "Rispondi": "Reply", - "Risposta": "Reply", - "Risposta JSON": "JSON Response", - "Risposta non valida dal servizio ISBN.": "Invalid response from the ISBN service.", - "Risposta non valida. Controlla la console per dettagli.": "Invalid response. Check the console for details.", - "Risultati": "Results", - "Risultati per '%s' - Catalogo Biblioteca": "Results for '%s' - Library Catalog", - "Rossi": "Doe", - "Route Comuni": "Common Routes", - "Route Tradotte": "Translated Routes", - "Ruolo": "Role", - "Ruolo:": "Role:", - "SDK": "SDK", - "SEO - Meta Description": "SEO - Meta Description", - "SEO Base": "Basic SEO", - "SEO Base (Meta Tags)": "Base SEO (Meta Tags)", - "SMTP (custom)": "SMTP (custom)", - "SMTP Host": "SMTP Host", - "SMTP Password": "SMTP Password", - "SMTP Personalizzato": "Custom SMTP", - "SMTP Port": "SMTP Port", - "SMTP Username": "SMTP Username", - "SMTP personalizzato": "Custom SMTP", - "SSL": "SSL", - "Salva": "Save", - "Salva API Key": "Save API key", - "Salva Autore": "Save Author", - "Salva Contatti": "Save Contacts", - "Salva Editore": "Save Publisher", - "Salva Identità": "Save Identity", - "Salva Impostazioni": "Save Settings", - "Salva Impostazioni Avanzate": "Save Advanced Settings", - "Salva Libro": "Save Book", - "Salva Lingua": "Save Language", - "Salva Modifiche": "Save Changes", - "Salva Privacy Policy": "Save Privacy Policy", - "Salva Route": "Save Routes", - "Salva Template": "Save Template", - "Salva Testi Cookie Banner": "Save Cookie Banner Texts", - "Salva filtri correnti": "Save current filters", - "Salva identità": "Save identity", - "Salva impostazioni email": "Save email settings", - "Salva impostazioni etichette": "Save label settings", - "Salva in UTF-8": "Save as UTF-8", - "Salva la API key in un luogo sicuro. Non sarà possibile visualizzarla nuovamente dopo la creazione.": "Save the API key in a safe place. It will not be possible to view it again after creation.", - "Salva modifiche": "Save changes", - "Salva modifiche Homepage": "Save Homepage Changes", - "Salva template": "Save template", - "Salva testi banner": "Save banner texts", - "Salva utente": "Save User", - "Salvataggio in corso...": "Saving...", - "Salvataggio...": "Saving...", - "Sarà pubblicata dopo l'approvazione di un amministratore.": "It will be published after administrator approval.", - "Sarà utilizzata per accedere al sistema": "Will be used to log in to the system", - "Sarà visualizzato nell'header e in tutto il sito": "Will be displayed in the header and throughout the site", - "Scadenza": "Due date", - "Scadenza Mancante": "Missing Due Date", - "Scadenza tessera": "Card Expiration", - "Scadenza:": "Due date:", - "Scadenza: %s": "Expiry: %s", - "Scaduto": "Expired", - "Scaduta": "Expired", - "Scaduta il": "Expired on", - "Scaffale": "Bookcase", - "Scaffale *": "Bookcase *", - "Scaffale Narrativa": "Fiction Bookcase", - "Scaffali": "Bookcases", - "Scaffali e mensole": "Shelves and racks", - "Scarica": "Download", - "Scarica copertine": "Fetch covers", - "Scarica PDF": "Download PDF", - "Scarica Ricevuta PDF": "Download PDF Receipt", - "Scarica ricevuta PDF": "Download PDF receipt", - "Scarica automaticamente la ricevuta PDF dopo la creazione del prestito.": "Automatically download the PDF receipt after creating the loan.", - "Scaricamento copertine...": "Fetching covers...", - "Copertine scaricate:": "Covers fetched:", - "Già presenti o senza ISBN:": "Already present or no ISBN:", - "Nessuna copertina da scaricare": "No covers to fetch", - "Scraping fallito": "Scraping failed", - "Download aggiornamento": "Downloading update", - "Download copertina fallito": "Cover download failed", - "Download fallito": "Download failed", - "Immagine non valida": "Invalid image", - "Formato immagine non supportato": "Unsupported image format", - "Errore processamento immagine": "Image processing error", - "Errore salvataggio immagine": "Image save error", - "Scarica Audiobook": "Download Audiobook", - "Scarica JSON": "Download JSON", - "Scarica eBook": "Download eBook", - "Scarica esempio_import_libri.csv": "Download example_import_books.csv", - "Scarica il CSV di esempio con 3 libri già compilati per capire il formato corretto e iniziare subito.": "Download the example CSV with 3 pre-filled books to understand the correct format and get started immediately.", - "Scarica il file CSV di esempio": "Download the example CSV file", - "Scarica l'eBook in formato digitale": "Download the eBook in digital format", - "Scarso": "Poor", - "Scorri a destra per vedere tutte le colonne": "Scroll right to see all columns", - "Sincronizza Copertine": "Sync Covers", - "Sincronizzare le copertine?": "Sync covers?", - "Questa operazione scaricherà le copertine mancanti per tutti i libri con ISBN. Può richiedere diversi minuti.": "This operation will download missing covers for all books with ISBN. It may take several minutes.", - "Sì, sincronizza": "Yes, sync", - "Sincronizzazione...": "Syncing...", - "Sincronizzazione completata!": "Sync completed!", - "Copertine sincronizzate: %s": "Covers synced: %s", - "Copertine già presenti: %s": "Covers already present: %s", - "Si è verificato un errore durante la sincronizzazione": "An error occurred during synchronization", - "Sincronizza copertine mancanti via scraping": "Sync missing covers via scraping", - "Scegli": "Choose", - "Scegli come ordinare i libri nella sezione": "Choose how to sort books in this section", - "Scegli Icona Font Awesome": "Choose Font Awesome Icon", - "Scegli come inviare le email dal sistema. Puoi usare la funzione PHP mail(), PHPMailer o un server SMTP esterno.": "Choose how to send emails from the system. You can use the PHP mail() function, PHPMailer or an external SMTP server.", - "Scegli come inviare le email dal sistema. Puoi usare la funzione PHP con il percorso corretto di PHP sul tuo server": "Replace /usr/bin/php with the correct PHP path on your server", - "Sottocategoria": "Subcategory", - "Sottogenere": "Subgenre", - "Sottogenere specifico (opzionale)": "Specific subgenre (optional)", - "Spazio libero": "Free space", - "Sottogeneri": "Subgenres", - "Sottotitolo": "Subtitle", - "Sottotitolo CTA": "CTA Subtitle", - "Sottotitolo del libro (opzionale)": "Book subtitle (optional)", - "Sottotitolo sezione": "Section Subtitle", - "Staff": "Staff", - "Staff:": "Staff:", - "Stai per aggiornare Pinakes alla versione": "You are about to update Pinakes to version", - "Stai per eliminare": "You are about to delete", - "Stai per unire": "You are about to merge", - "Stai utilizzando l'ultima versione.": "You are using the latest version.", - "Stai utilizzando l'ultima versione disponibile.": "You are using the latest available version.", - "Stampa": "Print", - "Stampa etichetta": "Print label", - "Standard": "Standard", - "Standard Tirrenia catalogazione": "Standard Tirrenia cataloging", - "Standard dorso libri (più comune)": "Standard book spine (most common)", - "Statistiche": "Statistics", - "Statistiche Prestiti": "Loan Statistics", - "Statistiche Rapide": "Quick Statistics", - "Statistiche:": "Statistics:", - "Stato": "Status", - "Stato API": "API Status", - "Stato API key aggiornato con successo.": "API key status updated successfully.", - "Stato Incongruente": "Status Mismatch", - "Stato dell'installazione:": "Installation status:", - "Stato della copia": "Copy status", - "Stato e Gestione": "Status and Management", - "Stato attuale:": "Current status:", - "Stato prestito": "Loan status", - "Stato prestito corrente": "Current loan status", - "Stato prestito non valido.": "Invalid loan status.", - "Stato:": "Status:", - "Status attuale di questa copia del libro": "Current status of this book copy", - "Storico Prestiti": "Loan History", - "Nella stessa collana": "In the same series", - "Volumi di quest'opera": "Volumes of this work", - "volumi": "volumes", - "Questo libro è il volume %s dell'opera": "This book is volume %s of the work", - "Gestione Collane": "Series Management", - "Gestisci le collane e le serie di libri": "Manage book series and collections", - "Collane totali": "Total series", - "Libri nelle collane": "Books in series", - "Nessuna collana trovata. Aggiungi una collana a un libro per iniziare.": "No series found. Add a series to a book to get started.", - "Collane": "Series", - "Serie e collane di libri": "Book series and collections", - "Rinomina collana": "Rename series", - "Rinomina": "Rename", - "Unisci con altra collana": "Merge with another series", - "Nome collana di destinazione": "Target series name", - "Unisci": "Merge", - "Sei sicuro? Tutti i libri verranno spostati nella collana di destinazione.": "Are you sure? All books will be moved to the target series.", - "Crea opera multi-volume": "Create multi-volume work", - "Crea un libro padre che raccoglie tutti i volumi di questa collana.": "Create a parent book that collects all volumes of this series.", - "Titolo dell'opera completa": "Title of the complete work", - "Crea opera": "Create work", - "Collana rinominata: %d libri aggiornati": "Series renamed: %d books updated", - "Nome collana non valido": "Invalid series name", - "Collane unite: %d libri spostati in \"%s\"": "Series merged: %d books moved to \"%s\"", - "Parametri non validi per l'unione": "Invalid parameters for merge", - "Opera \"%s\" creata con %d volumi": "Work \"%s\" created with %d volumes", - "Errore nella creazione dell'opera": "Error creating the work", - "Aggiungi volume": "Add volume", - "Cartaceo": "Paperback", - "eBook": "eBook", - "Audiolibro": "Audiobook", - "CD Audio": "Audio CD", - "Vinile": "Vinyl", - "LP": "LP", - "Cassetta": "Cassette", - "DVD": "DVD", - "Blu-ray": "Blu-ray", - "Digitale": "Digital", - "Cerca libro": "Search for a book", - "Titolo o ISBN...": "Title or ISBN...", - "Numero volume": "Volume number", - "Seleziona un libro": "Select a book", - "Volume aggiunto": "Volume added", - "Rimuovi volume?": "Remove volume?", - "Il libro non sarà eliminato, solo la relazione.": "The book will not be deleted, only the relationship.", - "Volume rimosso": "Volume removed", - "Configura come opera multi-volume": "Configure as multi-volume work", - "Errore database": "Database error", - "Nuova Collana": "New Series", - "Collana \"%s\" creata": "Series \"%s\" created", - "Descrizione della collana...": "Series description...", - "Salva descrizione": "Save description", - "Descrizione salvata": "Description saved", - "Assegna collana": "Assign series", - "Collana assegnata": "Series assigned", - "%d libri assegnati alla collana \"%s\"": "%d books assigned to series \"%s\"", - "Elimina collana": "Delete series", - "Rimuove la collana da tutti i libri. I libri non verranno eliminati.": "Removes the series from all books. Books will not be deleted.", - "Sei sicuro? La collana verrà rimossa da tutti i libri.": "Are you sure? The series will be removed from all books.", - "Collana \"%s\" eliminata (%d libri aggiornati)": "Series \"%s\" deleted (%d books updated)", - "International Standard Serial Number (per periodici)": "International Standard Serial Number (for periodicals)", - "ISSN Non Valido": "Invalid ISSN", - "ISSN deve essere nel formato XXXX-XXXX (8 cifre, l'ultima può essere X).": "ISSN must be in the format XXXX-XXXX (7 digits plus a check character (digit or X)).", - "ISSN non valido. Il formato corretto è XXXX-XXXX (8 cifre, l'ultima può essere X).": "Invalid ISSN. The correct format is XXXX-XXXX (7 digits plus a check character (digit or X)).", - "Relazione ciclica: questo libro è già opera padre del libro selezionato": "Cyclic relationship: this book is already a parent work of the selected book", - "Assegna": "Assign", - "es. 1234-5678": "e.g. 1234-5678", - "es. Harry Potter": "e.g. Harry Potter", - "Identificatori": "Identifiers", - "Inserisci un nome": "Enter a name", - "Nome della collana": "Series name", - "ISSN": "ISSN", - "Volumi": "Volumes", - "Successiva": "Next", - "Successivo": "Next", - "Successo": "Success", - "Successo!": "Success!", - "Suggerimenti": "Tips", - "Suggerimento": "Tip", - "Suggerimento:": "Tip:", - "Suggerisci collocazione": "Suggest location", - "Suggerito scaffale #${data.scaffale_id}": "Suggested bookcase #${data.scaffale_id}", - "Suggerito:": "Suggested:", - "Supporto": "Support", - "Sì": "Yes", - "Sì, Aggiorna": "Yes, Update", - "Sì, Salva": "Yes, Save", - "Sì, aggiorna": "Yes, update", - "Sì, approva": "Yes, approve", - "Sì, attiva": "Yes, activate", - "Sì, disattiva": "Yes, deactivate", - "Sì, disinstalla": "Yes, uninstall", - "Sì, elimina": "Yes, delete", - "Sì, elimina!": "Yes, delete it!", - "Sì, rimuovi": "Yes, Remove", - "TLS": "TLS", - "Tag": "Tag", - "Telefono": "Phone", - "Telefono:": "Phone:", - "Telefono *": "Phone *", - "Telefono Referente": "Contact Person Phone", - "Tema": "Theme", - "Template": "Templates", - "Template Email": "Email Templates", - "Template aggiornato con successo!": "Template updated successfully!", - "Template email": "Email templates", - "Termini": "Terms", - "Termini di Servizio": "Terms of Service", - "Tessera biblioteca": "Library Card", - "Test": "Test", - "Test Connessione": "Test Connection", - "Test del cron job:": "Cron job test:", - "Testi Banner": "Banner Texts", - "Testi Banner Iniziale": "Initial Banner Texts", - "Testi Cookie Banner": "Cookie Banner Texts", - "Testi Modale Preferenze": "Preferences Modal Texts", - "Testi categorie cookie": "Cookie categories texts", - "Testo Privacy": "Privacy Text", - "Testo che apparirà nel footer del sito": "Text that will appear in the site footer", - "Testo checkbox": "Checkbox text", - "Testo della checkbox privacy nel form": "Privacy checkbox text in the form", - "Testo introduttivo": "Introductory text", - "Testo principale mostrato nel banner. Puoi usare HTML.": "Main text shown in the banner. You can use HTML.", - "Testo pulsante": "Button Text", - "Testo pulsante \"Accetta tutti\"": "\"Accept all\" button text", - "Testo pulsante \"Preferenze\"": "\"Preferences\" button text", - "Testo pulsante \"Rifiuta non essenziali\"": "\"Reject non-essential\" button text", - "Testo pulsante \"Salva selezionati\"": "\"Save selected\" button text", - "Ti abbiamo inviato un'email con il link per confermare l'indirizzo.": "We have sent you an email with the link to confirm your address.", - "Timestamp": "Timestamp", - "Tipo": "Type", - "Tipo Acquisizione": "Acquisition Type", - "Tipo Card": "Card Type", - "Tipo Contenuto": "Content Type", - "Tipo MIME non valido. Solo file CSV sono accettati.": "Invalid MIME type. Only CSV files are accepted.", - "Tipo OG": "OG Type", - "Tipo Utente": "User Type", - "Tipo acquisizione": "Acquisition type", - "Tipo di file non supportato. Solo JPEG e PNG sono consentiti.": "Unsupported file type. Only JPEG and PNG are allowed.", - "Tipo di file non valido.": "Invalid file type.", - "Tipo di file non valido. Carica un'immagine reale.": "Invalid file type. Please upload a real image.", - "Tipo non valido": "Invalid type.", - "Tipo utente": "User Type", - "Tipologia account": "Account Type", - "Tipologia:": "Type:", - "Titolo": "Title", - "Titolo:": "Title:", - "Fonte dati:": "Data source:", - "Fonti consultate:": "Sources consulted:", - "Vedi alternative": "View alternatives", - "Dati alternativi disponibili": "Alternative data available", - "Copertina:": "Cover:", - "Usa": "Use", - "Nessuna alternativa disponibile": "No alternatives available", - "Valore applicato": "Value applied", - "Editore applicato": "Publisher applied", - "Copertina applicata": "Cover applied", - "Titolo (opzionale)": "Title (optional)", - "Titolo 1": "Heading 1", - "Titolo 2": "Heading 2", - "Titolo 3": "Heading 3", - "Titolo A-Z": "Title A-Z", - "Titolo CTA": "CTA Title", - "Titolo Evento": "Event Title", - "Titolo Modale": "Modal Title", - "Titolo OG": "OG Title", - "Titolo Open Graph": "Open Graph Title", - "Titolo Pagina": "Page Title", - "Titolo SEO": "SEO Title", - "Titolo Twitter": "Twitter Title", - "Titolo Z-A": "Title Z-A", - "Titolo del libro": "Book title", - "Titolo della sezione e le 4 card con le caratteristiche": "Section title and the 4 feature cards", - "Titolo e descrizione mostrati sopra i caroselli dei generi": "Title and description shown above genre carousels", - "Titolo libro": "Book title", - "Titolo mostrato quando condividi su Facebook/LinkedIn. Se vuoto, usa il titolo SEO o hero.": "Title shown when sharing on Facebook/LinkedIn. If empty, uses the SEO or hero title.", - "Titolo non disponibile": "Title not available", - "Titolo obbligatorio mancante": "Missing required title", - "Titolo pagina": "Page title", - "Titolo principale (H1)": "Main Title (H1)", - "Titolo sezione": "Section Title", - "Titolo troppo lungo (max 255 caratteri)": "Title too long (max 255 characters)", - "Titolo, sottotitolo, descrizione...": "Title, subtitle, description...", - "Titolo...": "Title...", - "Token CSRF non valido": "Invalid CSRF token.", - "Token CSRF non valido. Riprova.": "Invalid CSRF token. Please try again.", - "Token configurato": "Token configured", - "Token configurato — lascia vuoto per mantenere": "Token configured — leave empty to keep", - "Token di sicurezza non valido. Riprova.": "Invalid security token. Please try again.", - "Top 10 Lettori Più Attivi": "Top 10 Most Active Readers", - "Top 10 Libri Più Prestati": "Top 10 Most Loaned Books", - "Torna Indietro": "Go Back", - "Torna agli Eventi": "Back to Events", - "Torna agli eventi": "Back to events", - "Torna ai Libri": "Back to Books", - "Torna ai Prestiti": "Back to Loans", - "Torna al login": "Back to login", - "Torna all'Applicazione": "Back to Application", - "Torna all'elenco": "Back to list", - "Torna alla Configurazione Database": "Back to Database Configuration", - "Torna alla categoria superiore": "Back to parent category", - "Torna alla dashboard": "Back to Dashboard", - "Torna alla lista": "Back to list", - "Torna alla panoramica eventi": "Back to all events", - "Torna alle Impostazioni": "Back to Settings", - "Torna alle Impostazioni CMS": "Back to CMS Settings", - "Torna alle Lingue": "Back to Languages", - "Torna alle Prenotazioni": "Back to Reservations", - "Total users:": "Total users:", - "Totale": "Total", - "Totale Autori": "Total Authors", - "Totale Generi": "Total Genres", - "Totale Libri": "Total Books", - "Totale Prestiti": "Total Loans", - "Trasforma Pinakes in un catalogo di sola consultazione": "Transform Pinakes into a browse-only catalogue", - "Totale autori": "Total authors", - "Totale editori:": "Total publishers:", - "Totale libri": "Total books", - "Totale libri presenti": "Total books in collection", - "Totale utenti:": "Total users:", - "Totale: %s righe": "Total: %s rows", - "Tracce": "Tracks", - "Tracklist": "Tracklist", - "Traduzioni e localizzazione": "Translations and localization", - "Trascina le sezioni per riordinarle. L'ordine sarà salvato automaticamente e rispecchiato nella homepage.": "Drag sections to reorder them. The order will be saved automatically and reflected on the homepage.", - "Trascina per riordinare • Il codice deve essere univoco": "Drag to reorder • Code must be unique", - "Trascina per riordinare • Ogni scaffale + livello deve essere univoco": "Drag to reorder • Each bookcase + level must be unique", - "Trascina qui il file CSV o %{browse}": "Drag CSV file here or %{browse}", - "Trascina qui il file ZIP del plugin o %{browse}": "Drag the plugin ZIP file here or %{browse}", - "Trascina qui il logo o %{browse}": "Drag logo here or %{browse}", - "Trascina qui l'immagine di sfondo o %{browse}": "Drag the background image here or %{browse}", - "Trascina qui l'immagine o %{browse}": "Drag image here or %{browse}", - "Trascina qui l'immagine, %{browse} o importa da": "Drag image here, %{browse} or import from", - "Trascina qui la copertina del libro o %{browse}": "Drag the book cover here or %{browse}", - "Trascina qui la copertina del libro o clicca per selezionare": "Drag the book cover here or click to select", - "Trigger database configurati": "Database triggers configured", - "Trigger importati OK": "Triggers imported OK", - "Troppi tentativi. Attendi qualche minuto prima di riprovare": "Too many attempts. Please wait a few minutes before trying again", - "Trovato": "Found", - "Tutorial": "Tutorial", - "Tutte le date sono in formato ISO 8601 (YYYY-MM-DD HH:MM:SS)": "All dates are in ISO 8601 format (YYYY-MM-DD HH:MM:SS)", - "Tutte le mensole": "All shelves", - "Tutte le notifiche del sistema": "All system notifications", - "Tutte le route devono iniziare con": "All routes must start with", - "Tutti": "All", - "Tutti gli anni": "All years", - "Tutti gli autori": "All authors", - "Tutti gli editori": "All publishers", - "Tutti gli eventi": "All events", - "Tutti gli scaffali": "All bookcases", - "Tutti gli stati": "All statuses", - "Tutti i controlli di integrità sono passati con successo!": "All integrity checks passed successfully!", - "Tutti i diritti riservati.": "All rights reserved.", - "Tutti i filtri sono stati rimossi": "All filters have been removed", - "Tutti i generi": "All genres", - "Tutti i libri": "All books", - "Tutti i messaggi ricevuti tramite il form contatti": "All messages received through contact form", - "Tutti i requisiti sono soddisfatti! Puoi procedere con l'installazione.": "All requirements are met! You can proceed with the installation.", - "Tutti i ruoli": "All roles", - "Tutti soddisfatti": "All met", - "Tutto aggiornato!": "All up to date!", - "Tutto": "All", - "Twitter": "Twitter", - "Twitter Card": "Twitter Card", - "URL Canonico": "Canonical URL", - "URL Canonico (opzionale)": "Canonical URL (optional)", - "URL Non Valido": "Invalid URL", - "URL OG": "OG URL", - "URL completo della pagina (auto-generato se vuoto)": "Full page URL (auto-generated if empty)", - "URL completo del sito (es: https://biblioteca.example.com). Usato per link nelle email (verifica account, reset password). Se lasciato vuoto, verrà auto-rilevato.": "Full site URL (e.g., https://biblioteca.example.com). Used for email links (account verification, password reset). If left blank, it will be auto-detected.", - "URL della pagina con la cookie policy": "URL of the page with cookie policy", - "URL della pagina con le tecnologie dei cookie": "URL of the page with cookie technologies", - "URL non valido o non permesso.": "Invalid or unauthorized URL.", - "URL non valido.": "Invalid URL.", - "URL principale del sito. Se vuoto, usa l'URL corrente.": "Main site URL. If empty, uses the current URL.", - "URL pubblico:": "Public URL:", - "URL sito web...": "Website URL...", - "URL...": "URL...", - "Ultima generazione:": "Last generated:", - "Ultima Versione": "Latest Version", - "Ultimi Arrivi": "Latest Arrivals", - "Ultimi Libri Aggiunti": "Latest Books Added", - "Ultimi Libri Inseriti": "Recently Added Books", - "Ultimi aggiunti (data creazione)": "Recently added (creation date)", - "Ultimi modificati (data aggiornamento)": "Recently edited (update date)", - "Ultima": "Last", - "Ultimo": "Last", - "Ultimo Aggiornamento": "Last Updated", - "Ultimo accesso": "Last access", - "Ultimo aggiornamento": "Last Update", - "Ultimo uso:": "Last used:", - "Umberto Eco": "Umberto Eco", - "Un altro aggiornamento è già in corso. Riprova più tardi.": "Another update is already in progress. Please try again later.", - "Un backup viene creato automaticamente prima di salvare": "A backup is created automatically before saving", - "Un'esperienza di lettura moderna, intuitiva e sempre a portata di mano": "A modern, intuitive reading experience always at your fingertips", - "Una chiave è già salvata. Inserisci un nuovo valore per aggiornarla oppure lascia vuoto per rimuoverla.": "A key is already stored. Enter a new value to update it or leave empty to remove it.", - "Una descrizione completa aiuta gli utenti a conoscere meglio l'autore": "A complete description helps users get to know the author better", - "Una mensola con livello %d esiste già in questo scaffale. Usa un livello diverso.": "A shelf with level %d already exists on this bookcase. Use a different level.", - "Una panoramica dei libri che hai salvato per non perderli di vista.": "An overview of the books you've saved to keep track of.", - "Unisciti alla nostra community di lettori e scopri il piacere della lettura con la nostra piattaforma moderna.": "Join our community of readers and discover the joy of reading with our modern platform.", - "Unisci autori": "Merge authors", - "Unisci editori": "Merge publishers", - "Uploader non disponibile": "Uploader not available", - "Usa 'localhost' (raccomandato, rileva automaticamente TCP/socket). Puoi forzare '127.0.0.1' per TCP.": "Use 'localhost' (recommended, auto-detects TCP/socket). You can force '127.0.0.1' for TCP.", - "Usa codici semplici (A, B, C...)": "Use simple codes (A, B, C...)", - "Usa i servizi online per precompilare automaticamente i dati del libro": "Use online services to automatically prefill book data", - "Usa il pulsante \"Rigenera adesso\" per crearla": "Use \"Regenerate now\" button to create it", - "Usa il separatore %s": "Use %s separator", - "Usa l'editor per formattare il testo, aggiungere link, immagini e altro": "Use the editor to format text, add links, images, and more", - "Usa l'editor per formattare il testo, aggiungere link, immagini e altro.": "Use the editor to format text, add links, images, and more.", - "Usa le frecce ← → per saltare": "Use ← → arrows to skip", - "Usa questa azione dopo aver importato un grande numero di libri o modifiche ai contenuti CMS.": "Use this action after importing a large number of books or CMS content changes.", - "Usa questo campo per personalizzare lo stile del sito senza modificare i file di tema.": "Use this field to customize site style without modifying theme files.", - "Usata per login e comunicazioni.": "Used for login and communications.", - "Username": "Username", - "Users": "Users", - "Utente": "User", - "Utente admin creato:": "Admin user created:", - "Utente aggiornato con successo!": "User updated successfully!", - "Utente approvato con successo!": "User approved successfully!", - "Utente attivato direttamente!": "User activated directly!", - "Utente creato con successo!": "User created successfully!", - "Utente prenotante": "User making reservation", - "Utente sconosciuto": "Unknown user", - "Utente senza nome": "Unnamed user", - "Utente %s (%s) si è registrato": "User %s (%s) has registered", - "Utente:": "User:", - "Utenti": "Users", - "Utenti Attivi": "Active Users", - "Utenti registrati": "Registered users", - "Utilizza l'editor TinyMCE per formattare il testo e Uppy per caricare immagini di alta qualità. Le modifiche saranno immediatamente visibili nella pagina pubblica.": "Use the TinyMCE editor to format text and Uppy to upload high quality images. Changes will be immediately visible on the public page.", - "Utilizziamo i cookie per migliorare la tua esperienza. Continuando a visitare questo sito, accetti il nostro uso dei cookie.": "We use cookies to improve your experience. By continuing to visit this site, you accept our use of cookies.", - "Vai": "Go", - "Vai al Login": "Go to Login", - "Vai al login": "Go to login", - "Vai all'Applicazione": "Go to Application", - "Vai alla Home": "Go to Home", - "Valore compreso tra 1 e 30 giorni. Consigliato: 3 giorni": "Value between 1 and 30 days. Recommended: 3 days", - "Valore non valido": "Invalid value", - "Valutazione *": "Rating *", - "Valutazione non valida (1-5 stelle)": "Invalid rating (1-5 stars)", - "Variabili disponibili:": "Available variables:", - "Vecchio": "Old", - "Vedi": "View", - "Vedi Dettagli": "View Details", - "Vedi dettagli": "View details", - "Vedi istruzioni sotto per correggere manualmente.": "See instructions below to fix manually.", - "Vedi tutte le notifiche": "View all notifications", - "Vedi tutti": "View all", - "Vedi tutti gli eventi": "View all events", - "Verifica che il database sia accessibile e configurato correttamente nel file .env": "Verify that the database is accessible and correctly configured in the .env file", - "Verifica che le credenziali del database nel file .env siano corrette": "Verify that the database credentials in the .env file are correct", - "Verifica coerenza e integrità del database": "Check database consistency and integrity", - "Verifica completata OK": "Verification completed OK", - "Verifica i permessi di esecuzione: chmod +x cron/automatic-notifications.php": "Verify execution permissions: chmod +x cron/automatic-notifications.php", - "Verifica in corso...": "Checking...", - "Verifica versioni": "Check versions", - "Verrà creato automaticamente un backup prima dell'aggiornamento.": "A backup will be automatically created before updating.", - "Verrà creato un backup completo del database.": "A complete database backup will be created.", - "Verifica installazione...": "Verifying installation...", - "Verificato": "Verified", - "Versione": "Version", - "Versione Installata": "Installed Version", - "Versione Installer:": "Installer Version:", - "Versione non specificata": "Version not specified", - "Versione non trovata": "Version not found", - "Versione:": "Version:", - "Via Roma 123, 00100 Roma RM, Italia": "123 Main St, New York, NY 10001, USA", - "Via, numero civico, città, CAP": "Street, number, city, ZIP code", - "Via, numero...": "Street, number...", - "Video": "Video", - "Video tutorial": "Video tutorial", - "Visibile": "Visible", - "Visibile pubblicamente sulla pagina contatti": "Publicly visible on contact page", - "Visibilità Sezione Eventi": "Events Section Visibility", - "Visibilità aggiornata!": "Visibility updated!", - "Visita il sito ufficiale": "Visit official website", - "Visualizza": "View", - "Visualizza Libro": "View Book", - "Visualizza Tutte le Categorie": "View All Categories", - "Visualizza Tutto il Catalogo": "View Entire Catalog", - "Visualizza dettagli": "View details", - "Visualizza dettagli libro": "View book details", - "Visualizza e esporta l'elenco dei libri per posizione fisica": "View and export the list of books by physical position", - "Visualizza e gestisci tutti i prestiti della biblioteca": "View and manage all library loans", - "Visualizza pagina live": "View live page", - "Visualizzazione da _START_ a _END_ di _TOTAL_ libri": "Showing _START_ to _END_ of _TOTAL_ books", - "Visualizzazione gerarchica di generi e sottogeneri": "Hierarchical view of genres and subgenres", - "Voci totali": "Total entries", - "Vuoi aggiornare il libro \"${title}\"?": "Do you want to update the book \"${title}\"?", - "Vuoi aggiornare il libro \"%s\"?": "Do you want to update the book \"%s\"?", - "Vuoi aggiornare lo stato di questa copia?": "Do you want to update the status of this copy?", - "Vuoi approvare questa recensione e renderla visibile sul sito?": "Do you want to approve this review and make it visible on the site?", - "Vuoi attivare questo plugin?": "Do you want to activate this plugin?", - "Vuoi aumentare il numero di copie di questo libro?": "Do you want to increase the number of copies of this book?", - "Vuoi disattivare questo plugin?": "Do you want to deactivate this plugin?", - "Vuoi eliminare questo elemento?": "Do you want to delete this item?", - "Vuoi procedere?": "Do you want to proceed?", - "Vuoi rifiutare questa recensione? L'utente verrà avvisato dell'esito.": "Do you want to reject this review? The user will be notified of the outcome.", - "Wishlist": "Wishlist", - "Working...": "Working...", - "Zona Pericolosa": "Danger Zone", - "agosto": "August", - "acquisto": "purchase", - "al": "to", - "altamente consigliato": "highly recommended", - "aprile": "April", - "autori": "authors", - "biblioteca, prestito libri, catalogo online, scopri libri, prenotazioni": "library, book lending, online catalog, discover books, reservations", - "chiavi": "keys", - "chiavi tradotte": "translated keys", - "come nuovo autore": "as new author", - "completamento": "completion", - "con successo": "successfully", - "copi": "copi", - "copia": "copy", - "copie": "copies", - "crontab -e": "crontab -e", - "danneggiato": "damaged", - "della lingua desiderata.": "of the desired language.", - "di": "of", - "di %s": "of %s", - "dicembre": "December", - "directory": "directories", - "disattivata": "disabled", - "disponibile": "available", - "disponibili ora": "available now", - "donazione": "donation", - "dopo aver completato l'installazione.": "after completing the installation.", - "eBook (PDF/ePub)": "eBook (PDF/ePub)", - "eBook caricato!": "eBook uploaded!", - "eBook disponibile": "eBook available", - "editori": "publishers", - "elementi": "items", - "elemento": "item", - "elimina la cartella": "delete the folder", - "errore di comunicazione con il server": "server communication error", - "es. 0.450": "e.g. 0.450", - "es. 15": "e.g. 15", - "es. 19.90": "e.g. 19.90", - "es. 2020": "e.g. 2020", - "es. 2024": "e.g. 2024", - "es. 2025": "e.g. 2025", - "es. 21x14 cm": "e.g. 21x14 cm", - "es. 26 agosto 2025": "e.g. August 26, 2025", - "es. 320": "e.g. 320", - "es. 8842935786": "e.g. 8842935786", - "es. 978-88-429-3578-0": "e.g. 978-88-429-3578-0", - "es. 9788842935780": "e.g. 9788842935780", - "es. Acquisto, Donazione, Prestito": "e.g. Purchase, Donation, Loan", - "es. Biblioteca Civica": "e.g. Public Library", - "es. Copertina rigida, Brossura": "e.g. Hardcover, Paperback", - "es. Fantasy contemporaneo": "e.g. Contemporary Fantasy", - "es. I Classici": "e.g. The Classics", - "es. INV-2024-001": "e.g. INV-2024-001", - "es. Integrazione Sito Web": "e.g. Website Integration", - "es. Italiano, Inglese": "e.g. Italian, English", - "es. La morale anarchica": "e.g. The Anarchist Morality", - "es. Noir mediterraneo": "e.g. Mediterranean Noir", - "es. Prima edizione": "e.g. First edition", - "es. RSSMRA80A01H501U": "e.g. RSSMRA80A01H501U", - "es. Urban fantasy": "e.g. Urban fantasy", - "es. noreply@biblioteca.local": "e.g. noreply@library.local", - "es. romanzo, fantasy, avventura (separare con virgole)": "e.g. novel, fantasy, adventure (separate with commas)", - "eventi": "events", - "eventi, biblioteca, cultura": "events, library, culture", - "fallite.": "failed.", - "fas fa-users": "fas fa-users", - "febbraio": "February", - "gennaio": "January", - "giorni prima della scadenza": "days before expiry", - "giugno": "June", - "https://www.editore.com": "https://www.publisher.com", - "icone disponibili": "icons available", - "in attesa": "pending", - "in_corso": "in progress", - "in_ritardo": "overdue", - "info@editore.com": "info@publisher.com", - "installazione inglese usa": "English installation uses", - "kg": "kg", - "libri": "books", - "libri trovati": "books found", - "libro": "book", - "libro trovato": "book found", - "linea": "line", - "lingue": "languages", - "lingue. Errori:": "languages. Errors:", - "luglio": "July", - "maggio": "May", - "manutenzione": "maintenance", - "mario.rossi@email.it": "john.doe@email.com", - "marzo": "March", - "nella directory dell'applicazione.": "in the application directory.", - "nella nostra biblioteca.": "in our library.", - "novembre": "November", - "o multipli separati da |": "or multiple separated by |", - "o multipli: Engels;Marx": "or multiple: Engels;Marx", - "opzionale": "optional", - "opzionali": "optional", - "ottobre": "October", - "pagina": "page", - "pagine": "pages", - "per conformità GDPR.": "for GDPR compliance.", - "per evitare blocchi (delay di 3 secondi tra ogni richiesta).": "to avoid blocks (3 second delay between each request).", - "per il giorno": "for the day", - "per pagina": "per page", - "perso": "lost", - "preferiti": "favorites", - "premi Invio per crearne uno nuovo.": "press Enter to create a new one.", - "prenotazione attiva": "active reservation", - "prenotazioni attive": "active reservations", - "prenotato": "reserved", - "prestato": "on loan", - "prestiti attivi": "active loans", - "prestiti passati": "past loans", - "prestiti totali": "total loans", - "prestito attivo": "active loan", - "prestito passato": "past loan", - "prima di procedere.": "before proceeding.", - "recensione": "review", - "recensioni": "reviews", - "referente@editore.com": "contact@publisher.com", - "restituito": "returned", - "richiesta in sospeso": "pending request", - "richieste in sospeso": "pending requests", - "risultati": "results", - "risultato": "result", - "seleziona": "browse", - "seleziona file": "select file", - "selezionati": "selected", - "settembre": "September", - "sfoglia": "browse", - "sottogeneri": "subgenres", - "sul server tramite SSH.": "on the server via SSH.", - "titoli": "titles", - "utente@example.com": "user@example.com", - "utenti": "users", - "verranno automaticamente selezionati.": "will be automatically selected.", - "Български (BG)": "Bulgarian (BG)", - "עברית (HE)": "Hebrew (HE)", - "– Nessuno –": "– None –", - "••••••••": "••••••••", - "⚙️ Comportamento Automatico: Se inserisci codice in \"JavaScript Analitici\" o \"JavaScript Marketing\", i rispettivi toggle in Impostazioni Privacy verranno automaticamente selezionati.": "⚙️ Automatic Behavior: If you insert code in \"Analytics JavaScript\" or \"Marketing JavaScript\", the respective toggles in Privacy Settings will be automatically selected.", - "⚠️ AZIONE RICHIESTA: Installazione Dipendenze PHP": "⚠️ ACTION REQUIRED: PHP Dependencies Installation", - "⚠️ Privacy: Le mappe esterne vengono caricate solo se l'utente accetta i cookie Analytics.": "⚠️ Privacy: External maps are loaded only if the user accepts Analytics cookies.", - "✅ Dipendenze PHP installate correttamente": "✅ PHP dependencies installed correctly", - "✓ Connessione riuscita! Database è vuoto e pronto per l'installazione.": "✓ Connection successful! Database is empty and ready for installation.", - "✓ Crea autori mancanti": "✓ Create missing authors", - "✓ Crea editori mancanti": "✓ Create missing publishers", - "✓ Report errori": "✓ Error reporting", - "✓ Validazione dati": "✓ Data validation", - "❌ Errore di comunicazione con il server": "Communication error with the server", - "💡 Non hai accesso SSH?": "💡 Don't have SSH access?", - "📋 Importante: Devi elencare manualmente i cookie tracciati da questi script nella Pagina Cookie per conformità GDPR.": "📋 Important: You must manually list cookies tracked by these scripts in the Cookie Page for GDPR compliance.", - "📋 Istruzioni SSH (Click per espandere/chiudere)": "📋 SSH Instructions (Click to expand/collapse)", - "🔒 Sicurezza Importante": "🔒 Important Security", - "Gestione Temi": "Theme Management", - "Temi": "Themes", - "Personalizza l'aspetto dell'applicazione": "Customize the application appearance", - "Tema Attivo": "Active Theme", - "Temi Disponibili": "Available Themes", - "Personalizza": "Customize", - "Attivare questo tema?": "Activate this theme?", - "Errore durante l'attivazione": "Error during activation", - "Errore di rete": "Network error", - "Primario": "Primary", - "Secondario": "Secondary", - "Bottone": "Button", - "Testo Bottone": "Button Text", - "Accento": "Accent", - "Personalizza Tema": "Customize Theme", - "Torna ai temi": "Back to themes", - "Colori Tema": "Theme Colors", - "Personalizza la palette colori dell'applicazione": "Customize the application color palette", - "Colore Primario": "Primary Color", - "link, accenti": "links, accents", - "Colore Secondario": "Secondary Color", - "bottoni principali": "main buttons", - "Colore Bottoni CTA": "CTA Button Color", - "bottoni nelle card": "buttons in cards", - "Colore Testo Bottoni": "Button Text Color", - "Verifica Leggibilità": "Readability Check", - "Link di esempio": "Example link", - "Bottone CTA": "CTA Button", - "Bottone Primario": "Primary Button", - "Ripristina": "Reset", - "Contrasto": "Contrast", - "WCAG AA Conforme": "WCAG AA Compliant", - "AA Testo Grande": "AA Large Text", - "Insufficiente": "Insufficient", - "Ripristinare i colori?": "Reset colors to defaults?", - "Tema attivato con successo": "Theme activated successfully", - "Errore durante l'attivazione del tema": "Error activating theme", - "Colori ripristinati ai valori predefiniti": "Colors reset to defaults", - "Errore nel ripristino dei colori": "Error resetting colors", - "Tema non trovato": "Theme not found", - "Colore non valido": "Invalid color", - "Contrasto insufficiente tra bottone e testo (minimo 3:1). Attuale": "Insufficient contrast between button and text (minimum 3:1). Current", - "Tema salvato con successo": "Theme saved successfully", - "Errore nel salvataggio del tema": "Error saving theme", - "Utenti in Attesa di Approvazione": "Users Awaiting Approval", - "Invia Email": "Send Email", - "Confermi di voler attivare direttamente questo utente?": "Are you sure you want to activate this user directly?", - "Non includere tag": "Do not include tags", - "Il codice verrà inserito in un tag": "The code will be inserted in a tag", - "nell'header. Non includere i tag": "in the header. Do not include tags", - "Sicurezza Connessione": "Connection Security", - "Configura le impostazioni di sicurezza per le connessioni HTTPS": "Configure security settings for HTTPS connections", - "Attiva HTTPS solo se hai un certificato SSL valido installato. Attivare HSTS rende permanente il reindirizzamento HTTPS nel browser.": "Enable HTTPS only if you have a valid SSL certificate installed. Enabling HSTS makes HTTPS redirection permanent in the browser.", - "Info HSTS:": "HSTS Info:", - "HTTP Strict Transport Security forza i browser a usare solo connessioni HTTPS per 1 anno (raccomandato per produzione con SSL valido).": "HTTP Strict Transport Security forces browsers to use only HTTPS connections for 1 year (recommended for production with valid SSL).", - "Forza HTTPS": "Force HTTPS", - "Reindirizza automaticamente tutte le richieste HTTP a HTTPS": "Automatically redirect all HTTP requests to HTTPS", - "Abilita HSTS": "Enable HSTS", - "Attiva HTTP Strict Transport Security (max-age: 1 anno, include sottodomini)": "Enable HTTP Strict Transport Security (max-age: 1 year, includes subdomains)", - "Requisiti:": "Requirements:", - "Certificato SSL/TLS valido": "Valid SSL/TLS certificate", - "Tutte le risorse del sito devono essere HTTPS": "All site resources must be HTTPS", - "Sottodomini devono supportare HTTPS (se usati)": "Subdomains must support HTTPS (if used)", - "Funzionamento automatico:": "Automatic operation:", - "Auto-attivazione:": "Auto-activation:", - "Caricamento automatico:": "Automatic loading:", - "Devi elencare manualmente i cookie tracciati da questi script nella": "You must manually list the cookies tracked by these scripts in the", - "Pagina Cookie": "Cookie Page", - "Database '%s' non esiste. Crealo prima di procedere.": "Database '%s' does not exist. Please create it before proceeding.", - "File dati iniziali per la lingua selezionata non trovato: %s": "Initial data file for the selected language not found: %s", - "%s è richiesto": "%s is required", - "%s è richiesta": "%s is required", - "%s deve essere di almeno 8 caratteri": "%s must be at least 8 characters", - "%s non può superare i 72 caratteri": "%s cannot exceed 72 characters", - "%s non è valido": "%s is not valid", - "Schema non importato correttamente. Tabelle mancanti: %s": "Schema not imported correctly. Missing tables: %s", - "Schema incompleto: trovate %d tabelle su %d attese.": "Incomplete schema: found %d tables out of %d expected.", - "Errore verifica tabelle: %s": "Error verifying tables: %s", - "Installazione database non completa. Tabelle mancanti: %s": "Database installation incomplete. Missing tables: %s", - "Installazione database non completa. Trovate %d tabelle, attese %d": "Database installation incomplete. Found %d tables, expected %d", - "Dati di classificazione mancanti": "Classification data missing", - "Dati generi mancanti": "Genre data missing", - "Le password non corrispondono": "Passwords do not match", - "Requisito '%s' non soddisfatto": "Requirement '%s' not met", - "Non è possibile creare la directory: %s": "Cannot create directory: %s", - "Directory non scrivibile: %s": "Directory not writable: %s", - "Il file supera la dimensione massima consentita": "File exceeds maximum allowed size", - "Errore sconosciuto durante il caricamento": "Unknown error during upload", - "Il file supera la dimensione massima di %s MB": "File exceeds maximum size of %s MB", - "Tipo di file non consentito. Sono ammessi solo: %s": "File type not allowed. Only allowed: %s", - "Troppi errori durante l'import dello schema (%d errori). Primi errori:\n%s": "Too many errors during schema import (%d errors). First errors:\n%s", - "Troppi errori durante l'import dei dati (%d errori). Primi errori:\n%s": "Too many errors during data import (%d errors). First errors:\n%s", - "Impossibile determinare l'ID del plugin Open Library.": "Unable to determine Open Library plugin ID.", - "Tutte le copie in prestito": "All copies on loan", - "Tutte le copie prenotate": "All copies reserved", - "Tutte le copie di questo libro hanno già un prestito attivo o prenotato. Attendi che una copia venga restituita.": "All copies of this book already have an active or scheduled loan. Please wait for a copy to be returned.", - "Copie disponibili": "Copies available", - "Nessuna copia disponibile nelle date richieste": "No copies available for the requested dates", - "Le date rosse o arancioni non sono disponibili. La richiesta verrà valutata da un amministratore.": "Red or orange dates are not available. The request will be evaluated by an administrator.", - "Sono stati rilevati problemi di integrità": "Integrity issues were detected", - "Clicca su \\\"Esegui Manutenzione\\\" per correggere automaticamente i problemi riparabili.": "Click \\\"Run Maintenance\\\" to automatically fix resolvable issues.", - "Ricalcola Disponibilità": "Recalculate Availability", - "Aggiorna il conteggio delle copie disponibili": "Update available copy counts", - "Correggi Problemi": "Fix Issues", - "Ripara automaticamente gli errori rilevati": "Automatically repair detected errors", - "Manutenzione Completa": "Full Maintenance", - "Esegui tutte le operazioni di manutenzione": "Run all maintenance operations", - "Vuoi correggere automaticamente i problemi di integrità rilevati?": "Do you want to automatically fix the detected integrity issues?", - "Vuoi eseguire la manutenzione completa del sistema? Questa operazione potrebbe richiedere alcuni minuti.": "Do you want to run full system maintenance? This may take a few minutes.", - "Prenotazione sovrapposta a prestito": "Reservation overlaps with a loan", - "Prenotazioni sovrapposte": "Overlapping reservations", - "Sì, correggi": "Yes, fix", - "Sì, esegui": "Yes, run", - "Elaborazione...": "Processing...", - "Operazione fallita": "Operation failed", - "Processing...": "Processing...", - "Operation completed": "Operation completed", - "Operation failed": "Operation failed", - "Communication error with the server": "Communication error with the server", - "Do you want to automatically fix the detected integrity issues?": "Do you want to automatically fix the detected integrity issues?", - "Do you want to run full system maintenance? This may take a few minutes.": "Do you want to run full system maintenance? This may take a few minutes.", - "Confirm?": "Confirm?", - "Yes, fix": "Yes, fix", - "Yes, run": "Yes, run", - "Cancel": "Cancel", - "Connessione database non disponibile": "Database connection not available", - "File .env non trovato": ".env file not found", - "Impossibile caricare configurazione database": "Unable to load database configuration", - "Errore connessione database": "Database connection error", - "Il tuo sistema Pinakes per catalogare, gestire e condividere la tua collezione libraria.": "Your Pinakes system to catalog, manage, and share your book collection.", - "Eventi e Incontri": "Events and Meetings", - "ordine:": "order:", - "Traduttore": "Translator", - "Nome del traduttore (se applicabile)": "Translator name (if applicable)", - "Illustratore": "Illustrator", - "Nome dell'illustratore (se applicabile)": "Illustrator name (if applicable)", - "Curatore": "Curator", - "Nome del curatore dell'opera (se applicabile)": "Curator name (if applicable)", - "es. Gianni De Conno": "e.g. Gianni De Conno", - "es. Mario Rossi": "e.g. Mario Rossi", - "Lingua non supportata": "Unsupported language", - "Lingue valide": "Valid languages", - "(codici ISO e nomi inglesi accettati)": "(ISO codes and English names accepted)", - "Copie totali": "Total copies", - "Data creazione": "Created at", - "Ultima modifica": "Last updated", - "Copia %d di %d": "Copy %d of %d", - "File caricato con successo": "File uploaded successfully", - "Errore durante l'importazione (HTTP": "Error during import (HTTP", - "Problemi di Configurazione": "Configuration Issues", - "URL Canonico Mancante": "Missing Canonical URL", - "URL Canonico Vuoto": "Empty Canonical URL", - "URL Canonico Non Valido": "Invalid Canonical URL", - "Applica Fix": "Apply Fix", - "Problemi di Integrità Database": "Database Integrity Issues", - "Tipo di issue non valido": "Invalid issue type", - "L'URL fornito non è valido": "The provided URL is not valid", - "Impossibile leggere il file .env": "Cannot read .env file", - "Impossibile scrivere nel file .env": "Cannot write to .env file", - "Configurazione aggiornata con successo!": "Configuration updated successfully!", - "Errore durante l'applicazione del fix:": "Error while applying fix:", - "Applicazione del fix...": "Applying fix...", - "Fix applicato": "Fix applied", - "Sì, applica": "Yes, apply", - "Vuoi impostare APP_CANONICAL_URL a:": "Do you want to set APP_CANONICAL_URL to:", - "Gestisci i tuoi prestiti, esplora il catalogo e scopri nuovi titoli.": "Manage your loans, explore the catalog and discover new titles.", - "Nessun libro recente": "No recent books", - "Non ci sono nuovi arrivi al momento.": "No new arrivals at the moment.", - "Non hai prestiti in corso al momento.": "You have no active loans at the moment.", - "%d giorni": "%d days", - "Email verificata con successo! Il tuo account è ora in attesa di approvazione da parte dell'amministratore. Riceverai un'email quando sarà attivato.": "Email verified successfully! Your account is now pending administrator approval. You will receive an email when it is activated.", - "Il link di verifica email è scaduto o non valido. Registrati nuovamente per ricevere un nuovo link.": "The email verification link has expired or is invalid. Please register again to receive a new link.", - "Il link di verifica non è valido. Assicurati di aver copiato l'intero link dall'email.": "The verification link is not valid. Make sure you copied the entire link from the email.", - "La mia bacheca": "My Dashboard", - "La modalità manutenzione non era attiva": "Maintenance mode was not active", - "Modalità manutenzione disattivata": "Maintenance mode disabled", - "Se il sito resta in manutenzione, elimina il file": "If the site stays in maintenance, delete the file", - "Server in manutenzione. Attendi il completamento dell'aggiornamento.": "Server in maintenance. Wait for the update to complete.", - "Creazione indici di ottimizzazione...": "Creating optimization indexes...", - "Indici di ottimizzazione creati OK": "Optimization indexes created OK", - "Nessun libro selezionato": "No books selected", - "Stato non valido": "Invalid status", - "ID libri non validi": "Invalid book IDs", - "Stato aggiornato per %d libri": "Status updated for %d books", - "%d libri eliminati": "%d books deleted", - "%d autori eliminati": "%d authors deleted", - "%d editori eliminati": "%d publishers deleted", - "Impossibile eliminare: alcuni libri hanno prestiti attivi": "Cannot delete: some books have active loans", - "Impossibile eliminare: alcuni editori hanno libri associati": "Cannot delete: some publishers have associated books", - "ISBN o EAN...": "ISBN or EAN...", - "autori. Questa azione non può essere annullata.": "authors. This action cannot be undone.", - "autori. Tutti i libri verranno assegnati all'autore risultante.": "authors. All books will be assigned to the resulting author.", - "editori. Questa azione non può essere annullata.": "publishers. This action cannot be undone.", - "editori. Tutti i libri verranno assegnati all'editore risultante.": "publishers. All books will be assigned to the resulting publisher.", - "libri. Questa azione non può essere annullata.": "books. This action cannot be undone.", - "I libri degli altri autori verranno assegnati a questo": "Books from other authors will be assigned to this one", - "I libri degli altri editori verranno assegnati a questo": "Books from other publishers will be assigned to this one", - "Nessun autore selezionato": "No authors selected", - "Nessun editore selezionato": "No publishers selected", - "ID autori non validi": "Invalid author IDs", - "ID editori non validi": "Invalid publisher IDs", - "Ottimizzazione Indici Database": "Database Index Optimization", - "Ottimizzato": "Optimized", - "%d Indici Mancanti": "%d Missing Indexes", - "Il database è già ottimizzato!": "The database is already optimized!", - "Tutti gli indici di performance sono presenti.": "All performance indexes are present.", - "Perché servono questi indici?": "Why are these indexes needed?", - "Gli indici migliorano significativamente le performance delle query, specialmente su tabelle con molti record. Le installazioni recenti li includono già, ma le installazioni più vecchie potrebbero non averli.": "Indexes significantly improve query performance, especially on tables with many records. Recent installations already include them, but older installations may not have them.", - "Tabella": "Table", - "Nome Indice": "Index Name", - "Colonne": "Columns", - "Crea Indici Automaticamente": "Create Indexes Automatically", - "Scarica Script SQL": "Download SQL Script", - "Creazione indici...": "Creating indexes...", - "Vuoi creare gli indici mancanti? Questa operazione migliorerà le performance del database.": "Do you want to create the missing indexes? This operation will improve database performance.", - "Sì, crea indici": "Yes, create indexes", - "Indici creati:": "Indexes created:", - "Errori:": "Errors:", - "Indici creati con successo": "Indexes created successfully", - "%d indici creati con successo": "%d indexes created successfully", - "Errore durante la creazione degli indici": "Error while creating indexes", - "Errore durante la creazione degli indici:": "Error while creating indexes:", - "%d indici mancanti trovati": "%d missing indexes found", - "Cerca per titolo, ISBN o EAN": "Search by title, ISBN or EAN", - "%d copie disponibili su %d": "%d copies available out of %d", - "1 copia disponibile su %d": "1 copy available out of %d", - "Nessuna copia registrata": "No copies registered", - "Disponibile nella data selezionata": "Available on selected date", - "Non disponibile nella data selezionata": "Not available on selected date", - "Prima data disponibile: %s": "First available date: %s", - "Seleziona un libro per vedere la disponibilità": "Select a book to see availability", - "Calendario Disponibilità": "Availability Calendar", - "visualizzazione per copia": "view by copy", - "In prestito fino al": "On loan until", - "Libro '%s' (ID: %d) ha copie disponibili negative: %d": "Book '%s' (ID: %d) has negative available copies: %d", - "Libro '%s' (ID: %d) ha più copie disponibili (%d) che totali (%d)": "Book '%s' (ID: %d) has more available copies (%d) than total (%d)", - "Prestito ID %d riferisce libro/utente inesistente (libro: %d, utente: %d)": "Loan ID %d references non-existent book/user (book: %d, user: %d)", - "Prestito ID %d attivo senza data scadenza": "Active loan ID %d has no due date", - "Libro '%s' (ID: %d) ha stato '%s' ma copie disponibili: %d": "Book '%s' (ID: %d) has status '%s' but available copies: %d", - "Prenotazione ID %d si sovrappone al prestito ID %d per il libro %d": "Reservation ID %d overlaps with loan ID %d for book %d", - "Prenotazioni ID %d e %d si sovrappongono per il libro %d": "Reservations ID %d and %d overlap for book %d", - "Prenotazione ID %d scaduta il %s ma ancora attiva": "Reservation ID %d expired on %s but still active", - "Libro ID %d ha posizioni coda non sequenziali: %s": "Book ID %d has non-sequential queue positions: %s", - "Prestito ID %d da prenotazione in attesa da %d giorni (libro %d)": "Loan ID %d from reservation pending for %d days (book %d)", - "Prestito ID %d con stato '%s' ha ancora attivo = 1": "Loan ID %d with status '%s' still has active = 1", - "APP_CANONICAL_URL non configurato nel file .env. Link nelle email potrebbero non funzionare correttamente. Valore suggerito: %s": "APP_CANONICAL_URL not configured in .env file. Email links may not work correctly. Suggested value: %s", - "Aggiungi al file .env: APP_CANONICAL_URL=%s": "Add to .env file: APP_CANONICAL_URL=%s", - "APP_CANONICAL_URL configurato ma vuoto nel file .env. Link nelle email useranno fallback a HTTP_HOST. Valore suggerito: %s": "APP_CANONICAL_URL configured but empty in .env file. Email links will use HTTP_HOST fallback. Suggested value: %s", - "Imposta nel file .env: APP_CANONICAL_URL=%s": "Set in .env file: APP_CANONICAL_URL=%s", - "APP_CANONICAL_URL configurato con valore non valido: '%s'. Link nelle email potrebbero non funzionare. Valore suggerito: %s": "APP_CANONICAL_URL configured with invalid value: '%s'. Email links may not work. Suggested value: %s", - "Correggi nel file .env: APP_CANONICAL_URL=%s": "Fix in .env file: APP_CANONICAL_URL=%s", - "Prestito non trovato": "Loan not found", - "Prestito validato e aggiornato": "Loan validated and updated", - "Errore validazione prestito:": "Loan validation error:", - "Errore correzione dati:": "Data correction error:", - "Errore creazione indici:": "Index creation error:", - "Indice %s creato su %s": "Index %s created on %s", - "Errore creazione %s su %s:": "Error creating %s on %s:", - "Eccezione creazione %s su %s:": "Exception creating %s on %s:", - "Dati libro recuperati con successo da Open Library": "Book data successfully retrieved from Open Library", - "Libro non trovato nel database Open Library": "Book not found in Open Library database", - "Calendario Prestiti e Prenotazioni": "Loans and Reservations Calendar", - "Sincronizza (ICS)": "Sync (ICS)", - "Copia Link": "Copy Link", - "Prestiti programmati": "Scheduled Loans", - "Prestiti scaduti": "Overdue Loans", - "Creata il": "Created on", - "Mese": "Month", - "Settimana": "Week", - "Lista": "List", - "Programmato": "Scheduled", - "L'URL del calendario è stato copiato negli appunti.": "The calendar URL has been copied to clipboard.", - "Prestito Programmato": "Scheduled Loan", - "Prestito Scaduto": "Overdue Loan", - "Richiesta Pendente": "Pending Request", - "Calendario non disponibile": "Calendar not available", - "Errore lettura calendario": "Calendar read error", - "Inizio": "Start", - "Oggi": "Today", - "Prestiti in corso": "Active Loans", - "Sicurezza Automatica": "Automatic Security", - "L'accesso alla cartella installer è automaticamente bloccato dopo l'installazione.": "Access to the installer folder is automatically blocked after installation.", - "Il file": "The file", - "nella root del progetto impedisce qualsiasi accesso non autorizzato.": "in the project root prevents any unauthorized access.", - "SBN Italia - Integrato": "SBN Italy - Integrated", - "Il catalogo SBN (OPAC Nazionale Italiano) è già integrato e viene interrogato automaticamente durante l'importazione ISBN. Non è necessario aggiungerlo come server esterno.": "The SBN catalog (Italian National OPAC) is already integrated and automatically queried during ISBN import. No need to add it as an external server.", - "Server Esterni SRU": "External SRU Servers", - "Server SRU aggiuntivi per Copy Cataloging. SBN Italia è già integrato (vedi sopra).": "Additional SRU servers for Copy Cataloging. SBN Italy is already integrated (see above).", - "Inserimento Manuale Dewey": "Manual Dewey Entry", - "es. 599.9, 004.6782, 641.5945": "e.g. 599.9, 004.6782, 641.5945", - "es. 599.9, 004.6782, 641.5945, 599.1": "e.g. 599.9, 004.6782, 641.5945, 599.1", - "Inserisci il codice Dewey completo (supporta fino a 4 decimali)": "Enter the complete Dewey code (supports up to 4 decimal digits)", - "Inserisci qualsiasi codice Dewey (anche se non presente nell'elenco)": "Enter any Dewey code (even if not in the list)", - "Oppure naviga per categorie:": "Or browse by categories:", - "Oppure naviga per categorie": "Or browse by categories", - "Classificazione selezionata:": "Selected classification:", - "Codice Dewey trovato e impostato": "Dewey code found and set", - "Codice Dewey non trovato": "Dewey code not found", - "Errore nel recupero dei figli": "Error retrieving children", - "Usa gli endpoint specifici per il formato legacy": "Use specific endpoints for legacy format", - "Parametro code obbligatorio.": "Code parameter required.", - "Codice parent non trovato.": "Parent code not found.", - "Codice Dewey": "Dewey Code", - "Inserisci un codice Dewey": "Enter a Dewey code", - "Formato codice non valido": "Invalid code format", - "Usa formato: 599 oppure 599.9 oppure 599.93": "Use format: 599 or 599.9 or 599.93", - "Formato codice non valido. Usa formato: 599 oppure 599.9 oppure 599.93": "Invalid code format. Use format: 599 or 599.9 or 599.93", - "Questo endpoint è supportato solo per il formato Dewey legacy. Usa /api/dewey/children.": "This endpoint is only supported for the legacy Dewey format. Use /api/dewey/children.", - "Errore nella lettura del backup.": "Error reading backup file.", - "Formato dati non valido.": "Invalid data format.", - "Errore nella lettura del file.": "Error reading file.", - "Errore nella lettura del file Dewey esistente.": "Error reading existing Dewey file.", - "File Dewey esistente non è un JSON valido o è corrotto.": "Existing Dewey file is not valid JSON or is corrupted.", - "Errore nella codifica JSON.": "JSON encoding error.", - "Attiva questa opzione solo se il tuo server supporta HTTPS. Se il tuo hosting forza già HTTPS automaticamente, non è necessario abilitarla (potrebbe causare redirect loop).": "Enable this option only if your server supports HTTPS. If your hosting already forces HTTPS automatically, you don't need to enable it (may cause redirect loop).", - "Locale non supportato.": "Unsupported locale.", - "File Dewey non trovato.": "Dewey file not found.", - "Errore nel parsing del file JSON.": "Error parsing JSON file.", - "Errori di validazione.": "Validation errors.", - "Errore nel salvataggio del file.": "Error saving file.", - "Salvato con successo.": "Saved successfully.", - "Dati validi.": "Valid data.", - "Errori di validazione nel file importato.": "Validation errors in imported file.", - "Importato con successo. %d voci totali.": "Imported successfully. %d total entries.", - "Nome file non valido.": "Invalid filename.", - "Backup non trovato.": "Backup not found.", - "Errore nel ripristino.": "Error during restore.", - "Backup ripristinato con successo.": "Backup restored successfully.", - "JSON non valido.": "Invalid JSON.", - "Nessun dato.": "No data.", - "Errore nel caricamento.": "Error loading.", - "Ripristinato": "Restored", - "Aggiungi decimale": "Add decimal", - "I dati devono essere un array non vuoto.": "Data must be a non-empty array.", - "Nodo mancante di codice a profondità %d.": "Node missing code at depth %d.", - "Il codice %s ha un nome non valido (minimo 2 caratteri).": "Code %s has an invalid name (minimum 2 characters).", - "Il codice %s ha un livello non valido (deve essere 1-7).": "Code %s has an invalid level (must be 1-7).", - "Il codice %s ha un formato non valido.": "Code %s has an invalid format.", - "Il codice %s è duplicato.": "Code %s is duplicated.", - "Il codice %s non è un figlio valido di %s.": "Code %s is not a valid child of %s.", - "Classe principale mancante: %s.": "Missing main class: %s.", - "Importato": "Imported", - "Modifiche non salvate": "Unsaved changes", - "Nome della classificazione": "Classification name", - "Formato codice non valido. Usa: XXX.Y (es. 599.1)": "Invalid code format. Use: XXX.Y (e.g. 599.1)", - "Errore nel caricamento dei backup.": "Error loading backups.", - "I dati attuali verranno sostituiti.": "Current data will be replaced.", - "Ripristinare questo backup?": "Restore this backup?", - "Questo codice esiste già.": "This code already exists.", - "Formato JSON non valido": "Invalid JSON format", - "Sessioni attive": "Active sessions", - "Gestisci i dispositivi su cui hai effettuato l'accesso con 'Ricordami'. Puoi disconnetterti da singoli dispositivi o da tutti contemporaneamente.": "Manage the devices you've logged in with 'Remember Me'. You can sign out from individual devices or all at once.", - "Caricamento sessioni...": "Loading sessions...", - "Nessuna sessione attiva. Le sessioni vengono create quando accedi con 'Ricordami' selezionato.": "No active sessions. Sessions are created when you log in with 'Remember Me' selected.", - "Sessione corrente": "Current session", - "Ultimo utilizzo": "Last used", - "Creata": "Created", - "Scade": "Expires", - "Disconnetti": "Sign out", - "Disconnetti tutti": "Sign out all", - "Vuoi disconnettere questo dispositivo?": "Do you want to sign out this device?", - "Vuoi disconnettere tutti i dispositivi? Dovrai effettuare nuovamente l'accesso su ogni dispositivo.": "Do you want to sign out all devices? You will need to log in again on each device.", - "Dispositivo sconosciuto": "Unknown device", - "sessioni attive": "active sessions", - "La richiesta ha impiegato troppo tempo. Riprova.": "The request took too long. Please try again.", - "Sessione revocata": "Session revoked", - "Impossibile revocare la sessione": "Unable to revoke session", - "Revocate %d sessioni": "Revoked %d sessions", - "ID sessione non valido": "Invalid session ID", - "Non autorizzato": "Unauthorized", - "Tabelle di Sistema": "System Tables", - "Complete": "Complete", - "%d Tabelle Mancanti": "%d Missing Tables", - "Tutte le tabelle di sistema sono presenti!": "All system tables are present!", - "Il sistema di aggiornamento è pronto.": "The update system is ready.", - "Tabelle richieste per l'aggiornamento": "Tables required for updates", - "Queste tabelle sono necessarie per tracciare gli aggiornamenti e le migrazioni del database.": "These tables are required to track updates and database migrations.", - "Cronologia degli aggiornamenti eseguiti": "History of executed updates", - "Registro delle migrazioni database applicate": "Registry of applied database migrations", - "Crea Tabelle Mancanti": "Create Missing Tables", - "Creazione tabelle...": "Creating tables...", - "Vuoi creare le tabelle di sistema mancanti? Queste sono necessarie per il sistema di aggiornamento.": "Do you want to create the missing system tables? These are required for the update system.", - "Sì, crea tabelle": "Yes, create tables", - "Tabelle create:": "Tables created:", - "%d tabelle create con successo": "%d tables created successfully", - "Errore durante la creazione delle tabelle:": "Error creating tables:", - "Tabella %s creata": "Table %s created", - "Errore creazione tabella %s:": "Error creating table %s:", - "Eccezione creazione tabella %s:": "Exception creating table %s:", - "Errore riassegnazione copia": "Copy reassignment error", - "Errore riassegnazione copia persa": "Lost copy reassignment error", - "Impossibile notificare utente: dati mancanti": "Cannot notify user: missing data", - "Notifica prenotazione disponibile inviata": "Reservation available notification sent", - "Invio notifica prenotazione fallito": "Reservation notification failed", - "Impossibile notificare utente copia non disponibile": "Cannot notify user copy unavailable", - "La copia assegnata è stata segnalata come persa o danneggiata": "The assigned copy has been reported as lost or damaged", - "La prenotazione è scaduta": "The reservation has expired", - "La copia non è più disponibile": "The copy is no longer available", - "Prenotazione: copia non disponibile": "Reservation: copy unavailable", - "Prenotazione per \"%s\" (utente: %s) messa in attesa. %s.": "Reservation for \"%s\" (user: %s) put on hold. %s.", - "Notifica copia non disponibile creata": "Copy unavailable notification created", - "Errore gestione cambio stato copia": "Copy status change handling error", - "DataIntegrity warning (store loan)": "DataIntegrity warning (store loan)", - "Notifica prestito fallita": "Loan notification failed", - "Validazione prestito fallita": "Loan validation failed", - "Riassegnazione copia fallita": "Copy reassignment failed", - "Errore elaborazione restituzione": "Return processing error", - "Rinnovo prestito fallito": "Loan renewal failed", - "Errore export CSV": "CSV export error", - "Errore annullamento prestito": "Loan cancellation error", - "Errore annullamento prenotazione": "Reservation cancellation error", - "Errore modifica data prenotazione": "Reservation date change error", - "Notifica richiesta prestito fallita": "Loan request notification failed", - "Errore richiesta prestito": "Loan request error", - "Errore prenotazione": "Reservation error", - "Riassegnazione prenotazione nuova copia fallita": "New copy reservation reassignment failed", - "Elaborazione lista attesa fallita": "Waitlist processing failed", - "La tua prenotazione per \"%s\" è stata messa in attesa. %s. Verrai notificato quando sarà disponibile una nuova copia.": "Your reservation for \"%s\" has been put on hold. %s. You will be notified when a new copy becomes available.", - "Esauriti tentativi riassegnazione copia": "Exhausted copy reassignment attempts", - "Errore gestione copia non disponibile": "Copy unavailable handling error", - "Errore invio notifica differita": "Deferred notification send error", - "Da Ritirare": "Ready for Pickup", - "Conferma Ritiro": "Confirm Pickup", - "L'utente ha ritirato il libro?": "Has the user picked up the book?", - "Ritiro confermato! Il prestito è ora in corso.": "Pickup confirmed! The loan is now active.", - "Errore nella conferma del ritiro": "Error confirming pickup", - "Giorni per ritirare un prestito approvato": "Days to pick up an approved loan", - "Ritiro confermato con successo": "Pickup confirmed successfully", - "Prestito non trovato o non pronto per il ritiro": "Loan not found or not ready for pickup", - "Recati in biblioteca durante gli orari di apertura per ritirare il libro.": "Visit the library during opening hours to pick up the book.", - "Pronto per il ritiro": "Ready for Pickup", - "Ritiro scaduto": "Pickup Expired", - "Inviata quando un prestito è stato approvato e il libro è pronto per il ritiro.": "Sent when a loan has been approved and the book is ready for pickup.", - "Inviata quando il tempo per ritirare un libro è scaduto e il prestito è stato annullato.": "Sent when the pickup deadline has passed and the loan has been cancelled.", - "Scadenza ritiro": "Pickup deadline", - "Prestiti in attesa di ritiro attivati": "Loans ready for pickup activated", - "Ritiri scaduti elaborati": "Expired pickups processed", - "Prestito pronto per ritiro non trovato": "Loan ready for pickup not found", - "Errore attivazione prestito schedulato": "Scheduled loan activation error", - "Errore elaborazione ritiro scaduto": "Expired pickup processing error", - "Il termine per il ritiro è scaduto": "The pickup deadline has passed", - "Ritiro non effettuato entro il termine previsto": "Pickup not completed within the deadline", - "Ritiro già confermato o modificato": "Pickup already confirmed or modified", - "Prestito già modificato da altra richiesta": "Loan already modified by another request", - "Errore invio notifica ritiro scaduto": "Error sending pickup expired notification", - "Nessun prestito in attesa di ritiro": "No loans waiting for pickup", - "Gestisci tutti": "Manage all", - "Ritiro annullato": "Pickup cancelled", - "Inviata quando un ritiro viene annullato dall'amministratore.": "Sent when a pickup is cancelled by an administrator.", - "Prestito non trovato o non cancellabile": "Loan not found or cannot be cancelled", - "Ritiro annullato con successo": "Pickup cancelled successfully", - "Ritiro non effettuato": "Pickup not completed", - "Errore durante l'annullamento del ritiro": "Error cancelling pickup", - "Prestito senza copia assegnata - contattare l'amministratore": "Loan has no assigned copy - contact administrator", - "(opzionale - max 200 caratteri)": "(optional - max 200 characters)", - "(opzionale - max 70 caratteri)": "(optional - max 70 characters)", - "(percorso legacy)": "(legacy path)", - "+ Aggiungi da preset...": "+ Add from preset...", - "1 evento": "1 event", - "API Key già configurata": "API Key already configured", - "API configurata": "API configured", - "Abilita Client SRU": "Enable SRU Client", - "Abilita Plugin": "Enable Plugin", - "Abilita Server SRU": "Enable SRU Server", - "Accedi e Procedi": "Login and Continue", - "Accesso negato. Permessi insufficienti.": "Access denied. Insufficient permissions.", - "Acquisito a": "Acquired at", - "Acquisito da": "Acquired from", - "Aggiornamento disponibile!": "Update available!", - "Aggiunti di recente al catalogo": "Recently added to catalog", - "Anni di Vita": "Years of Life", - "Anno a": "Year to", - "Anno da": "Year from", - "Annulla Prestito": "Cancel Loan", - "Annulla Prestito Scaduto": "Cancel Expired Loan", - "Annullare il prestito scaduto?": "Cancel the expired loan?", - "Applicazione già installata": "Application already installed", - "Approvato il %s": "Approved on %s", - "Article (Articolo/Blog)": "Article (Article/Blog)", - "Autenticazione Admin Richiesta": "Admin Authentication Required", - "Autenticazione Richiesta": "Authentication Required", - "Autenticazione richiesta.": "Authentication required.", - "Autore non specificato": "Author not specified", - "Backup creato!": "Backup created!", - "Backup eliminato con successo": "Backup deleted successfully", - "Cambia vista": "Change view", - "Cancella": "Clear", - "Caricamento del logo non riuscito. Verifica le dimensioni e il formato del file.": "Logo upload failed. Check file size and format.", - "Cerca...": "Search...", - "Codice scaffale obbligatorio": "Shelf code required", - "Collocazione:": "Location:", - "Compila tutti i campi obbligatori.": "Fill in all required fields.", - "Confermare il ritiro?": "Confirm pickup?", - "Confermi di voler attivare direttamente questo utente senza richiedere verifica email?": "Are you sure you want to directly activate this user without requiring email verification?", - "Configura API": "Configure API", - "Configura Z39.50": "Configure Z39.50", - "Consigliato: Summary Large Image per homepage.": "Recommended: Summary Large Image for homepage.", - "Contenuto della pagina": "Page content", - "Controlla la tua casella di posta e clicca sul link per resettare la password. Il link sarà valido per 2 ore.": "Check your inbox and click the link to reset your password. The link will be valid for 2 hours.", - "Controllo pre-aggiornamento fallito": "Pre-update check failed", - "Copertina del libro \"%s\"": "Book cover for \"%s\"", - "Copia eliminata con successo.": "Copy deleted successfully.", - "Copia non trovata.": "Copy not found.", - "Crea Backup": "Create Backup", - "Credenziali": "Credentials", - "Credenziali non valide o utente non admin": "Invalid credentials or user is not admin", - "Da approvare o rifiutare": "To approve or reject", - "Da ritirare": "Ready for pickup", - "Data Restituzione": "Return Date", - "Data non valida.": "Invalid date.", - "Database installato (46 tabelle)": "Database installed (46 tables)", - "Descrizione per Twitter/X. Se vuoto, usa la descrizione Open Graph.": "Description for Twitter/X. If empty, uses Open Graph description.", - "Editore %s": "Publisher %s", - "Eliminare i libri selezionati?": "Delete selected books?", - "Eliminare il file .installed dalla root del progetto e rieseguire l'installer": "Delete the .installed file from the project root and run the installer again", - "Email Admin": "Admin Email", - "Endpoint SRU:": "SRU Endpoint:", - "Errore di salvataggio. Riprova più tardi.": "Save error. Please try again later.", - "Errore di sicurezza. Ricarica la pagina e riprova": "Security error. Reload the page and try again", - "Errore di sicurezza. Riprova.": "Security error. Please try again.", - "Errore durante il recupero dei dati": "Error retrieving data", - "Errore durante il recupero delle sessioni": "Error retrieving sessions", - "Errore durante il salvataggio delle impostazioni.": "Error saving settings.", - "Errore durante la conferma del ritiro": "Error confirming pickup", - "Errore durante la revoca della sessione": "Error revoking session", - "Errore durante la revoca delle sessioni": "Error revoking sessions", - "Errore durante la ricerca": "Error during search", - "Errore durante la verifica dei libri associati": "Error verifying associated books", - "Errore durante la verifica dei prestiti attivi": "Error verifying active loans", - "Errore generazione calendario": "Calendar generation error", - "Errore generazione PDF prestito": "Error generating loan PDF", - "Errore interno del database": "Internal database error", - "Errore interno del database durante la verifica": "Internal database error during verification", - "Errore invio notifica ritiro pronto": "Error sending pickup ready notification", - "Errore nel salvataggio del file di traduzione": "Error saving translation file", - "Errore nel salvataggio del file route": "Error saving route file", - "Errore nella prenotazione.": "Error creating reservation.", - "Errore nella ricerca.": "Error during search.", - "Errore nella richiesta di prestito.": "Error creating loan request.", - "Esiste già un altro libro con lo stesso identificatore (ISBN/EAN).": "Another book with the same identifier (ISBN/EAN) already exists.", - "Esiste già un libro con lo stesso identificatore (ISBN/EAN).": "A book with the same identifier (ISBN/EAN) already exists.", - "Esplora il catalogo e scopri nuovi titoli.": "Explore the catalog and discover new titles.", - "Esplora il nostro catalogo digitale": "Explore our digital catalog", - "Espone il catalogo locale via protocollo SRU per altre biblioteche.": "Exposes local catalog via SRU protocol for other libraries.", - "File backup non trovato": "Backup file not found", - "File di aggiornamento non valido (troppo piccolo)": "Invalid update file (too small)", - "File di log non trovato": "Log file not found", - "File troppo grande. Dimensione massima 5MB.": "File too large. Maximum size 5MB.", - "Formato richiesta non valido": "Invalid request format", - "Genere creato con successo!": "Genre created successfully!", - "Google Books API collegata": "Google Books API connected", - "Hai già una prenotazione attiva per questo libro.": "You already have an active reservation for this book.", - "Hai già una richiesta di prestito in attesa per questo libro": "You already have a pending loan request for this book", - "Hai già un prestito attivo o in attesa per questo libro": "You already have an active or pending loan for this book", - "ID genere non valido": "Invalid genre ID", - "IN RITARDO": "OVERDUE", - "ISBN non trovato. Fonti consultate: %s": "ISBN not found. Sources consulted: %s", - "Il download dovrebbe iniziare automaticamente": "Download should start automatically", - "Il termine per il ritiro è scaduto. Vuoi annullare questo prestito?": "The pickup deadline has passed. Do you want to cancel this loan?", - "Immagine Twitter": "Twitter Image", - "Immagine per Twitter/X. Dimensioni consigliate: 1200x675px o 1200x1200px. Se vuoto, usa l'immagine Open Graph.": "Image for Twitter/X. Recommended dimensions: 1200x675px or 1200x1200px. If empty, uses Open Graph image.", - "Importante:": "Important:", - "Impossibile acquisire il lock. Riprova tra qualche secondo.": "Unable to acquire lock. Please try again in a few seconds.", - "Impossibile creare la mensola. Riprova più tardi.": "Unable to create shelf. Please try again later.", - "Impossibile creare lo scaffale. Riprova più tardi.": "Unable to create bookcase. Please try again later.", - "Impossibile eliminare il libro: ci sono prestiti o prenotazioni attive. Termina prima i prestiti/prenotazioni.": "Cannot delete book: there are active loans or reservations. End loans/reservations first.", - "Impossibile eliminare una copia attualmente in prestito.": "Cannot delete a copy currently on loan.", - "Impossibile eliminare: la mensola contiene libri": "Cannot delete: shelf contains books", - "Impossibile eliminare: lo scaffale contiene libri": "Cannot delete: bookcase contains books", - "Impossibile eliminare: lo scaffale contiene mensole": "Cannot delete: bookcase contains shelves", - "Impossibile leggere il file di log": "Unable to read log file", - "Impossibile modificare una copia attualmente in prestito. Prima termina il prestito o imposta lo stato su \"Disponibile\" per chiuderlo automaticamente.": "Cannot edit a copy currently on loan. First end the loan or set status to \"Available\" to close it automatically.", - "Impossibile riaprire il file ZIP": "Unable to reopen ZIP file", - "Impossibile ricalcolare la disponibilità del libro.": "Unable to recalculate book availability.", - "Impossibile salvare le impostazioni.": "Unable to save settings.", - "Impostazioni API Book Scraper salvate correttamente.": "Book Scraper API settings saved successfully.", - "Impostazioni Z39.50 salvate correttamente.": "Z39.50 settings saved successfully.", - "In Attesa": "Pending", - "In scadenza": "Expiring soon", - "Indice ISBN": "ISBN Index", - "Inserisci una breve biografia dell'autore...": "Enter a brief author biography...", - "L'applicazione risulta correttamente configurata.": "The application is correctly configured.", - "L'installazione è stata completata correttamente e tutte le verifiche sono andate a buon fine.": "Installation completed successfully and all verifications passed.", - "La data non può essere nel passato.": "Date cannot be in the past.", - "La pagina che stai cercando non esiste.": "The page you are looking for does not exist.", - "La password deve contenere almeno una lettera maiuscola, una minuscola e un numero.": "Password must contain at least one uppercase letter, one lowercase letter and a number.", - "La password deve contenere maiuscole, minuscole e numeri.": "Password must contain uppercase, lowercase and numbers.", - "La password deve essere lunga almeno 8 caratteri.": "Password must be at least 8 characters long.", - "La password non può superare i 72 caratteri.": "Password cannot exceed 72 characters.", - "La password attuale non è corretta.": "Current password is incorrect.", - "Le password non coincidono.": "Passwords do not match.", - "Le sessioni scadono automaticamente per proteggere i tuoi dati.": "Sessions expire automatically to protect your data.", - "Letta": "Read", - "Libri attualmente in prestito": "Books currently on loan", - "Libri prenotati dagli utenti": "Books reserved by users", - "MaintenanceService errore ritiri scaduti": "MaintenanceService expired pickups error", - "MaintenanceService errore scadenza ritiro": "MaintenanceService pickup expiration error", - "MaintenanceService ritiro scaduto": "MaintenanceService pickup expired", - "Mensola eliminata": "Shelf deleted", - "Modifica Route": "Edit Route", - "Mostra questa guida": "Show this guide", - "Nessun editore trovato per": "No publisher found for", - "Nessun risultato trovato per": "No results found for", - "Nessun server configurato. Aggiungine uno per iniziare.": "No servers configured. Add one to get started.", - "Nessuna copia disponibile per il periodo richiesto": "No copy available for the requested period", - "Nessuna fonte di scraping disponibile. Installa almeno un plugin di scraping (es. Open Library o Scraping Pro).": "No scraping source available. Install at least one scraping plugin (e.g. Open Library or Scraping Pro).", - "Nessuna ricerca recente": "No recent searches", - "Nessuna richiesta da approvare": "No requests to approve", - "Nome Server": "Server Name", - "Nome e cognome sono obbligatori.": "First name and last name are required.", - "Non ci sono azioni urgenti da completare.": "No urgent actions to complete.", - "Nuova ricerca": "New search", - "Nuovo libro": "New book", - "Oppure accedere a /installer/?force=1 per forzare una nuova procedura": "Or go to /installer/?force=1 to force a new installation", - "PDF generato!": "PDF generated!", - "PDF prestito non generato": "Loan PDF not generated", - "Passo": "Step", - "Percorso backup non valido": "Invalid backup path", - "Periodo": "Period", - "Permette di importare libri (Copy Cataloging) e cercare su cataloghi esterni.": "Allows importing books (Copy Cataloging) and searching external catalogs.", - "Personalizzato": "Custom", - "Personalizzazione aspetto": "Appearance customization", - "Plugin API personalizzata per scraping dati libri": "Custom API plugin for book data scraping", - "Prenotazione": "Reservation", - "Prenotazione effettuata con successo": "Reservation created successfully", - "Prenotazioni attive (slot libro)": "Active reservations (book slots)", - "Prestiti approvati in attesa di consegna": "Approved loans awaiting delivery", - "Prestiti pronti per il ritiro": "Loans ready for pickup", - "Prestito annullato!": "Loan cancelled!", - "Prestito approvato - in attesa di ritiro": "Loan approved - awaiting pickup", - "Prestito chiuso automaticamente. La copia è ora disponibile.": "Loan closed automatically. The copy is now available.", - "Prestito già processato da un altro utente": "Loan already processed by another user", - "Prestito prenotato con successo": "Loan reserved successfully", - "Prestito rinnovato correttamente. Nuova scadenza: %s": "Loan renewed successfully. New due date: %s", - "Profile (Profilo)": "Profile", - "Puoi eliminare solo copie perse, danneggiate o in manutenzione. Prima modifica lo stato della copia.": "You can only delete lost, damaged or in maintenance copies. First change the copy status.", - "Quando abilitato, il plugin interrogherà l'API durante l'importazione dati libri.": "When enabled, the plugin will query the API during book data import.", - "Questa operazione cancellerà tutti i dati esistenti. Assicurati di avere un backup.": "This operation will delete all existing data. Make sure you have a backup.", - "Questi sono i server a cui la tua biblioteca si collegherà per cercare e importare libri.": "These are the servers your library will connect to for searching and importing books.", - "Questo plugin interroga un servizio API esterno per recuperare dati libri tramite ISBN/EAN. Ha priorità 3 (più alta di Open Library).": "This plugin queries an external API service to retrieve book data via ISBN/EAN. It has priority 3 (higher than Open Library).", - "Ricerche recenti": "Recent searches", - "Richiedono attenzione immediata": "Require immediate attention", - "Richieste in Attesa": "Pending Requests", - "Richiesto:": "Required:", - "Ritiro confermato!": "Pickup confirmed!", - "Ritiro scaduto il": "Pickup expired on", - "Route aggiornate con successo": "Routes updated successfully", - "Salva Configurazione": "Save Configuration", - "Scadenza prenotazione": "Reservation expiration", - "Scadenza ritiro:": "Pickup deadline:", - "Scaduto il:": "Expired on:", - "Scaffale creato": "Bookcase created", - "Scaffale eliminato": "Bookcase deleted", - "Scaffale obbligatorio": "Bookcase required", - "Cerca globale": "Global search", - "Chiudi popup": "Close popup", - "Mostra scorciatoie": "Show shortcuts", - "Navigazione": "Navigation", - "Scorciatoie da tastiera": "Keyboard shortcuts", - "Vai a Autori": "Go to Authors", - "Vai a Dashboard": "Go to Dashboard", - "Vai a Editori": "Go to Publishers", - "Vai a Impostazioni": "Go to Settings", - "Vai a Libri": "Go to Books", - "Vai a Prestiti": "Go to Loans", - "Vai a Utenti": "Go to Users", - "poi": "then", - "Se desideri reinstallare puoi:": "If you want to reinstall you can:", - "Sei sicuro di voler eliminare questo messaggio?": "Are you sure you want to delete this message?", - "Sei sicuro di voler eliminare questo utente?": "Are you sure you want to delete this user?", - "Seleziona tutti": "Select all", - "Sessione Scaduta": "Session Expired", - "Si è verificato un errore di rete.": "A network error occurred.", - "Si è verificato un errore durante il salvataggio.": "An error occurred while saving.", - "Si è verificato un errore imprevisto.": "An unexpected error occurred.", - "Si è verificato un errore. Riprova.": "An error occurred. Please try again.", - "Sintassi": "Syntax", - "Sito": "Website", - "Statistiche aggiornate per": "Statistics updated for", - "Stato della copia aggiornato con successo.": "Copy status updated successfully.", - "Stato non valido.": "Invalid status.", - "Summary (Immagine Piccola)": "Summary (Small Image)", - "Summary Large Image (Immagine Grande)": "Summary Large Image", - "Sì, Annulla": "Yes, Cancel", - "Test Endpoint": "Test Endpoint", - "Testi Banner Cookie": "Cookie Banner Texts", - "Timeout (secondi)": "Timeout (seconds)", - "Tipo Twitter Card": "Twitter Card Type", - "Tipo di contenuto per Open Graph. Scegli 'Website' per la homepage.": "Content type for Open Graph. Choose 'Website' for homepage.", - "Titolo modale": "Modal title", - "Titolo per Twitter/X. Se vuoto, usa il titolo Open Graph.": "Title for Twitter/X. If empty, uses Open Graph title.", - "Torna alla Home": "Return to Home", - "Trigger database: azione manuale richiesta": "Database trigger: manual action required", - "Tutte le richieste sono state gestite.": "All requests have been processed.", - "Tutto sotto controllo!": "Everything under control!", - "Twitter Cards (X)": "Twitter Cards (X)", - "URL Endpoint API": "API Endpoint URL", - "URL Endpoint SRU": "SRU Endpoint URL", - "Una chiave è attualmente salvata e funzionante. Puoi aggiornarla inserendo un nuovo valore o lasciarla vuota per rimuoverla.": "A key is currently saved and working. You can update it by entering a new value or leave it empty to remove it.", - "Upload non valido": "Invalid upload", - "Utente eliminato con successo.": "User deleted successfully.", - "Utente preselezionato": "Pre-selected user", - "Vai all'applicazione": "Go to application", - "Verifica reCAPTCHA fallita. Riprova.": "reCAPTCHA verification failed. Please try again.", - "Vista griglia": "Grid view", - "Vista tabella": "Table view", - "Website (Sito Web)": "Website", - "attivata": "activated", - "deve iniziare con": "must start with", - "libri eliminati": "books deleted", - "minuti fa": "minutes ago", - "non può contenere spazi": "cannot contain spaces", - "non può essere vuota": "cannot be empty", - "ore fa": "hours ago", - "prenotazioni": "reservations", - "secondi (min: 5, max: 60)": "seconds (min: 5, max: 60)", - "(opzionale)": "(optional)", - "API Key": "API Key", - "CAP": "ZIP Code", - "CSRF": "CSRF", - "Close menu": "Close menu", - "Coda": "Queue", - "Cover": "Cover", - "Database": "Database", - "Export": "Export", - "Import": "Import", - "Library Management System": "Library Management System", - "Search": "Search", - "Toggle menu": "Toggle menu", - "Toggle search": "Toggle search", - "Import LibraryThing": "Import LibraryThing", - "Import da LibraryThing": "Import from LibraryThing", - "Importa i tuoi libri esportati da LibraryThing.com (formato TSV)": "Import your books exported from LibraryThing.com (TSV format)", - "Import CSV Standard": "Standard CSV Import", - "Carica File LibraryThing": "Upload LibraryThing File", - "Arricchisci dati con scraping web (copertine, descrizioni, etc.)": "Enrich data with web scraping (covers, descriptions, etc.)", - "Importa Libri": "Import Books", - "Import in corso...": "Importing...", - "Come Esportare da LibraryThing": "How to Export from LibraryThing", - "Campi Supportati": "Supported Fields", - "Gestione Plugin LibraryThing": "LibraryThing Plugin Management", - "Completo": "Complete", - "Incompleto": "Incomplete", - "Campi Database": "Database Fields", - "Il plugin è attualmente installato e funzionante.": "The plugin is currently installed and working.", - "Disinstalla Plugin": "Uninstall Plugin", - "ATTENZIONE: Disinstallazione Irreversibile": "WARNING: Irreversible Uninstallation", - "Confermo di voler disinstallare il plugin e di aver effettuato un backup dei dati": "I confirm I want to uninstall the plugin and have made a backup of the data", - "Export per LibraryThing": "Export for LibraryThing", - "LibraryThing TSV": "LibraryThing TSV", - "File vuoto o formato non valido": "Empty file or invalid format", - "Il file deve avere estensione .tsv, .csv o .txt": "File must have .tsv, .csv or .txt extension", - "Il file non sembra essere in formato LibraryThing. Colonne richieste: Book Id, Title, Primary Author, ISBNs": "File does not appear to be in LibraryThing format. Required columns: Book Id, Title, Primary Author, ISBNs", - "Impossibile aprire il file": "Unable to open file", - "Numero massimo di righe superato (%d)": "Maximum number of rows exceeded (%d)", - "Copertine scaricate (LibraryThing):": "Covers downloaded (LibraryThing):", - "Già presenti:": "Already present:", - "Impossibile scaricare (libro senza ISBN):": "Cannot download (book has no ISBN):", - "Copertina non trovata online:": "Cover not found online:", - "Storico Import": "Import History", - "Visualizza la cronologia degli import CSV e LibraryThing con report errori dettagliati": "View the history of CSV and LibraryThing imports with detailed error reports", - "%d import registrato": "%d import recorded", - "%d import registrati": "%d imports recorded", - "Cronologia Import": "Import History", - "Libri Importati": "Books Imported", - "Aggiornati": "Updated", - "Errori Totali": "Total Errors", - "Data/Ora": "Date/Time", - "Totali": "Total", - "Importati": "Imported", - "Durata": "Duration", - "Scarica Errori": "Download Errors", - "Nessun errore": "No errors", - "Nessun import registrato": "No imports recorded", - "Gli import CSV e LibraryThing verranno visualizzati qui": "CSV and LibraryThing imports will be displayed here", - "Gli import vengono tracciati automaticamente durante l'elaborazione": "Imports are tracked automatically during processing", - "Informazioni sullo Storico Import": "Import History Information", - "Retention: 90 giorni": "Retention: 90 days", - "I log vengono conservati per 90 giorni per conformità GDPR": "Logs are retained for 90 days for GDPR compliance", - "Scarica il report CSV per analizzare gli errori in dettaglio": "Download the CSV report to analyze errors in detail", - "Ogni errore include: numero riga, titolo libro, tipo errore e messaggio dettagliato": "Each error includes: line number, book title, error type and detailed message", - "ID import mancante": "Missing import ID", - "%d import logs eliminati (più vecchi di %d giorni)": "%d import logs deleted (older than %d days)", - "Leggi PDF": "Read PDF", - "Chiudi Visualizzatore": "Close Viewer", - "Visualizzatore PDF": "PDF Viewer", - "Usa la funzione di ricerca del browser per trovare testo nel documento": "Use your browser's search function to find text in the document", - "Usa il controllo schermo intero del viewer o del browser": "Use the viewer or browser fullscreen control", - "Condivisione": "Sharing", - "Seleziona i pulsanti di condivisione da mostrare nella pagina del libro.": "Select which share buttons to show on the book page.", - "Nessun pulsante selezionato": "No buttons selected", - "Salva impostazioni condivisione": "Save sharing settings", - "Impostazioni di condivisione aggiornate.": "Sharing settings updated.", - "Condividi su X": "Share on X", - "Condividi su Telegram": "Share on Telegram", - "Condividi su LinkedIn": "Share on LinkedIn", - "Condividi su Reddit": "Share on Reddit", - "Condividi su Pinterest": "Share on Pinterest", - "Condividi su Threads": "Share on Threads", - "Condividi su Bluesky": "Share on Bluesky", - "Condividi su Tumblr": "Share on Tumblr", - "Salva su Pocket": "Save to Pocket", - "Condividi su VK": "Share on VK", - "Condividi su LINE": "Share on LINE", - "Invia via SMS": "Send via SMS", - "Invia per email": "Send by email", - "Copia link": "Copy link", - "Collezione: %d libri, %d autori, %d editori.": "Collection: %d books, %d authors, %d publishers.", - "Catalogo bibliotecario gestito con [Pinakes](https://github.com/fabiodalez-dev/Pinakes). Disponibile in: %s.": "Library catalog powered by [Pinakes](https://github.com/fabiodalez-dev/Pinakes). Available in: %s.", - "Pagine Principali": "Main Pages", - "Sfoglia e cerca la collezione completa": "Browse and search the full book collection", - "Informazioni sulla biblioteca": "About this library", - "Calendario eventi culturali": "Cultural events calendar", - "Informativa sulla privacy": "Privacy policy", - "Feed e Scoperta": "Feeds & Discovery", - "Feed RSS": "RSS Feed", - "Ultime aggiunte al catalogo (RSS 2.0)": "Latest book additions (RSS 2.0)", - "Indice completo degli URL": "Complete URL index", - "Interoperabilità bibliotecaria (MARCXML, Dublin Core)": "Library interoperability (MARCXML, Dublin Core)", - "Autenticazione utente": "User authentication", - "Registrazione nuovo utente": "New user registration", - "Genera automaticamente un file llms.txt per rendere la biblioteca comprensibile ai modelli linguistici (LLM)": "Automatically generate an llms.txt file to make the library understandable by large language models (LLMs)", - "Cos'è llms.txt:": "What is llms.txt:", - "È uno standard emergente (llmstxt.org) che fornisce ai motori AI un sommario strutturato del sito in formato Markdown. Quando attivo, il file viene generato dinamicamente con le statistiche della biblioteca, le pagine pubbliche e le informazioni API.": "An emerging standard (llmstxt.org) that provides AI engines with a structured Markdown summary of the site. When enabled, the file is dynamically generated with library statistics, public pages, and API information.", - "Abilita llms.txt": "Enable llms.txt", - "Rende disponibile /llms.txt e lo aggiunge a robots.txt": "Makes /llms.txt available and adds it to robots.txt", - "Disattivato": "Disabled", - "Tipo Media": "Media Type", - "Disco": "Record", - "Tutti i media": "All media" + "\"%s\" prestato a %s è in ritardo di %d giorni": "\"%s\" loaned to %s is %d days overdue", + "$1": "$1", + "$2": "$2", + "%d Problemi": "%d Issues", + "%d minuti fa": "%d minutes ago", + "%d minuto fa": "%d minute ago", + "%d notifica non letta": "%d unread notification", + "%d notifiche non lette": "%d unread notifications", + "%d ora fa": "%d hour ago", + "%d ore fa": "%d hours ago", + "%d prenotazione attiva": "%d active reservation", + "%d prenotazioni attive": "%d active reservations", + "%d prestiti attivi": "%d active loans", + "%d prestiti in ritardo": "%d overdue loans", + "%d prestiti passati": "%d past loans", + "%d prestito attivo": "%d active loan", + "%d prestito in ritardo": "%d overdue loan", + "%d prestito passato": "%d past loan", + "%d problemi rilevati": "%d issues detected", + "%d recensione": "%d review", + "%d recensioni": "%d reviews", + "%d richiesta in sospeso": "%d pending request", + "%d richieste in sospeso": "%d pending requests", + "%d titoli": "%d titles", + "%s ha prenotato \"%s\"": "%s has reserved \"%s\"", + "(filtrati da _MAX_ libri totali)": "(filtered from _MAX_ total books)", + "(opzionale - URL completo)": "(optional - full URL)", + "(opzionale - max 160 caratteri)": "(optional - max 160 characters)", + "(opzionale - max 60 caratteri)": "(optional - max 60 characters)", + "(opzionale - separate da virgola)": "(optional - comma separated)", + "+ 15 campi aggiuntivi disponibili (vedi CSV di esempio)": "+ 15 additional fields available (see example CSV)", + "+39 02 1234567": "+1 (555) 123-4567", + "+39 123 456 7890": "+1 123 456 7890", + ", %d errori": ", %d errors", + ", %d libri arricchiti con scraping": ", %d books enriched via scraping", + "-- Seleziona --": "-- Select --", + "-- Seleziona un template --": "-- Select a template --", + "... e altri %d errori": "... and %d more errors", + ".env caricato OK": ".env loaded OK", + "/* Inserisci il tuo codice CSS qui */\n/* Esempio: */\n/* body { font-size: 16px; } */": "/* Insert your CSS code here */\n/* Example: */\n/* body { font-size: 16px; } */", + "// Script analytics (es. Google Analytics)\n// Esempio Google Analytics 4:\n// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n// ga('create', 'UA-XXXXX-Y', 'auto');\n// ga('send', 'pageview');": "// Analytics scripts (e.g. Google Analytics)\n// Google Analytics 4 Example:\n// (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n// (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n// m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n// })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n// ga('create', 'UA-XXXXX-Y', 'auto');\n// ga('send', 'pageview');", + "// Script essenziali (es. chat, accessibility)\n// Esempio:\n// console.log('Essential JS loaded');": "// Essential scripts (e.g. chat, accessibility)\n// Example:\n// console.log('Essential JS loaded');", + "// Script marketing (es. Facebook Pixel)\n// Esempio Facebook Pixel:\n// !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n// n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n// n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n// t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n// document,'script','https://connect.facebook.net/en_US/fbevents.js');\n// fbq('init', 'YOUR_PIXEL_ID');\n// fbq('track', 'PageView');": "// Marketing scripts (e.g. Facebook Pixel)\n// Facebook Pixel Example:\n// !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n// n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n// n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n// t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n// document,'script','https://connect.facebook.net/en_US/fbevents.js');\n// fbq('init', 'YOUR_PIXEL_ID');\n// fbq('track', 'PageView');", + "/catalogo": "/catalog", + "0-10 libri": "0-10 books", + "1. Accesso al server": "1. Server Access", + "1. Collegati al server via SSH:": "1. Connect to the server via SSH:", + "101-500 libri": "101-500 books", + "11-50 libri": "11-50 books", + "2. Aggiungi una delle configurazioni seguenti:": "2. Add one of the following configurations:", + "2. Vai nella directory dell'applicazione:": "2. Go to the application directory:", + "3. Installa le dipendenze con Composer:": "3. Install dependencies with Composer:", + "4. Verifica che le dipendenze siano state installate:": "4. Verify that dependencies have been installed:", + "51-100 libri": "51-100 books", + ": attiva per ordinare la colonna in ordine crescente": ": activate to sort column ascending", + ": attiva per ordinare la colonna in ordine decrescente": ": activate to sort column descending", + "A": "A", + "API": "API", + "API Keys": "API Keys", + "API Pubblica": "Public API", + "API abilitata con successo.": "API enabled successfully.", + "API disabilitata con successo.": "API disabled successfully.", + "API key creata con successo.": "API key created successfully.", + "API key eliminata con successo.": "API key deleted successfully.", + "AVVISO Trigger:": "Trigger WARNING:", + "Abilita": "Enable", + "Abilita Cookie Banner": "Enable Cookie Banner", + "Abilita Modalità Catalogo": "Enable Catalogue Mode", + "Abilita Modalità Solo Catalogo": "Enable Catalogue Only Mode", + "Abilita o disabilita l'accesso all'API pubblica": "Enable or disable public API access", + "Abilitata - Visibile nel frontend": "Enabled - Visible in frontend", + "Abilitata": "Enabled", + "Abilitato": "Enabled", + "Accedi": "Login", + "Directory Upload Pubblici": "Public Uploads Directory", + "Accedi a /installer/?force=1 per forzare una reinstallazione": "Go to /installer/?force=1 to force a reinstallation", + "Accedi al server tramite SSH e modifica il crontab:": "Access the server via SSH and edit the crontab:", + "Accedi al tuo account": "Sign in to your account", + "Accedi all'area admin con le credenziali sopra indicate": "Log in to the admin area with the credentials above", + "Accedi per aggiungere ai Preferiti": "Log in to add to Favorites", + "Accesso": "Login", + "Accesso Richiesto": "Login Required", + "Accesso in corso...": "Signing in...", + "Accesso non autorizzato": "Unauthorized access", + "Accetta selezionati": "Accept Selected", + "Accetta tutti": "Accept All", + "Accetto la": "I accept the", + "Account": "Account", + "Account In Attesa": "Pending Account", + "Account Sospeso": "Suspended Account", + "Account creato con successo! Verifica la tua email.": "Account created successfully! Check your email.", + "Account creato! In attesa di approvazione da parte dell'amministratore.": "Account created! Awaiting administrator approval.", + "Acquisto": "Purchase", + "Adesso": "Just now", + "Admin": "Admin", + "Admin Dewey": "Dewey Admin", + "Aggiorna": "Refresh", + "Aggiorna Dati": "Update Data", + "Aggiorna Evento": "Update Event", + "Aggiorna Statistiche": "Refresh Statistics", + "Aggiorna da ISBN": "Update from ISBN", + "Aggiorna i dettagli del libro:": "Update book details:", + "Aggiorna i dettagli dell'autore: %s": "Update author details: %s", + "Aggiorna i dettagli dell'editore:": "Update publisher details:", + "Aggiorna le informazioni del profilo selezionato.": "Update selected profile information.", + "Aggiorna password": "Update password", + "Aggiorna Ora": "Update Now", + "Aggiornamento alla versione %s completato": "Update to version %s completed", + "Aggiornamento completato!": "Update completed!", + "Aggiornamento completato con successo": "Update completed successfully", + "Aggiornamento fallito": "Update failed", + "Aggiornamento già in corso": "Update already in progress", + "Avvio aggiornamento": "Starting update", + "Avvio backup database": "Starting database backup", + "Backup completato": "Backup completed", + "Backup database completato": "Database backup completed", + "Backup tabella": "Backing up table", + "Download completato": "Download completed", + "Errore backup database": "Database backup error", + "Errore fatale durante aggiornamento": "Fatal error during update", + "Impossibile aprire file di backup per scrittura": "Unable to open backup file for writing", + "Impossibile creare lock file": "Unable to create lock file", + "Installazione completata": "Installation completed", + "Memory limit aumentato": "Memory limit increased", + "Modalità manutenzione rimossa automaticamente (scaduta)": "Maintenance mode automatically removed (expired)", + "Step 1: Creazione backup": "Step 1: Creating backup", + "Step 2: Download aggiornamento": "Step 2: Downloading update", + "Step 3: Installazione aggiornamento": "Step 3: Installing update", + "Trovate tabelle da backuppare": "Found tables to backup", + "Errore SQL durante migrazione %s: %s": "SQL error during migration %s: %s", + "Errore preparazione query migrazioni": "Error preparing migrations query", + "Errore recupero risultati migrazioni": "Error fetching migrations results", + "Errore recupero batch migrazioni": "Error fetching migrations batch", + "Errore preparazione insert migrazione": "Error preparing migration insert", + "Errore creazione tabella migrazioni": "Error creating migrations table", + "Errore creazione tabella update_logs": "Error creating update_logs table", + "Errore nel recupero delle tabelle": "Error retrieving tables", + "Errore nel recupero struttura tabella %s": "Error retrieving structure for table %s", + "Errore nel recupero dati tabella %s": "Error retrieving data for table %s", + "Pacchetto di aggiornamento non valido: manca %s": "Invalid update package: missing %s", + "Errore preparazione log aggiornamento": "Error preparing update log", + "Errore preparazione completamento log": "Error preparing log completion", + "Errore aggiornamento log": "Error updating log", + "URL di download non trovato": "Download URL not found", + "File di aggiornamento non valido": "Invalid update file", + "Impossibile creare directory di backup": "Unable to create backup directory", + "Impossibile creare directory di backup applicazione": "Unable to create application backup directory", + "Impossibile creare directory di backup: %s": "Unable to create backup directory: %s", + "Impossibile creare directory temporanea": "Unable to create temporary directory", + "Impossibile salvare il file di aggiornamento": "Unable to save update file", + "Impossibile creare il file di lock per l'aggiornamento": "Unable to create update lock file", + "Estrazione del pacchetto fallita": "Package extraction failed", + "Impossibile scrivere file di backup": "Unable to write backup file", + "Directory sorgente non trovata": "Source directory not found", + "Impossibile recuperare informazioni sulla release": "Unable to retrieve release information", + "Impossibile connettersi a GitHub": "Unable to connect to GitHub", + "Percorso non valido nel pacchetto: %s": "Invalid path in package: %s", + "Impossibile creare directory: %s": "Unable to create directory: %s", + "Errore nella copia del file: %s": "Error copying file: %s", + "Errore durante il controllo": "Error during check", + "Aggiornamento in corso...": "Updating...", + "Aggiornamento in corso. Riprova tra qualche minuto.": "Update in progress. Please try again in a few minutes.", + "Aggiornamento...": "Updating...", + "Aggiornamenti": "Updates", + "Aggiornata in base a scaffale, mensola e posizione.": "Updated based on shelf, rack and position.", + "Aggiornate %d righe": "Updated %d rows", + "Aggiungere una Nuova Lingua": "Adding a New Language", + "Aggiungi": "Add", + "Aggiungi Genere Rapido": "Quick Add Genre", + "Aggiungi Lingua": "Add Language", + "Aggiungi Nuova Lingua": "Add New Language", + "Aggiungi Nuovo Autore": "Add New Author", + "Aggiungi Nuovo Editore": "Add New Publisher", + "Aggiungi Nuovo Libro": "Add New Book", + "Aggiungi Prima Lingua": "Add First Language", + "Aggiungi Sottogenere": "Add Subgenre", + "Aggiungi ai Preferiti": "Add to Favorites", + "Aggiungi alla collezione": "Add to collection", + "Aggiungi eventuali note sul prestito": "Add any loan notes", + "Aggiungi eventuali note...": "Add any notes...", + "Aggiungi i libri che ti interessano dalla scheda di dettaglio per ricevere un promemoria quando tornano disponibili.": "Add books you're interested in from the detail page to receive a reminder when they become available.", + "Aggiungi la tua API key per interrogare Google Books quando importi un ISBN. Google viene utilizzato prima di Open Library, ma dopo Scraping Pro.": "Add your API key to query Google Books when importing an ISBN. Google is used before Open Library but after Scraping Pro.", + "Aggiungi le mensole (livelli) a ogni scaffale": "Add levels (shelves) to each bookcase", + "Aggiungi nuovo libro": "Add new book", + "Aggiungi primo libro": "Add first book", + "Aggiungi scaffali e mensole per la tua biblioteca": "Add shelves and racks for your library", + "Aggiungi un motivo (opzionale)": "Add a reason (optional)", + "Aggiungi un nuovo titolo per arricchire il catalogo di questo editore.": "Add a new title to enrich this publisher's catalog.", + "Aggiunto il": "Added on", + "Aiuto": "Help", + "Al momento non ci sono eventi attivi. Continua a seguirci per restare aggiornato sui prossimi appuntamenti.": "There are no active events at the moment. Keep following us to stay updated on upcoming appointments.", + "Al momento non ci sono eventi programmati. Torna a visitare questa pagina per scoprire i prossimi appuntamenti.": "There are currently no scheduled events. Come back to this page to discover upcoming events.", + "Al": "To", + "Al:": "To:", + "Alcune date richieste non sono disponibili": "Some requested dates are not available", + "Alcuni mancanti": "Some missing", + "Alcuni requisiti non sono soddisfatti. Risolvi i problemi prima di continuare.": "Some requirements are not met. Fix the issues before continuing.", + "Allegato": "Attachment", + "Almeno uno dei seguenti parametri è richiesto:": "At least one of the following parameters is required:", + "Altri eventi in programma": "Other upcoming events", + "Altri filtri": "More filters", + "Altro": "Other", + "Amministratore": "Administrator", + "Anno": "Year", + "Anno (YYYY)": "Year (YYYY)", + "Anno di Pubblicazione": "Publication Year", + "Anno di pubblicazione": "Publication year", + "Anno di Uscita": "Release Year", + "Anno max": "Year max", + "Anno min": "Year min", + "Anno numerico (usato per filtri e ordinamento)": "Numeric year (used for filters and sorting)", + "Anno pubblicazione": "Publication year", + "Anno pubblicazione a": "Publication year to", + "Anno pubblicazione da": "Publication year from", + "Anno:": "Year:", + "Annulla": "Cancel", + "Annulla prenotazione": "Cancel reservation", + "Annullare questa prenotazione?": "Cancel this reservation?", + "Annullata": "Cancelled", + "Annullato": "Cancelled", + "Anteprima": "Preview", + "Anteprima Banner": "Banner preview", + "Anteprima copertina": "Cover preview", + "Anteprima immagine caricata": "Uploaded image preview", + "Anteprima logo": "Logo preview", + "Anteprima non disponibile": "Preview not available", + "Anteprima:": "Preview:", + "Apparirà nei risultati di ricerca Google. Se vuoto, usa il titolo hero o il nome dell'app.": "Will appear in Google search results. If empty, uses the hero title or app name.", + "Apparirà sotto il titolo nei risultati di ricerca. Se vuoto, usa il sottotitolo hero o una descrizione generica.": "Will appear under the title in search results. If empty, uses the hero subtitle or a generic description.", + "Applica": "Apply", + "Applica Filtri": "Apply Filters", + "Applicazione Già Installata": "Application Already Installed", + "Applicazione configurata:": "Application configured:", + "Approva": "Approve", + "Approva Prestiti": "Approve Loans", + "Approva Prestito?": "Approve Loan?", + "Approva e Invia Email Attivazione": "Approve and Send Activation Email", + "Approva o rifiuta le recensioni degli utenti": "Approve or reject user reviews", + "Approva o rifiuta le richieste degli utenti": "Approve or reject user requests", + "Approva prestito?": "Approve loan?", + "Approva recensione": "Approve review", + "Approvata": "Approved", + "Approvata il": "Approved on", + "Approvato": "Approved", + "Approvato!": "Approved!", + "Approverai questa richiesta di prestito?": "Will you approve this loan request?", + "Apri": "Open", + "Apri Editor": "Open Editor", + "Apri Google Cloud Console": "Open Google Cloud Console", + "Apri file": "Open file", + "Apri menu": "Open menu", + "Archivia": "Archive", + "Archiviato": "Archived", + "Archivio": "Archive", + "Arricchimento automatico dati": "Automatic Data Enrichment", + "Artista": "Artist", + "Artista sconosciuto": "Unknown artist", + "Artisti": "Artists", + "Articolo": "Article", + "Ascolta Audiobook": "Listen to Audiobook", + "Ascolta l'audiobook": "Listen to the audiobook", + "Assicurati che corrisponda al tipo di carta per etichette che utilizzi.": "Make sure it matches the type of label paper you use.", + "Assicurati che il path assoluto dello script sia corretto": "Make sure the absolute path to the script is correct", + "Assicurati che sia configurato correttamente per evitare URL duplicati.": "Make sure it's configured correctly to avoid duplicate URLs.", + "At least one search parameter is required (ean, isbn13, isbn10, or author)": "At least one search parameter is required (ean, isbn13, isbn10, or author)", + "Attendere prego": "Please wait", + "Attendere prego...": "Please wait...", + "Attenzione": "Warning", + "Attenzione!": "Warning!", + "Attenzione:": "Warning:", + "Attenzione: %d prestiti in ritardo": "Warning: %d overdue loans", + "Attenzione: %d prestito in ritardo": "Warning: %d overdue loan", + "Attenzione: Azione Manuale Richiesta": "Warning: Manual Action Required", + "Attenzione: Non è stato possibile rimuovere tutte le copie richieste. Alcune copie sono attualmente in prestito.": "Warning: Could not remove all requested copies. Some copies are currently on loan.", + "Attivando questa modalità verranno disabilitati completamente i prestiti, le prenotazioni e la wishlist. Gli utenti potranno solo consultare il catalogo.": "Enabling this mode will completely disable loans, reservations and wishlist. Users will only be able to browse the catalogue.", + "Attiva": "Active", + "Attiva Direttamente": "Activate Directly", + "Attivato:": "Activated:", + "Attivi": "Active", + "Attività": "Activity", + "Attivo": "Active", + "Attivo:": "Active:", + "Attuale": "Current", + "Attualmente prestati": "Currently on loan", + "Audio": "Audio", + "Audio URL": "Audio URL", + "Audiobook": "Audiobook", + "Audiobook (MP3/M4A/OGG)": "Audiobook (MP3/M4A/OGG)", + "Audiobook caricato!": "Audiobook uploaded!", + "Audiobook disponibile": "Audiobook available", + "Aumenta Copie": "Increase Copies", + "Autenticazione": "Authentication", + "Auto": "Auto", + "Auto-attivazione: Se compili questo campo, il toggle \"Mostra Cookie Analitici\" in Privacy verrà attivato automaticamente.": "Auto-activation: If you fill this field, the \"Show Analytics Cookies\" toggle in Privacy will be automatically activated.", + "Auto-attivazione: Se compili questo campo, il toggle \"Mostra Cookie Marketing\" in Privacy verrà attivato automaticamente.": "Auto-activation: If you fill this field, the \"Show Marketing Cookies\" toggle in Privacy will be automatically activated.", + "Auto-detect se vuoto": "Auto-detect if empty", + "Automatismi": "Automations", + "Autore": "Author", + "Autore \"${normalizedLabel}\" pronto per essere creato": "Author \"${normalizedLabel}\" ready to be created", + "Autore \"${normalizedLabel}\" è già selezionato": "Author \"${normalizedLabel}\" is already selected", + "Autore \"%s\" pronto per essere creato": "Author \"%s\" ready to be created", + "Autore \"%s\" è già selezionato": "Author \"%s\" is already selected", + "Autore A-Z": "Author A-Z", + "Autore Z-A": "Author Z-A", + "Autore eliminato con successo.": "Author deleted successfully.", + "Autore principale": "Primary author", + "Autore sconosciuto": "Unknown author", + "Autore/i:": "Author(s):", + "Autore:": "Author:", + "Autori": "Authors", + "Autori con biografie": "Authors with biographies", + "Autori ed editori vengono creati automaticamente": "Authors and publishers are created automatically", + "Autori multipli separati da %s": "Multiple authors separated by %s", + "Autori multipli separati da %s o %s": "Multiple authors separated by %s or %s", + "Autori pubblicati": "Published Authors", + "Autori uniti": "Authors merged", + "Autori uniti con successo": "Authors merged successfully", + "Autori:": "Authors:", + "Avanti": "Next", + "Avanzate": "Advanced", + "Avvisi scadenza prestiti (configurabile in Impostazioni → Avanzate, default 3 giorni prima)": "Loan expiration warnings (configurable in Settings → Advanced, default 3 days before)", + "Avviso": "Warning", + "Azione richiesta:": "Action required:", + "Azioni": "Actions", + "Azioni Rapide": "Quick Actions", + "Azioni Veloci": "Quick Actions", + "Azioni di Approvazione": "Approval Actions", + "Azioni di Manutenzione": "Maintenance Actions", + "Azzera": "Clear", + "Backup": "Backup", + "Backup Automatico": "Automatic Backup", + "Backup creato con successo": "Backup created successfully", + "Backup disponibili": "Available backups", + "Backup e Sicurezza": "Backup and Security", + "I backup sono salvati in:": "Backups are saved in:", + "Backup fallito": "Backup failed", + "Backup Salvati": "Saved Backups", + "Backup eliminato": "Backup deleted", + "Backup non trovato": "Backup not found", + "Caricamento backup...": "Loading backups...", + "Crea un backup manuale o attendi il prossimo aggiornamento.": "Create a manual backup or wait for the next update.", + "Eliminare questo backup?": "Delete this backup?", + "Eliminazione in corso...": "Deleting...", + "Impossibile eliminare il backup": "Unable to delete backup", + "Impossibile leggere il file di backup": "Unable to read backup file", + "Nessun backup disponibile": "No backups available", + "Nome File": "File Name", + "Nome backup non specificato": "Backup name not specified", + "Nome backup non valido": "Invalid backup name", + "Barcode": "Barcode", + "Barra laterale": "Sidebar", + "Benvenuto": "Welcome", + "Benvenuto nell'Installer": "Welcome to the Installer", + "Benvenuto, %s!": "Welcome, %s!", + "Biblioteca": "Library", + "Biblioteca Digitale": "Digital Library", + "Biblioteca Digitale - La tua biblioteca online": "Digital Library - Your Online Library", + "Biblioteca Digitale - Scopri e Prenota i Tuoi Libri Preferiti": "Digital Library - Discover and Reserve Your Favorite Books", + "Biblioteca digitale con catalogo completo di libri disponibili per il prestito": "Digital library with complete catalog of books available for loan", + "Biografia": "Biography", + "Biografia dell'autore": "Author Biography", + "Bluesky": "Bluesky", + "Books": "Books", + "Breadcrumb": "Breadcrumb", + "Breve descrizione per i motori di ricerca": "Short description for search engines", + "Breve descrizione per i motori di ricerca (max 160 caratteri)": "Short description for search engines (max 160 characters)", + "Buono": "Good", + "CMS": "CMS", + "CSRF Fallito": "CSRF Failed", + "CSRF non valido.": "Invalid CSRF token.", + "CSS Personalizzato": "Custom CSS", + "CSV": "CSV", + "Calendario eventi": "Events calendar", + "Call to Action": "Call to Action", + "Call to Action (CTA)": "Call to Action (CTA)", + "Cambia lingua": "Change language", + "Cambia password": "Change password", + "Campo": "Field", + "Campo %s obbligatorio": "%s field required", + "Campo Obbligatorio": "Required Field", + "Campo obbligatorio": "Required field", + "Campo obbligatorio mancante: %s": "Missing required field: %s", + "Cancella filtri": "Clear filters", + "Cancella tutti i filtri": "Clear all filters", + "Caratteristica": "Feature", + "Carica": "Upload", + "Carica %{smart_count} file": "Upload %{smart_count} file", + "Carica Altri": "Load More", + "Carica File CSV": "Upload CSV File", + "Carica File JSON": "Upload JSON File", + "Carica Nuovo File JSON": "Upload New JSON File", + "Carica Plugin": "Upload Plugin", + "Carica il file JSON di traduzione (opzionale)": "Upload the translation JSON file (optional)", + "Carica il file usando l'uploader": "Upload the file using the uploader", + "Carica logo (PNG, JPG, SVG)": "Upload logo (PNG, JPG, SVG)", + "Carica o collega eBook (PDF/ePub) e audiobook (MP3/M4A) per renderli disponibili agli utenti.": "Upload or link eBooks (PDF/ePub) and audiobooks (MP3/M4A) to make them available to users.", + "Carica un file CSV per importare più libri contemporaneamente": "Upload a CSV file to import multiple books at once", + "Carica un file ZIP contenente il plugin. Il file deve includere un %s con le informazioni del plugin.": "Upload a ZIP file containing the plugin. The file must include a %s with the plugin information.", + "Carica un nuovo file per aggiornare le traduzioni (opzionale). Verrà creato un backup del file precedente.": "Upload a new file to update translations (optional). A backup of the previous file will be created.", + "Caricamento .env...": "Loading .env...", + "Caricamento categorie...": "Loading categories...", + "Caricamento completato": "Upload completed", + "Caricamento condizionale:": "Conditional loading:", + "Caricamento fallito": "Upload failed", + "Caricamento file...": "Uploading file...", + "Caricamento in corso...": "Uploading...", + "Caricamento libri...": "Loading books...", + "Caricamento non riuscito. Riprova.": "Upload failed. Please try again.", + "Caricamento...": "Loading...", + "Caroselli Generi": "Genre Carousels", + "Casa Editrice": "Publisher", + "Case editrici": "Publishing houses", + "Catalogo": "Catalog", + "Catalogo Completo Libri - Biblioteca Digitale": "Complete Book Catalog - Digital Library", + "Catalogo Libri": "Book Catalog", + "Catalogo Libri - Biblioteca": "Book Catalog - Library", + "Catalogo libri": "Book Catalog", + "Català (CA)": "Catalan (CA)", + "Categoria": "Category", + "Categorie": "Categories", + "Categorie Cookie": "Cookie Categories", + "Centro Impostazioni": "Settings Center", + "Cerca": "Search", + "Cerca IP...": "Search IP...", + "Cerca Libri": "Search Books", + "Cerca Libro": "Search Book", + "Cerca Utente": "Search User", + "Cerca autore...": "Search author...", + "Cerca codice o nome...": "Search code or name...", + "Cerca autori esistenti o aggiungine di nuovi...": "Search for existing authors or add new ones...", + "Cerca editore esistente o inserisci nuovo...": "Search for existing publisher or enter new...", + "Cerca editore...": "Search publisher...", + "Cerca email...": "Search email...", + "Cerca genere...": "Search genre...", + "Cerca icona... (es. user, home, book)": "Search icon... (e.g. user, home, book)", + "Cerca libri, autori, editori, utenti...": "Search books, authors, publishers, users...", + "Cerca libri, autori, editori...": "Search books, authors, publishers...", + "Cerca libri, autori...": "Search books, authors...", + "Cerca libri, autori, ISBN...": "Search books, authors, ISBN...", + "Cerca libri...": "Search books...", + "Cerca nella biblioteca": "Search the library", + "Cerca per ISBN-10": "Search by ISBN-10", + "Cerca per ISBN-13": "Search by ISBN-13", + "Cerca per codice EAN": "Search by EAN code", + "Cerca per nome autore (corrispondenza parziale)": "Search by author name (partial match)", + "Cerca per nome, cognome, telefono, email o tessera": "Search by name, surname, phone, email or card", + "Cerca per nome...": "Search by name...", + "Cerca per pseudonimo...": "Search by pseudonym...", + "Cerca pseudonimo...": "Search pseudonym...", + "Cerca per titolo o sottotitolo": "Search by title or subtitle", + "Cerca per titolo o stato (es. disponibile)": "Search by title or status (e.g. available)", + "Cerca posizione...": "Search location...", + "Cerca rapido...": "Quick search...", + "Cerca testo": "Search text", + "Cerca titoli": "Search Titles", + "Cerca titoli, autori, ISBN...": "Search titles, authors, ISBN...", + "Cerca:": "Search:", + "Chi Siamo": "About Us", + "Chiave": "Key", + "Chiave API Google Books": "Google Books API key", + "Chiave Google Books aggiornata.": "Google Books key updated.", + "Chiave Google Books rimossa.": "Google Books key removed.", + "Chiave Google Books salvata correttamente.": "Google Books key saved successfully.", + "Chiave Route": "Route Key", + "Chiedi al tuo amministratore di database di eseguire i comandi contenuti nel file": "Ask your database administrator to execute the commands contained in the file", + "Chiudi": "Close", + "Chiudi Player": "Close Player", + "Chiudi menu": "Close menu", + "Chiudi alternative": "Close alternatives", + "Citazione": "Quote", + "Città": "City", + "Classe (000-900)": "Class (000-900)", + "Classificazione Dewey": "Dewey Classification", + "Classi principali": "Main classes", + "classe principale": "main class", + "Clicca o trascina per caricare un logo": "Click or drag to upload a logo", + "Clicca per selezionare": "Click to select", + "Clicca su \"Esegui Manutenzione\" per correggere automaticamente i problemi riparabili.": "Click \"Run Maintenance\" to automatically fix repairable issues.", + "Clicca su 'Aggiungi Lingua'": "Click on 'Add Language'", + "Clicca su \\": "Click on \\", + "Clicca su un'icona per selezionarla": "Click on an icon to select it", + "Codice": "Code", + "Codice *": "Code *", + "Codice CSS": "CSS Code", + "Codice CSS da applicare a tutte le pagine del frontend": "CSS code to apply to all frontend pages", + "Codice Dewey selezionato:": "Selected Dewey code:", + "Codice Fiscale": "Tax ID", + "Codice ISBN o EAN": "ISBN or EAN Code", + "Codice ISO 2 lettere (es: IT, FR, GB)": "ISO 2-letter code (e.g. IT, FR, GB)", + "Codice JavaScript": "JavaScript Code", + "Codice JavaScript Analytics": "Analytics JavaScript Code", + "Codice Lingua": "Language Code", + "Codice Tessera": "Card Number", + "Codice Tessera:": "Membership Code:", + "Codice embed completo": "Full embed code", + "Codice fiscale": "Tax code", + "Codice fiscale dell'editore (opzionale)": "Publisher's tax code (optional)", + "Codice fiscale italiano (opzionale)": "Italian tax ID (optional)", + "Codice postale...": "ZIP code...", + "Codice tessera": "Card Code", + "Cognome": "Last Name", + "Collana": "Series", + "Collocazione": "Location", + "Collocazione calcolata": "Calculated location", + "Collocazione suggerita": "Suggested location", + "Segui l'installazione guidata per completare la configurazione.": "Follow the guided installation to complete the configuration.", + "Come Funziona": "How It Works", + "Come ottenere il codice": "How to get the code", + "Commento": "Comment", + "Compila con i dati dei tuoi libri": "Fill in with your book data", + "Compila i dettagli del libro per aggiungerlo alla biblioteca": "Fill in the book details to add it to the library", + "Compila i dettagli dell'autore per aggiungerlo alla biblioteca": "Fill in the author details to add them to the library", + "Compila i dettagli della casa editrice per aggiungerla alla biblioteca": "Fill in the publishing house details to add it to the library", + "Compila tutti i campi obbligatori prima di salvare.": "Fill in all required fields before saving.", + "Compila tutti i campi per creare una nuova prenotazione": "Fill in all fields to create a new reservation", + "Compila tutti i campi richiesti": "Fill in all required fields", + "Compila nome e URL per tutti i server.": "Fill in name and URL for all servers.", + "Completamento": "Completion", + "Completata": "Completed", + "Completati": "Completed", + "Completato": "Completed", + "Completato!": "Completed!", + "Complimenti!": "Congratulations!", + "Componente": "Component", + "Con valore 3, un prestito che scade il 15 Gennaio riceverà l'avviso il 12 Gennaio": "With value 3, a loan expiring on January 15 will receive the notice on January 12", + "Condividi": "Share", + "Condividi la tua opinione su questo libro...": "Share your opinion about this book...", + "Condividi su Facebook": "Share on Facebook", + "Condividi su Twitter": "Share on Twitter", + "Condividi su WhatsApp": "Share on WhatsApp", + "Condiviso": "Shared", + "Condizioni": "Conditions", + "Consegna immediata": "Immediate delivery", + "Conferma": "Confirm", + "Conferma Aggiornamento": "Confirm Update", + "Conferma aggiornamento": "Confirm update", + "Controlla Aggiornamenti": "Check for Updates", + "Controllo aggiornamenti": "Checking for updates", + "Crea Backup Manuale": "Create Manual Backup", + "Creazione backup database": "Creating database backup", + "Creazione backup...": "Creating backup...", + "Creare backup?": "Create backup?", + "Cronologia Aggiornamenti": "Update History", + "Conferma Annullamento": "Confirm Cancellation", + "Conferma Disinstallazione": "Confirm Uninstallation", + "Conferma eliminazione": "Confirm deletion", + "Conferma Password": "Confirm Password", + "Conferma Salvataggio": "Confirm Save", + "Conferma la tua email": "Confirm your email", + "Conferma modifica": "Confirm change", + "Conferma password": "Confirm password", + "Conferma restituzione": "Confirm return", + "Confermi l'eliminazione dell'editore?": "Confirm publisher deletion?", + "Confermi l'operazione?": "Confirm the operation?", + "Confermi?": "Confirm?", + "Configura Google Books": "Configure Google Books", + "Configura i testi mostrati all'interno del pannello delle preferenze dei cookie.": "Configure the texts shown inside the cookie preferences panel.", + "Configura i testi visualizzati agli utenti in ogni parte del cookie banner.": "Configure the texts displayed to users in every part of the cookie banner.", + "Configura i testi visualizzati agli utenti nel banner iniziale.": "Configure the texts displayed to users in the initial banner.", + "Configura l'identità dell'applicazione, i metodi di invio email e personalizza i template delle notifiche automatiche.": "Configure application identity, email sending methods and customize automatic notification templates.", + "Configura le date della prenotazione": "Configure reservation dates", + "Configura le impostazioni email per l'invio di notifiche agli utenti.": "Configure email settings for sending notifications to users.", + "Configura le impostazioni rimanenti (privacy, contatti, etc.)": "Configure the remaining settings (privacy, contacts, etc.)", + "Configura quando inviare l'avviso di scadenza prestiti agli utenti": "Configure when to send loan expiry warning to users", + "Configurazione": "Configuration", + "Configurazione Cron Job": "Cron Job Configuration", + "Configurazione Database": "Database Configuration", + "Configurazione Email": "Email Configuration", + "Configurazione Etichette Libri": "Book Labels Configuration", + "Configurazione SMTP": "SMTP Configuration", + "Configurazione del banner cookie": "Cookie banner configuration", + "Configurazione guidata in pochi passaggi.": "Guided configuration in a few steps.", + "Configurazione invio": "Sending Configuration", + "Configurazione sistema": "System configuration", + "Connessione al database fallita": "Database connection failed", + "Connessione fallita": "Connection failed", + "Connesso": "Connected", + "Conserva queste informazioni in un luogo sicuro!": "Keep this information in a safe place!", + "Consigliato": "Recommended", + "Consigliato JPG o PNG ad alta risoluzione (min 1920x1080px). Max 5MB.": "Recommended high-resolution JPG or PNG (min 1920x1080px). Max 5MB.", + "Consigliato JPG, PNG o WebP (min 800x600px). Max 5MB.": "Recommended JPG, PNG or WebP (min 800x600px). Max 5MB.", + "Consigliato PNG o SVG con sfondo trasparente. Dimensione massima 2MB.": "Recommended PNG or SVG with transparent background. Maximum size 2MB.", + "Consigliato: 150-160 caratteri": "Recommended: 150-160 characters", + "Consigliato: 50-60 caratteri": "Recommended: 50-60 characters", + "Consigliato: PHP mail() per semplicità, SMTP per maggiore controllo": "Recommended: PHP mail() for simplicity, SMTP for more control", + "Contatta il tuo provider di hosting e chiedi di eseguire": "Contact your hosting provider and ask them to run", + "Contattaci": "Contact Us", + "Contatti": "Contacts", + "Contatti e accesso": "Contacts and Access", + "Contenuti Digitali": "Digital Content", + "Contenuti homepage aggiornati con successo!": "Homepage content updated successfully!", + "Contenuto": "Content", + "Contenuto Cookie Policy": "Cookie Policy Content", + "Contenuto Pagina": "Page Content", + "Contenuto Privacy Policy": "Privacy Policy Content", + "Contenuto Testuale": "Text Content", + "Contenuto della pagina /cookies accessibile dal banner": "Content of /cookies page accessible from banner", + "Contenuto pagina": "Page content", + "Contenuto testuale HTML con editor avanzato": "HTML text content with advanced editor", + "Continua": "Continue", + "Cookie Analitici": "Analytics Cookies", + "Cookie Banner": "Cookie Banner", + "Cookie Essenziali": "Essential Cookies", + "Cookie di Marketing": "Marketing Cookies", + "Cookies": "Cookies", + "Copertina": "Cover", + "Copertina Attuale": "Current Cover", + "Copertina attuale": "Current cover", + "Copertina del Libro": "Book Cover", + "Copertina del libro": "Book cover", + "Copertina recuperata automaticamente": "Cover automatically retrieved", + "Copia": "Copy", + "Copia link negli appunti": "Copy link to clipboard", + "Copiato!": "Copied!", + "Copie": "Copies", + "Copie Aggiunte!": "Copies Added!", + "Copie Disponibili": "Available Copies", + "Copie Eccessive": "Excess Copies", + "Copie Fisiche": "Physical Copies", + "Copie Negative": "Negative Copies", + "Copie Totali": "Total Copies", + "Copie disponibili:": "Available copies:", + "Copie totali:": "Total copies:", + "Copyright": "Copyright", + "Corpo Email": "Email Body", + "Corpo email": "Email body", + "Correggi Permessi Automaticamente": "Fix Permissions Automatically", + "Corrente": "Current", + "Correzione Automatica Permessi": "Auto-fix Permissions", + "Correzione Manuale via SSH (se automatica fallisce)": "Manual Fix via SSH (if automatic fails)", + "Correzione parziale:": "Partial fix:", + "Correzioni applicate: %d record aggiornati": "Corrections applied: %d records updated", + "Cos'è la Collocazione?": "What is Location?", + "Cosa fare:": "What to do:", + "Cosa ne pensi di questo libro?": "What do you think about this book?", + "Cosa sono le Route?": "What are Routes?", + "Cosa viene nascosto:": "What will be hidden:", + "Crea": "Create", + "Crea API Key": "Create API Key", + "Crea Admin": "Create Admin", + "Crea Evento": "Create Event", + "Crea Nuova API Key": "Create New API Key", + "Crea Nuova Prenotazione": "Create New Reservation", + "Crea Nuovo Evento": "Create New Event", + "Crea Nuovo Genere": "Create New Genre", + "Crea Nuovo Prestito": "Create New Loan", + "Crea Prenotazione": "Create Reservation", + "Crea Prestito": "Create Loan", + "Crea Prima API Key": "Create First API Key", + "Crea Primo Genere": "Create First Genre", + "Crea Utente Admin": "Create Admin User", + "Crea Utente Amministratore": "Create Administrator User", + "Crea e gestisci gli eventi della biblioteca": "Create and manage library events", + "Crea gli scaffali (es: A, B, C)": "Create shelves (e.g.: A, B, C)", + "Crea il primo utente amministratore. Questo account avrà accesso completo a tutte le funzionalità del sistema.": "Create the first administrator user. This account will have full access to all system features.", + "Crea il tuo primo evento": "Create your first event", + "Crea la cartella logs se non esiste: mkdir -p logs": "Create the logs folder if it doesn't exist: mkdir -p logs", + "Crea nuovo": "Create new", + "Crea nuovo \"${item.label}\"": "Create new \"${item.label}\"", + "Crea un nuovo account": "Create a new account", + "Crea un nuovo profilo amministratore o lettore.": "Create a new administrator or reader profile.", + "Creata:": "Created:", + "Creato il": "Created on", + "Credenziali Admin:": "Admin Credentials:", + "Credenziali Errate": "Invalid Credentials", + "Crediti": "Credits", + "Crescente": "Ascending", + "Crittografia": "Encryption", + "Cronologia": "History", + "Da": "From", + "Da Inventariare": "To Be Inventoried", + "Da approvare": "To approve", + "Da consegnare": "To deliver", + "Da creare": "To be created", + "Da prenotazione": "From reservation", + "Da prenotazioni": "From reservations", + "Da %s (%s)": "From %s (%s)", + "Da qui puoi gestire tutte le lingue disponibili nell'applicazione. Carica file JSON di traduzione e abilita/disabilita lingue.": "From here you can manage all available languages in the application. Upload JSON translation files and enable/disable languages.", + "Dal": "From", + "Dal %s al %s": "From %s to %s", + "Dal:": "From:", + "Danneggiato": "Damaged", + "Dansk (DA)": "Danish (DA)", + "Dashboard": "Dashboard", + "Data": "Date", + "Data Acq.": "Acq. Date", + "Data Acquisizione": "Acquisition Date", + "Data Evento": "Event Date", + "Data Fine": "End Date", + "Data Inizio": "Start Date", + "Data Prenotazione": "Reservation Date", + "Data Prestito": "Loan Date", + "Data Prestito:": "Loan Date:", + "Data Pubblicazione": "Publication Date", + "Data Restituzione:": "Return Date:", + "Data Scadenza": "Due Date", + "Data Scadenza:": "Due Date:", + "Data acquisizione": "Acquisition date", + "Data acquisizione a": "Acquisition date to", + "Data acquisizione da": "Acquisition date from", + "Data di Pubblicazione": "Publication Date", + "Data di inizio della prenotazione (default: oggi)": "Reservation start date (default: today)", + "Data di morte": "Date of Death", + "Data di nascita": "Date of Birth", + "Data di pubblicazione": "Publication date", + "Data di scadenza della prenotazione (default: +30 giorni)": "Reservation expiry date (default: +30 days)", + "Data fine": "End date", + "Data inizio": "Start date", + "Data inizio richiesta mancante": "Request start date missing", + "Data morte a": "Death date to", + "Data morte da": "Death date from", + "Data nascita a": "Birth date to", + "Data nascita da": "Birth date from", + "Data originale di pubblicazione (formato italiano)": "Original publication date (Italian format)", + "Data prestito": "Loan date", + "Data prestito (A)": "Loan date (To)", + "Data prestito (Da)": "Loan date (From)", + "Data pubblicazione da": "Publication date from", + "Data scadenza prevista": "Expected due date", + "Data:": "Date:", + "Database installato (30 tabelle)": "Database installed (30 tables)", + "Database:": "Database:", + "Date": "Dates", + "Date Non Valide": "Invalid Dates", + "Dati Account": "Account Data", + "Dati bibliografici completi (titolo, sottotitolo, ISBN, EAN, ecc.)": "Complete bibliographic data (title, subtitle, ISBN, EAN, etc.)", + "Dati della Prenotazione": "Reservation Details", + "Dati essenziali caricati": "Essential data loaded", + "Database installato (41 tabelle)": "Database installed (41 tables)", + "Dati iniziali importati OK": "Initial data imported OK", + "Dati mancanti": "Missing data", + "Dati personali": "Personal data", + "Dati Utente": "User Details", + "Debug": "Debug", + "Debug Log:": "Debug Log:", + "Deceduto il %s": "Died on %s", + "Decrescente": "Descending", + "Default: un mese dopo la data inizio": "Default: one month after start date", + "Definisce i privilegi dell'utente.": "Defines user privileges.", + "Demo": "Demo", + "Deseleziona tutti": "Deselect all", + "Decimali": "Decimals", + "Descrivi l'utilizzo di questa API key...": "Describe the usage of this API key...", + "Descrizione": "Description", + "Descrizione Banner": "Banner Description", + "Descrizione Evento": "Event Description", + "Descrizione Modale": "Modal Description", + "Descrizione OG": "OG Description", + "Descrizione Open Graph": "Open Graph Description", + "Descrizione SEO": "SEO Description", + "Descrizione Twitter": "Twitter Description", + "Descrizione banner": "Banner description", + "Descrizione breve": "Short description", + "Descrizione completa dell'evento con possibilità di formattazione HTML": "Full event description with HTML formatting options", + "Descrizione cookie analitici": "Analytics cookies description", + "Descrizione cookie essenziali": "Essential cookies description", + "Descrizione cookie marketing": "Marketing cookies description", + "Descrizione del libro...": "Book description...", + "Descrizione footer": "Footer description", + "Descrizione modale": "Modal description", + "Descrizione nella modale preferenze. Puoi usare HTML.": "Description in the preferences modal. You can use HTML.", + "Descrizione per anteprima social. Se vuoto, usa la descrizione SEO.": "Description for social preview. If empty, uses the SEO description.", + "Descrizione troppo lunga (max 2000 caratteri)": "Description too long (max 2000 characters)", + "Descrizione:": "Description:", + "Dettagli": "Details", + "Dettagli Acquisizione": "Acquisition Details", + "Dettagli Fisici": "Physical Details", + "Dettagli Libro": "Book Details", + "Dettagli Messaggio": "Message Details", + "Dettagli del Prestito": "Loan Details", + "Dettagli evento": "Event details", + "Dettagli principali dell'evento": "Main event details", + "Dettagli restituzione": "Return details", + "Deutsch (DE)": "German (DE)", + "Deve contenere maiuscole, minuscole e numeri": "Must contain uppercase, lowercase and numbers", + "Deve iniziare con": "Must start with", + "Devi accettare la Privacy Policy per procedere": "You must accept the Privacy Policy to proceed", + "Devi eseguire": "You must run", + "Dewey": "Dewey", + "Dimensione": "Size", + "Dimensioni": "Dimensions", + "Dipendenze": "Dependencies", + "Directory plugin già esistente.": "Plugin directory already exists.", + "Disabilita": "Disable", + "Disabilita se il tuo sito non usa cookie analitici (es. Google Analytics)": "Disable if your site doesn't use analytics cookies (e.g. Google Analytics)", + "Disabilita se il tuo sito non usa cookie di marketing/advertising": "Disable if your site doesn't use marketing/advertising cookies", + "Disabilitata - Nascosta nel frontend": "Disabled - Hidden in frontend", + "Disabilitata": "Disabled", + "Disabilita prestiti, prenotazioni e wishlist. Gli utenti potranno solo consultare il catalogo.": "Disable loans, reservations and wishlist. Users will only be able to browse the catalogue.", + "Disabilita tutte le funzionalità di prestito e prenotazione": "Disable all loan and reservation features", + "Disabilitato": "Disabled", + "Disattiva": "Deactivate", + "Disattiva modalità manutenzione": "Disable maintenance mode", + "Disattivata": "Inactive", + "Discografia": "Discography", + "Disconnesso": "Disconnected", + "Disinstalla": "Uninstall", + "Divisioni": "Divisions", + "Disponibile": "Available", + "Disponibile dal:": "Available from:", + "Disponibile ora": "Available Now", + "Disponibile per il prestito.": "Available for loan.", + "Disponibile solo con driver SMTP": "Available only with SMTP driver", + "Disponibili": "Available", + "Disponibili e in prestito": "Available and on loan", + "Disponibilità": "Availability", + "Disponibilità copie": "Copy availability", + "Divisione (010-990)": "Division (010-990)", + "Documentazione": "Documentation", + "Documentazione API": "API Documentation", + "Documento": "Document", + "Documento generato il %s alle %s": "Document generated on %s at %s", + "Donazione": "Donation", + "Dopo la conferma, un amministratore approverà la tua iscrizione.": "After confirmation, an administrator will approve your registration.", + "Dopo la rigenerazione, invia l'URL della sitemap a Google Search Console e Bing Webmaster Tools": "After regeneration, submit sitemap URL to Google Search Console and Bing Webmaster Tools", + "Driver": "Driver", + "Driver Email": "Email Driver", + "EAN": "EAN", + "EAN:": "EAN:", + "ERRORE:": "ERROR:", + "Eccellente": "Excellent", + "Editor Classificazione Dewey": "Dewey Classification Editor", + "Editore": "Publisher", + "Editore \"${item.label}\" selezionato": "Publisher \"${item.label}\" selected", + "Editore \"${value}\" pronto per essere creato": "Publisher \"${value}\" ready to be created", + "Editore \"%s\" pronto per essere creato": "Publisher \"%s\" ready to be created", + "Editore \"%s\" selezionato": "Publisher \"%s\" selected", + "Editore eliminato con successo.": "Publisher deleted successfully.", + "Editore sconosciuto": "Unknown publisher", + "Editore selezionato:": "Selected publisher:", + "Editore trovato:": "Publisher found:", + "Editore:": "Publisher:", + "Editore: %s": "Publisher: %s", + "Editori": "Publishers", + "Editori uniti": "Publishers merged", + "Editori uniti con successo": "Publishers merged successfully", + "Editore principale": "Primary publisher", + "Edizione": "Edition", + "Elaborato da": "Processed by", + "Elementi": "Items", + "Elenco Autori": "Authors List", + "Elenco Autori - Biblioteca": "Author List - Library", + "Elenco Editori": "Publishers List", + "Elenco Editori - Biblioteca": "Publisher List - Library", + "Elenco Libri": "Books List", + "Elenco Libri - Biblioteca": "Book List - Library", + "Elenco Prestiti": "Loans List", + "Elenco Utenti": "Users List", + "Elenco Utenti - Biblioteca": "Users List - Library", + "Elimina": "Delete", + "Elimina Installer": "Delete Installer", + "Elimina Installer (Richiede Composer)": "Delete Installer (Requires Composer)", + "Elimina Lingua": "Delete Language", + "Elimina copia": "Delete copy", + "Elimina il file .installed dalla root del progetto e riprova": "Delete the .installed file from the project root and try again", + "Elimina questa lingua. Questa azione non può essere annullata.": "Delete this language. This action cannot be undone.", + "Eliminare il libro?": "Delete book?", + "Eliminare l'utente?": "Delete the user?", + "Eliminare questa mensola? (Solo se vuota)": "Delete this shelf? (Only if empty)", + "Eliminare questo scaffale? (Solo se vuoto)": "Delete this bookcase? (Only if empty)", + "Eliminato!": "Deleted!", + "Eliminati": "Deleted", + "Email": "Email", + "Email *": "Email *", + "Email Contatto": "Contact Email", + "Email Non Valida": "Invalid Email", + "Email Non Verificata": "Unverified Email", + "Email Referente": "Contact Person Email", + "Email associata al tuo account": "Email associated with your account", + "Email configurata": "Email configured", + "Email di contatto": "Contact email", + "Email di recupero inviata con successo!": "Recovery email sent successfully!", + "Email dove ricevere i messaggi dal form contatti": "Email where to receive messages from contact form", + "Email e telefono visibili sulla pagina contatti": "Email and phone visible on contact page", + "Email già registrata": "Email already registered", + "Email non trovata nel nostro sistema": "Email not found in our system", + "Email non valida. Verifica il formato": "Invalid email. Check the format", + "Email non verificata. Controlla la tua casella di posta e clicca sul link di verifica": "Email not verified. Check your inbox and click the verification link", + "Email o password non corretti. Verifica le credenziali e riprova": "Email or password incorrect. Check your credentials and try again", + "Email per notifiche": "Email for notifications", + "Email troppo lunga (massimo 255 caratteri)": "Email too long (maximum 255 characters)", + "Email utente": "User email", + "Email:": "Email:", + "Embed della mappa (Google Maps o OpenStreetMap). Puoi inserire l'URL o il codice iframe completo.": "Map embed (Google Maps or OpenStreetMap). You can insert the URL or full iframe code.", + "Emoji Bandiera": "Flag Emoji", + "Emoji della bandiera del paese (opzionale)": "Country flag emoji (optional)", + "Emoji della bandiera del paese (opzionale, default: 🌐)": "Country flag emoji (optional, default: 🌐)", + "Encryption": "Encryption", + "Endpoint": "Endpoint", + "Es. Italiana...": "E.g. Italian...", + "Es. Milano...": "E.g. Milan...", + "English (EN)": "English (EN)", + "Errore": "Error", + "Errore Installazione": "Installation Error", + "Errore Upload": "Upload Error", + "Errore caricamento Audiobook": "Audiobook upload error", + "Errore caricamento classificazione Dewey": "Error loading Dewey classification", + "Errore caricamento eBook": "eBook upload error", + "Errore database:": "Database error:", + "Errore del Server": "Server Error", + "Errore del database": "Database error", + "Errore del database durante la registrazione. Riprova più tardi": "Database error during registration. Please try again later", + "Errore del server": "Server error", + "Errore del server. Riprova più tardi.": "Server error. Please try again later.", + "Errore di comunicazione con il server": "Server communication error", + "Errore di configurazione del server.": "Server configuration error.", + "Errore di configurazione.": "Configuration error.", + "Errore di connessione": "Connection error", + "Errore di connessione durante l'importazione": "Connection error during import", + "Errore di connessione:": "Connection error:", + "Errore di salvataggio": "Save error", + "Errore di sicurezza": "Security error", + "Errore di sicurezza, riprova": "Security error, try again", + "Errore di sicurezza. Aggiorna la pagina e riprova": "Security error. Refresh the page and try again", + "Errore di sicurezza. Ricarica la pagina e riprova.": "Security error. Reload the page and try again.", + "Errore di sistema.": "System error.", + "Errore durante il caricamento dei dettagli del plugin.": "Error loading plugin details.", + "Errore durante il caricamento del file (code: %s).": "Error uploading file (code: %s).", + "Errore durante il caricamento del file.": "Error during file upload.", + "Errore durante il ricalcolo:": "Error during recalculation:", + "Errore durante il rifiuto": "Error during rejection", + "Errore durante il salvataggio": "Error while saving", + "Errore durante il salvataggio delle impostazioni:": "Error saving settings:", + "Errore durante il salvataggio nel database.": "Error saving to database.", + "Errore durante il salvataggio.": "Error during save.", + "Errore durante il salvataggio:": "Error during save:", + "Errore durante il seed": "Error during seed", + "Errore durante l'aggiornamento": "Error during update", + "Errore durante l'aggiornamento dell'evento.": "Error updating event.", + "Errore durante l'aggiornamento della chiave Google Books.": "Error updating Google Books key.", + "Errore durante l'approvazione": "Error during approval", + "Errore durante l'attivazione del plugin.": "Error activating plugin.", + "Errore durante l'attivazione: %s": "Error during activation: %s", + "Errore durante l'eliminazione dell'evento.": "Error deleting event.", + "Errore durante l'estrazione del plugin.": "Error extracting plugin.", + "Errore durante l'import: %s": "Import error: %s", + "Errore durante l'importazione (HTTP %d)": "Import error (HTTP %d)", + "Errore durante l'importazione dati": "Error during data import", + "Errore durante l'installazione del plugin.": "Error installing plugin.", + "Errore durante l'installazione:": "Error during installation:", + "Errore durante l'installazione: %s": "Error during installation: %s", + "Errore durante l'invio dell'email. Riprova più tardi": "Error sending the email. Please try again later", + "Errore durante l'unione degli autori": "Error merging authors", + "Errore durante l'unione degli editori": "Error merging publishers", + "Errore imprevisto durante l'unione degli autori": "Unexpected error merging authors", + "Errore imprevisto durante l'unione degli editori": "Unexpected error merging publishers", + "Errore durante l'upload.": "Upload error.", + "Errore durante la correzione:": "Error during correction:", + "Errore durante la creazione del prestito.": "Error creating the loan.", + "Errore durante la creazione dell'evento.": "Error creating event.", + "Errore durante la creazione dell'utente:": "Error during user creation:", + "Errore durante la disattivazione del plugin.": "Error during plugin deactivation.", + "Errore durante la disattivazione: %s": "Error during deactivation: %s", + "Errore durante la disinstallazione del plugin.": "Error during plugin uninstallation.", + "Errore durante la finalizzazione:": "Error during finalization:", + "Errore durante la manutenzione:": "Error during maintenance:", + "Errore durante la registrazione": "Registration error", + "Errore durante la ricerca su": "Error during search on", + "Errore durante la rimozione dal database.": "Error removing from database.", + "Errore interno del database. Riprova più tardi.": "Internal database error. Please try again later.", + "Errore interno durante l'approvazione": "Internal error during approval", + "Errore interno: %s": "Internal error: %s", + "Errore nel caricamento dei libri": "Error loading books", + "Errore nel caricamento del file": "Error while uploading the file", + "Aggiunge badge cliccabili alla scheda libro per cercare su Anna's Archive, Z-Library e Project Gutenberg con un click. Ispirato all'estensione browser GoodLib.": "Adds clickable badges to the book detail page to search on Anna's Archive, Z-Library, and Project Gutenberg in one click. Inspired by the GoodLib browser extension.", + "Anna's Archive": "Anna's Archive", + "Catalogo pubblico": "Public catalog", + "Configura Fonti": "Configure Sources", + "Domini mirror": "Mirror domains", + "Dominio non valido. Inserisci solo host o host:porta, senza percorsi.": "Invalid domain. Enter only host or host:port, without paths.", + "Dominio personalizzato...": "Custom domain...", + "Errore durante l'aggiornamento del profilo.": "Error updating profile.", + "Cerca su:": "Search on:", + "Predefinita del sito": "Site default", + "Cerca \"%s\" su %s": "Search \"%s\" on %s", + "Fonti attive": "Active sources", + "GoodLib — External Sources": "GoodLib — External Sources", + "GoodLib — Fonti Esterne": "GoodLib — External Sources", + "Impostazioni GoodLib salvate correttamente.": "GoodLib settings saved successfully.", + "Mostra badge nella pagina dettaglio libro": "Show badges on the book detail page", + "Mostra badge nell'area amministrazione": "Show badges in the admin area", + "Mostra i badge nella pagina dettaglio libro del catalogo": "Show badges on the catalog book detail page", + "Mostra i badge nella scheda libro dell'area amministrazione": "Show badges on the admin book page", + "Project Gutenberg": "Project Gutenberg", + "Puoi scegliere un mirror suggerito oppure selezionare dominio personalizzato.": "You can choose a suggested mirror or select a custom domain.", + "Puoi usare i mirror suggeriti oppure inserire un dominio custom.": "You can use the suggested mirrors or enter a custom domain.", + "Questi siti cambiano dominio spesso. Seleziona un mirror funzionante.": "These sites often change domain. Select a working mirror.", + "Scheda libro admin": "Admin book page", + "Sono accettati anche domini personalizzati; se incolli un URL completo verrà salvato solo l'host.": "Custom domains are also accepted; if you paste a full URL, only the host will be saved.", + "Visibilita": "Visibility", + "Visibilità": "Visibility", + "Z-Library": "Z-Library", + "Errore nel caricamento del file JSON": "Error loading JSON file", + "Errore nel caricamento. Riprova.": "Error loading. Please try again.", + "Errore nel download della copertina.": "Error downloading the cover.", + "Errore nel recupero delle categorie.": "Error fetching the categories.", + "Errore nel recupero delle divisioni.": "Error fetching the divisions.", + "Errore nel recupero delle specifiche.": "Error fetching the specific sections.", + "Errore nel rifiuto": "Error in rejection", + "Errore nel rifiuto della richiesta": "Error while rejecting the request", + "Errore nel salvataggio dell'immagine.": "Error saving the image.", + "Errore nel salvataggio dell'ordine. Ricarica la pagina e riprova.": "Error saving order. Please reload the page and try again.", + "Errore nell'aggiornamento del template": "Error updating template", + "Errore nell'aggiornamento dello stato dell'API key: %s": "Error updating API key status: %s", + "Errore nell'aggiornamento:": "Error updating:", + "Errore nell'aggiornare i preferiti.": "Error updating favorites.", + "Errore nell'approvazione": "Error in approval", + "Errore nell'eliminazione dell'API key: %s": "Error deleting API key: %s", + "Errore nell'eliminazione:": "Error deleting:", + "Errore nell'operazione:": "Error in operation:", + "Errore nella Verifica dell'Installazione": "Installation Verification Error", + "Errore nella comunicazione con il server": "Server communication error", + "Errore nella copia:": "Copy error:", + "Errore nella copia: ": "Copy error: ", + "Errore nella creazione del genere.": "Error while creating the genre.", + "Errore nella creazione dell'API key: %s": "Error creating API key: %s", + "Errore nella creazione della recensione": "Error creating review", + "Errore nella creazione della richiesta di prestito": "Error creating loan request", + "Errore nella creazione:": "Error creating:", + "Errore nella prenotazione": "Reservation error", + "Errore nella query.": "Query error.", + "Errore nella ricerca": "Search error", + "Errore suggerimento": "Suggestion error", + "Errore!": "Error!", + "Errore:": "Error:", + "Errore: ": "Error: ", + "Errore: Utente non trovato": "Error: User not found", + "Errore: la data di scadenza deve essere successiva alla data di prestito.": "Error: the due date must be after the loan date.", + "Errore: tutti i campi obbligatori devono essere compilati.": "Error: all required fields must be filled.", + "Errori durante l'import": "Import Errors", + "Errori di validazione dopo il merge.": "Validation errors after merge.", + "Es. Biblioteca Digitale - Migliaia di libri da esplorare": "E.g. Digital Library - Thousands of books to explore", + "Es. Esplora migliaia di libri, prenota online e gestisci i tuoi prestiti.": "E.g. Explore thousands of books, book online and manage your loans.", + "Es. Italiana, Americana, Francese...": "E.g. Italian, American, French...", + "Es. Italiana, Americana...": "E.g. Italian, American...", + "Es. La Tua Biblioteca Digitale": "E.g. Your Digital Library", + "Es. Presentazione libro \"Il Nome della Rosa\"": "E.g. Book presentation \"The Name of the Rose\"", + "Es. Scopri il nostro catalogo digitale con migliaia di libri disponibili per il prestito. Registrati gratuitamente e inizia a leggere oggi stesso.": "E.g. Discover our digital catalog with thousands of books available for loan. Register for free and start reading today.", + "Es. Un libro fantastico!": "E.g. An amazing book!", + "Es. Un libro straordinario!": "E.g. An extraordinary book!", + "Es. biblioteca digitale, prestito libri, catalogo online, libri gratis": "E.g. digital library, book loan, online catalog, free books", + "Es. https://tuosito.com": "E.g. https://yoursite.com", + "Es. https://tuosito.com/uploads/og-image.jpg": "E.g. https://yoursite.com/uploads/og-image.jpg", + "Esci": "Logout", + "Esecuzione ogni 30 minuti (consigliato)": "Execute every 30 minutes (recommended)", + "Esecuzione ogni ora (8:00-20:00)": "Execute every hour (8:00-20:00)", + "Esegue la rigenerazione ogni giorno alle 02:00 e registra il log in": "Runs regeneration daily at 02:00 and logs to", + "Esegue la rigenerazione ogni giorno alle 02:00 e registra il log in storage/logs/sitemap.log.": "Executes regeneration daily at 02:00 and logs to storage/logs/sitemap.log.", + "Esegui": "Run", + "Esegui Manutenzione": "Run Maintenance", + "Eseguito da": "Executed by", + "Esempio": "Example", + "Esempio di Chiamata": "Request Example", + "Esempio route inglese:": "English route example:", + "Esempio route italiana:": "Italian route example:", + "Esempio:": "Example:", + "Esistente": "Existing", + "Esito restituzione": "Return outcome", + "Español (ES)": "Spanish (ES)", + "Esplora Catalogo": "Explore Catalog", + "Esplora catalogo": "Browse Catalog", + "Esplora e gestisci gli autori della biblioteca": "Explore and manage library authors", + "Esplora e gestisci gli editori della biblioteca": "Explore and manage library publishers", + "Esplora e gestisci gli utenti registrati alla biblioteca": "Explore and manage registered library users", + "Esplora e gestisci la collezione della biblioteca": "Explore and manage the library collection", + "Esplora i generi principali": "Explore the main genres", + "Esplora il catalogo": "Explore the catalog", + "Esplora il nostro vasto catalogo di libri, prenota i tuoi titoli preferiti e scopri nuove letture": "Explore our vast catalog of books, reserve your favorite titles and discover new reads", + "Esplora il nostro vasto catalogo di libri, prenota i tuoi titoli preferiti e scopri nuove letture. Sistema di prestito moderno e intuitivo con ricerca avanzata e categorie organizzate.": "Explore our vast book catalog, reserve your favorite titles and discover new reads. Modern and intuitive lending system with advanced search and organized categories.", + "Esplora per Categoria": "Explore by Category", + "Esporta": "Export", + "Esporta CSV": "Export CSV", + "Esporta Prestiti": "Export Loans", + "Seleziona gli stati dei prestiti da esportare:": "Select the loan statuses to export:", + "Seleziona almeno 2 autori da unire": "Select at least 2 authors to merge", + "Seleziona almeno 2 autori": "Select at least 2 authors", + "Seleziona almeno 2 editori": "Select at least 2 publishers", + "Seleziona almeno 2 editori da unire": "Select at least 2 publishers to merge", + "Seleziona almeno uno stato": "Select at least one status", + "Esporta CSV (formato compatibile per import)": "Export CSV (compatible format for import)", + "Esporta Excel": "Export Excel", + "Esporta PDF": "Export PDF", + "Esporta selezionati": "Export selected", + "Esportazione di %d utenti filtrati su %d totali": "Exporting %d filtered users out of %d total", + "Esportazione di tutti i %d utenti": "Exporting all %d users", + "Esportazione di %d libri filtrati su %d totali": "Exporting %d filtered books out of %d total", + "Esportazione di tutti i %d libri del catalogo": "Exporting all %d books from the catalog", + "Estensione": "Extension", + "Estensione del file non valida.": "Invalid file extension.", + "Estensioni": "Extensions", + "Etichetta": "Label", + "Etichette": "Labels", + "Etichette interne grandi (Herma 4630, Avery 3490)": "Large internal labels (Herma 4630, Avery 3490)", + "European Article Number (opzionale)": "European Article Number (optional)", + "Eventi": "Events", + "Eventi Recenti": "Recent Events", + "Evento": "Event", + "Evento aggiornato con successo!": "Event updated successfully!", + "Evento creato con successo!": "Event created successfully!", + "Evento della biblioteca": "Library event", + "Evento eliminato con successo!": "Event deleted successfully!", + "Evento non trovato.": "Event not found.", + "Evento visibile sul sito": "Event visible on website", + "Eventuali annotazioni sullo stato del libro...": "Any notes on book condition...", + "Excel": "Excel", + "Exporting %d filtered users out of %d total": "Exporting %d filtered users out of %d total", + "Exporting all %d users": "Exporting all %d users", + "FAQ": "FAQ", + "FATAL ERROR:": "FATAL ERROR:", + "Facebook": "Facebook", + "Fallimento": "Failure", + "Fatal Error:": "Fatal Error:", + "Fatto!": "Done!", + "Feature %d": "Feature %d", + "Feature 1": "Feature 1", + "Feature 2": "Feature 2", + "Feature 3": "Feature 3", + "Feature 4": "Feature 4", + "Features - Caratteristiche": "Features - Features", + "Femmina": "Female", + "File": "File", + "File \"%s\" pronto per l'upload": "File \"%s\" ready for upload", + "File %s nella directory root": "File %s in the root directory", + "File .env:": ".env file:", + "File .htaccess creato": ".htaccess file created", + "File .installed:": ".installed file:", + "File CSV (max 10MB)": "CSV file (max 10MB)", + "File CSV non valido: usa \";\" o \",\" come separatore.": "Invalid CSV file: use ';' or ',' as delimiter.", + "File CSV vuoto o formato non valido": "Empty CSV file or invalid format", + "File JSON con le traduzioni (opzionale). Puoi caricarlo anche in seguito.": "JSON file with translations (optional). You can upload it later.", + "File JSON non valido": "Invalid JSON file", + "File Principale:": "Main File:", + "File URL": "File URL", + "File ZIP con struttura plugin valida": "ZIP file with valid plugin structure", + "File ZIP non trovato.": "ZIP file not found.", + "File ZIP troppo grande. Dimensione massima: 100 MB.": "ZIP file too large. Maximum size: 100 MB.", + "File attuale": "Current file", + "File di Esempio": "Example File", + "File di Traduzione": "Translation File", + "File di Traduzione Attuale": "Current Translation File", + "File di Traduzione JSON": "JSON Translation File", + "File di traduzione non trovato": "Translation file not found", + "File esistente (data modifica)": "Existing file (modification date)", + "File non trovato nell'upload.": "File not found in upload.", + "File non valido o corrotto.": "Invalid or corrupted file.", + "File plugin.json non trovato nel pacchetto.": "plugin.json file not found in package.", + "File plugin.json non valido.": "Invalid plugin.json file.", + "File principale PHP specificato in %s": "Main PHP file specified in %s", + "File principale del plugin non trovato.": "Plugin main file not found.", + "File sitemap non trovato": "Sitemap file not found", + "File sitemap presente": "Sitemap file present", + "File troppo grande. Dimensione massima 10MB.": "File too large. Maximum size 10MB.", + "File:": "File:", + "Filtra": "Filter", + "Filtra per Mensola": "Filter by Shelf", + "Filtra per Scaffale": "Filter by Bookcase", + "Filtra per tipo": "Filter by type", + "Filtra mensole per scaffale": "Filter shelves by bookcase", + "Filtri": "Filters", + "Filtri attivi:": "Active filters:", + "Filtri cancellati": "Filters cleared", + "Filtri di Ricerca": "Search Filters", + "Filtri salvati": "Filters saved", + "Filtro Libro": "Book Filter", + "Filtro Utente": "User Filter", + "Filtro genere attivo": "Genre filter active", + "Filtro attivo": "Active filter", + "Filtro sottogenere attivo": "Subgenre filter active", + "Fallito": "Failed", + "Fine": "Finish", + "Fine:": "End:", + "Fino a quando? (opzionale):": "Until when? (optional):", + "Footer": "Footer", + "Formati supportati: JPG, PNG, GIF, WebP. Dimensione massima: 5MB": "Supported formats: JPG, PNG, GIF, WebP. Maximum size: 5MB", + "Formati supportati: MP3, M4A, OGG • Dimensione massima: 500 MB": "Supported formats: MP3, M4A, OGG • Max size: 500 MB", + "Formati supportati: PDF, ePub • Dimensione massima: 100 MB": "Supported formats: PDF, ePub • Max size: 100 MB", + "Formato": "Format", + "Formato CSV Dettagliato": "Detailed CSV Format", + "Formato Etichetta": "Label Format", + "Formato File JSON": "JSON File Format", + "Formato ISBN non valido.": "Invalid ISBN format.", + "Formato biblioteche scolastiche (compatibile A4)": "School library format (A4 compatible)", + "Formato biblioteche scolastiche (compatibili A4)": "School library format (A4 compatible)", + "Formato immagine non supportato. Usa JPG, PNG o WebP.": "Image format not supported. Use JPG, PNG or WebP.", + "Formato impostazioni non valido.": "Invalid settings format.", + "Formato orizzontale per dorso": "Horizontal format for spine", + "Formato quadrato Tirrenia": "Tirrenia square format", + "Formato: CSV con separatore %s • Max 10MB": "Format: CSV with %s separator • Max 10MB", + "Formato: xx_XX (es. it_IT, en_US, es_ES)": "Format: xx_XX (e.g. it_IT, en_US, es_ES)", + "Français (FR)": "French (FR)", + "Frecce ↑ ↓ per il volume": "↑ ↓ arrows for volume", + "From Email": "From Email", + "From Name": "From Name", + "Fuori Catalogo": "Out of Catalog", + "Genera automaticamente": "Generate automatically", + "Generato il": "Generated on", + "Generato il:": "Generated on:", + "Generazione CSV in corso...": "Generating CSV...", + "Generazione...": "Generating...", + "Genere": "Genre", + "Genere letterario": "Literary genre", + "Genere letterario del libro": "Literary genre of the book", + "Genere padre (opz.)": "Parent genre (opt.)", + "Genere principale": "Main genre", + "Genere:": "Genre:", + "Generi": "Genres", + "Generi Principali": "Main Genres", + "Generi e sottogeneri": "Genres and subgenres", + "Gestione Autori": "Authors Management", + "Gestione Biblioteca": "Library Management", + "Gestione Collocazione": "Location Management", + "Gestione Contenuti (CMS)": "Content Management (CMS)", + "Gestione Editori": "Publishers Management", + "Gestione Eventi": "Event Management", + "Gestione Generi": "Genres Management", + "Gestione Generi e Sottogeneri": "Genres and Subgenres Management", + "Gestione JavaScript Personalizzati basata su Cookie": "Cookie-based Custom JavaScript Management", + "Gestione Libri": "Books Management", + "Gestione Lingue": "Language Management", + "Gestione Multilingua": "Multilingual Management", + "Gestione Plugin": "Plugin Management", + "Gestione Prenotazioni": "Reservation Management", + "Gestione Prestiti": "Loans Management", + "Gestione Recensioni": "Reviews Management", + "Gestione Utenti": "Users Management", + "Gestione autori": "Authors management", + "Gestione classificazione Dewey: seed e statistiche": "Dewey classification management: seed and statistics", + "Gestione collezione": "Collection management", + "Gestione prestiti": "Loans management", + "Gestione recensioni": "Reviews management", + "Gestione utenti": "Users management", + "Gestisci": "Manage", + "Gestisci Eventi": "Manage Events", + "Gestisci Restituzione": "Manage Return", + "Gestisci gli aggiornamenti dell'applicazione": "Manage application updates", + "Gestisci gli autori della collezione": "Manage collection authors", + "Gestisci gli eventi della biblioteca: crea, modifica ed elimina eventi con immagini e descrizioni": "Manage library events: create, edit and delete events with images and descriptions", + "Gestisci i generi letterari": "Manage literary genres", + "Gestisci i prestiti attivi e storici": "Manage active and historical loans", + "Gestisci i tuoi titoli preferiti, scopri quando tornano disponibili e accedi rapidamente ai dettagli del libro.": "Manage your favorite titles, find out when they become available, and quickly access book details.", + "Gestisci il contenuto della pagina Chi Siamo con testo e immagine": "Manage the About Us page content with text and image", + "Gestisci il contenuto della pagina Chi Siamo con testo e immagine personalizzati": "Manage About Us page content with custom text and image", + "Gestisci l'accesso all'API per cercare libri via EAN, ISBN e autore": "Manage API access to search books via EAN, ISBN and author", + "Gestisci la collocazione fisica dei libri": "Manage physical location of books", + "Gestisci la visibilità delle categorie di cookie nel banner. I cookie essenziali sono sempre visibili e obbligatori.": "Manage cookie category visibility in banner. Essential cookies are always visible and mandatory.", + "Gestisci le case editrici": "Manage publishers", + "Gestisci le classificazioni Dewey per italiano e inglese": "Manage Dewey classifications for Italian and English", + "Gestisci le estensioni dell'applicazione": "Manage application extensions", + "Gestisci preferenze cookie": "Manage cookie preferences", + "Gestisci restituzione": "Manage return", + "Gestisci tutte": "Manage all", + "Gestito da": "Managed by", + "Giorni di preavviso per scadenza prestito": "Days of advance warning for loan expiry", + "Già Installato": "Already Installed", + "Già recensito": "Already reviewed", + "Gli amministratori non richiedono tessera e riceveranno un invito per impostare la password.": "Administrators do not require a library card and will receive an invitation to set their password.", + "Gli appuntamenti della biblioteca": "Library events", + "Gli script JavaScript sono divisi in 3 categorie in base alla tipologia di cookie:": "JavaScript scripts are divided into 3 categories based on cookie type:", + "Gli utenti possono selezionare questa lingua": "Users can select this language", + "Globale": "Global", + "Google Books API": "Google Books API", + "Google Books Configurato": "Google Books configured", + "Google reCAPTCHA v3": "Google reCAPTCHA v3", + "Grazie per aver scelto Pinakes!": "Thank you for choosing Pinakes!", + "Gruppo": "Group", + "Guida": "Guide", + "Guida alla Gestione Lingue": "Language Management Guide", + "Guida alle Route": "Route Guide", + "Hai aggiunto %s copie a \"%s\"": "You added %s copies to \"%s\"", + "Hai già un account?": "Already have an account?", + "Hai libri che dovevano essere restituiti. Restituiscili al più presto per evitare sanzioni.": "You have books that should have been returned. Return them as soon as possible to avoid penalties.", + "Hai modifiche non salvate che andranno perse. Continuare?": "You have unsaved changes that will be lost. Continue?", + "Hai modifiche non salvate. I dati attuali verranno sostituiti.": "You have unsaved changes. Current data will be replaced.", + "Hai modifiche non salvate. Vuoi continuare e perderle?": "You have unsaved changes. Do you want to continue and lose them?", + "Header HTTP (consigliato):": "HTTP Header (recommended):", + "Heading 1": "Heading 1", + "Heading 2": "Heading 2", + "Heading 3": "Heading 3", + "Heading 4": "Heading 4", + "Heading 5": "Heading 5", + "Heading 6": "Heading 6", + "Hero - Testata principale": "Hero - Main Header", + "Home": "Home", + "Homepage": "Homepage", + "Host": "Host", + "Host Database": "Database Host", + "I Cookie Essenziali sono sempre visibili e non possono essere disabilitati poiché necessari per il funzionamento del sito.": "Essential Cookies are always visible and cannot be disabled as they are necessary for site functionality.", + "I Miei Preferiti": "My Favorites", + "I campi con * sono obbligatori": "Fields with * are required", + "I campi null indicano dati non disponibili": "Null fields indicate unavailable data", + "I contenitori fisici principali dove sono organizzati i libri": "The main physical containers where books are organized", + "I dati provengono dal file JSON, nessun seeding necessario.": "Data comes from the JSON file, no seeding required.", + "I doppioni (per ID, ISBN13 o EAN) vengono aggiornati senza modificare le copie fisiche": "Duplicates (by ID, ISBN13 or EAN) are updated without modifying physical copies", + "I filtri correnti sono stati salvati nell'URL": "Current filters have been saved in the URL", + "I filtri vengono applicati automaticamente mentre digiti": "Filters are applied automatically as you type", + "I livelli (ripiani) all'interno di ogni scaffale": "The levels (shelves) within each bookcase", + "I miei preferiti": "My Favorites", + "I tuoi preferiti": "Your Favorites", + "ID": "ID", + "ID:": "ID:", + "ID Editore": "Publisher ID", + "ID Prestito": "Loan ID", + "ID Prestito:": "Loan ID:", + "ID libro non valido": "Invalid book ID", + "ID libro:": "Book ID:", + "ID prestito non valido": "Invalid loan ID", + "ID utente:": "User ID:", + "IP": "IP", + "IP Address": "IP Address", + "ISBN": "ISBN", + "ISBN 10": "ISBN 10", + "ISBN 13": "ISBN 13", + "ISBN Mancante": "Missing ISBN", + "ISBN a 13 cifre (univoco)": "13-digit ISBN (unique)", + "ISBN non trovato nelle fonti disponibili.": "ISBN not found in available sources.", + "ISBN non valido. Specifica 10 o 13 cifre (eventualmente con X finale).": "Invalid ISBN. Please provide 10 or 13 digits (X allowed at the end).", + "ISBN-13:": "ISBN-13:", + "ISBN10": "ISBN10", + "ISBN10 Non Valido": "Invalid ISBN10", + "ISBN10 deve contenere esattamente 10 caratteri (9 cifre + 1 cifra o X).": "ISBN10 must contain exactly 10 characters (9 digits + 1 digit or X).", + "ISBN10 o ISBN13": "ISBN10 or ISBN13", + "ISBN13": "ISBN13", + "ISBN13 Non Valido": "Invalid ISBN13", + "ISBN13 deve contenere esattamente 13 cifre.": "ISBN13 must contain exactly 13 digits.", + "ISBN13: %s": "ISBN13: %s", + "ISBN:": "ISBN:", + "IT": "IT", + "Icona FontAwesome": "FontAwesome Icon", + "Identità": "Identity", + "Identità Applicazione": "Application Identity", + "Ieri": "Yesterday", + "Ieri alle %s": "Yesterday at %s", + "Il Mio Profilo": "My Profile", + "Prima di ogni aggiornamento viene creato automaticamente un backup del database.": "Before each update, a database backup is automatically created.", + "Pinakes è aggiornato": "Pinakes is up to date", + "Pinakes è stato aggiornato con successo.": "Pinakes has been successfully updated.", + "Pinakes è stato installato con successo ed è pronto per essere utilizzato.": "Pinakes has been successfully installed and is ready to use.", + "Il campo è obbligatorio": "This field is required", + "Il codice lingua non può essere modificato dopo la creazione.": "The language code cannot be modified after creation.", + "Il codice lingua è obbligatorio (es. it_IT, en_US)": "Language code is required (e.g. it_IT, en_US)", + "Il codice scaffale \"%s\" esiste già. Usa un codice diverso.": "Shelf code \"%s\" already exists. Use a different code.", + "Il codice tessera sarà generato automaticamente (formato: ADMIN-YYYYMMDD-XXX).": "The membership code will be generated automatically (format: ADMIN-YYYYMMDD-XXX).", + "Il codice deve iniziare con le stesse tre cifre della classe principale": "The code must start with the same three digits of the main class", + "Il codice verrà inserito in un tag ": "The code will be inserted in a tags", + "Il cron utilizza gli stessi permessi dell'utente di sistema che lo esegue": "Cron uses same permissions as system user executing it", + "Il database '%s' non è vuoto. Deve essere un database vuoto.": "The database '%s' is not empty. It must be an empty database.", + "Il database deve essere vuoto.": "The database must be empty.", + "Il database è coerente e non sono stati rilevati problemi.": "The database is consistent and no issues were found.", + "Il database è stato installato, ma mancano le librerie PHP necessarie per eseguire l'applicazione.": "The database has been installed, but the PHP libraries needed to run the application are missing.", + "Il file JSON deve contenere coppie chiave-valore:": "The JSON file must contain key-value pairs:", + "Il file JSON non è valido:": "JSON file is not valid:", + "Il file deve avere estensione .csv": "The file must have a .csv extension", + "Il file deve contenere coppie chiave (italiano) - valore (traduzione).": "The file must contain key (Italian) - value (translation) pairs.", + "Il file deve essere un JSON valido": "File must be a valid JSON", + "Il file generato si trova in": "Generated file is located in", + "Il file generato si trova in public/sitemap.xml": "Generated file is located at public/sitemap.xml", + "Il formato scelto verrà utilizzato per generare i PDF delle etichette con codice a barre.": "The chosen format will be used to generate label PDFs with barcodes.", + "Il formato selezionato verrà applicato a tutte le etichette generate dal sistema.": "The selected format will be applied to all labels generated by the system.", + "Il libro selezionato è già in prestito. Seleziona un altro libro.": "The selected book is already on loan. Select another book.", + "Il libro viene consegnato subito all'utente. Se deselezionato, il prestito rimarrà in stato 'Da ritirare' fino alla conferma del ritiro.": "The book is delivered immediately to the user. If unchecked, the loan will remain in 'Ready for pickup' status until pickup is confirmed.", + "Il logo verrà ridimensionato automaticamente": "The logo will be automatically resized", + "Il mio profilo": "My Profile", + "Il nome del genere è obbligatorio.": "Genre name is required.", + "Il nome dell'": "The name of", + "Il nome dell'API key è obbligatorio.": "API key name is required.", + "Il nome dell'autore è obbligatorio.": "Author name is required.", + "Il nome dell'editore è obbligatorio.": "Publisher name is required.", + "Il nome della rosa": "The Name of the Rose", + "Il nome inglese è obbligatorio": "English name is required", + "Il nome inglese è obbligatorio (es. Italian, English)": "English name is required (e.g. Italian, English)", + "Il nome nativo è obbligatorio": "Native name is required", + "Il nome nativo è obbligatorio (es. Italiano, English)": "Native name is required (e.g. Italiano, English)", + "Il nostro team è stato notificato e sta lavorando per risolvere il problema.": "Our team has been notified and is working to resolve the issue.", + "Il pacchetto contiene percorsi non validi.": "Package contains invalid paths.", + "Il pacchetto non contiene file validi.": "Package does not contain valid files.", + "Il prestito è stato approvato con successo.": "The loan has been successfully approved.", + "Il prestito è stato rifiutato.": "The loan has been rejected.", + "Il sistema creerà automaticamente libri, autori ed editori": "The system will automatically create books, authors, and publishers", + "Il sistema include un cron job che gestisce automaticamente:": "The system includes a cron job that automatically handles:", + "Il sistema invierà automaticamente una email di promemoria agli utenti prima della scadenza del prestito. Il valore predefinito è 3 giorni.": "The system will automatically send a reminder email to users before the loan expires. Default value is 3 days.", + "Il server ha restituito una risposta non valida. Controlla i log per dettagli.": "The server returned an invalid response. Check the logs for details.", + "Il sito web deve essere un URL valido (es. https://www.esempio.com).": "Website must be a valid URL (e.g. https://www.example.com).", + "Il sito web deve essere un URL valido.": "Website must be a valid URL.", + "Il titolo del libro è obbligatorio.": "The book title is required.", + "Il titolo principale della pagina": "The main page title", + "Il titolo verrà utilizzato anche per generare l'URL della pagina": "The title will also be used to generate the page URL", + "Il titolo è obbligatorio.": "Title is required.", + "Il tuo account è in attesa di approvazione. Riceverai un'email quando sarà attivato": "Your account is pending approval. You will receive an email when it is activated", + "Il tuo account è stato sospeso. Contatta l'amministratore per maggiori informazioni": "Your account has been suspended. Contact the administrator for more information", + "Il tuo browser non supporta la riproduzione audio.": "Your browser does not support audio playback.", + "Immagine": "Image", + "Immagine Caricata!": "Image Uploaded!", + "Immagine Open Graph": "Open Graph Image", + "Immagine attuale": "Current Image", + "Immagine di copertina della pagina (opzionale)": "Page cover image (optional)", + "Immagine di sfondo Hero": "Hero Background Image", + "Immagine in Evidenza": "Featured Image", + "Immagine mostrata quando condividi la pagina su social media (Facebook, Twitter, LinkedIn). Se vuoto, usa l'immagine hero di sfondo. Dimensioni consigliate: 1200x630px (rapporto 1.91:1).": "Image shown when sharing the page on social media (Facebook, Twitter, LinkedIn). If empty, uses the hero background image. Recommended size: 1200x630px (1.91:1 ratio).", + "Immagine mostrata quando condividi su social. Dimensioni consigliate: 1200x630px (rapporto 1.91:1). Se vuoto, usa l'immagine hero di sfondo.": "Image shown when sharing on social media. Recommended dimensions: 1200x630px (1.91:1 ratio). If empty, uses the hero background image.", + "Immagini JPG, PNG o WebP (max 5MB)": "JPG, PNG or WebP images (max 5MB)", + "Import CSV": "CSV Import", + "Import Libri da CSV": "Import Books from CSV", + "Import Massivo Libri": "Bulk Book Import", + "Import completato: %d libri nuovi, %d libri aggiornati, %d autori creati, %d editori creati": "Import completed: %d new books, %d updated books, %d authors created, %d publishers created", + "Import dati iniziali...": "Importing initial data...", + "Import massivo da CSV": "Bulk import from CSV", + "Import schema in corso...": "Importing schema...", + "Import trigger...": "Importing triggers...", + "Importa": "Import", + "Importa Dati": "Import Data", + "Importa da ISBN": "Import from ISBN", + "Importazione completata con successo!": "Import completed successfully!", + "Importazione in corso...": "Import in progress...", + "Importazione libro": "Importing book", + "Importazione...": "Importing...", + "Impossibile aggiornare l'utente. Riprova più tardi.": "Unable to update user. Please try again later.", + "Impossibile aggiornare la chiave Google Books.": "Unable to update the Google Books key.", + "Impossibile aggiornare la posizione automatica": "Unable to update automatic position", + "Impossibile aggiornare le copie.": "Unable to update copies.", + "Impossibile approvare la recensione": "Unable to approve the review", + "Impossibile aprire il file CSV": "Unable to open the CSV file", + "Impossibile aprire il file ZIP.": "Unable to open ZIP file.", + "Impossibile archiviare il messaggio.": "Unable to archive the message.", + "Impossibile caricare gli editori. Controlla la console per i dettagli.": "Unable to load publishers. Check console for details.", + "Impossibile caricare i libri. Controlla la console per i dettagli.": "Unable to load books. Check console for details.", + "Impossibile completare l'operazione. Riprova più tardi.": "Unable to complete the operation. Try again later.", + "Impossibile comunicare con il server. Riprova più tardi.": "Unable to communicate with the server. Please try again later.", + "Impossibile configurare autocomplete: elementi mancanti": "Unable to configure autocomplete: missing elements", + "Impossibile contattare il servizio di scraping. Riprova più tardi.": "Unable to contact the scraping service. Please try again later.", + "Impossibile creare il file .env. Verifica i permessi.": "Unable to create the .env file. Check permissions.", + "Impossibile creare la cartella di upload.": "Unable to create the upload directory.", + "Impossibile creare la directory del plugin.": "Unable to create plugin directory.", + "Impossibile creare la prenotazione": "Unable to create reservation", + "Impossibile creare la struttura del plugin.": "Unable to create plugin structure.", + "Impossibile eliminare il file di manutenzione": "Unable to delete maintenance file", + "Impossibile eliminare il messaggio.": "Unable to delete the message.", + "Impossibile eliminare l'autore: sono presenti libri associati.": "Cannot delete the author: there are books associated with them.", + "Impossibile eliminare l'editore: sono presenti libri associati.": "Cannot delete the publisher: there are books associated with it.", + "Impossibile eliminare l'installer:": "Cannot delete the installer:", + "Impossibile eliminare l'installer: devi prima installare le dipendenze PHP con": "Cannot delete the installer: you must first install the PHP dependencies with", + "Impossibile eliminare la notifica.": "Unable to delete the notification.", + "Impossibile generare la risposta JSON.": "Unable to generate the JSON response.", + "Impossibile importare i dati per questo ISBN.": "Unable to import data for this ISBN.", + "Impossibile inizializzare Uppy per i contenuti digitali.": "Unable to initialize Uppy for digital content.", + "Impossibile inviare la recensione": "Unable to submit review", + "Impossibile inviare la recensione.": "Unable to submit review.", + "Impossibile leggere il file caricato": "Unable to read the uploaded file", + "Impossibile processare l'immagine.": "Unable to process the image.", + "Impossibile ridurre le copie a %d. Ci sono %d copie non disponibili (in prestito, perse o danneggiate). Il numero minimo di copie totali è %d.": "Cannot reduce the copies to %d. There are %d unavailable copies (on loan, lost, or damaged). The minimum total number of copies is %d.", + "Impossibile rifiutare la recensione": "Unable to reject the review", + "Impossibile rigenerare la sitemap: %s": "Unable to regenerate sitemap: %s", + "Impossibile salvare l'utente. Riprova più tardi.": "Unable to save user. Please try again later.", + "Impossibile segnare come letta la notifica.": "Unable to mark the notification as read.", + "Impossibile segnare tutte le notifiche come lette.": "Unable to mark all notifications as read.", + "Impossibile segnare tutti i messaggi come letti.": "Unable to mark all messages as read.", + "Impossibile recuperare i dati degli autori": "Unable to retrieve author data", + "Impossibile recuperare i dati degli editori": "Unable to retrieve publisher data", + "Imposta come Predefinita": "Set as Default", + "Imposta come attiva o predefinita": "Set as active or default", + "Imposta come lingua predefinita per nuovi utenti": "Set as default language for new users", + "Imposta il nome mostrato nel backend e il logo utilizzato nel layout.": "Set the name shown in the backend and the logo used in the layout.", + "Impostare questa lingua come predefinita?\n\nQuesta diventerà la lingua dell'intera applicazione per tutti gli utenti.": "Set this language as default?\n\nThis will become the language of the entire application for all users.", + "Impostare questa lingua come predefinita?\\n\\nQuesta diventerà la lingua dell'intera applicazione per tutti gli utenti.": "Set this language as default?\\n\\nThis will become the language of the entire application for all users.", + "Impostazioni": "Settings", + "Impostazioni Applicazione": "Application Settings", + "Impostazioni Date": "Date Settings", + "Impostazioni Discogs salvate correttamente.": "Discogs settings saved successfully.", + "Impostazioni SEO": "SEO Settings", + "Impostazioni avanzate aggiornate correttamente.": "Advanced settings updated successfully.", + "Impostazioni contatti aggiornate correttamente.": "Contact settings updated successfully.", + "Impostazioni email aggiornate correttamente.": "Email settings updated successfully.", + "Impostazioni generali aggiornate correttamente.": "General settings updated successfully.", + "Impostazioni privacy aggiornate correttamente.": "Privacy settings updated successfully.", + "Impostazioni salvate.": "Settings saved.", + "In Attesa di Approvazione": "Pending Approval", + "In Corso": "In Progress", + "In Riparazione": "Under Repair", + "In Ritardo": "Overdue", + "In attesa": "Pending", + "In attesa di approvazione": "Pending approval", + "In corso": "In progress", + "In corso di restituzione": "Pending return", + "In corso...": "In progress...", + "In manutenzione": "Under maintenance", + "In prestito": "On loan", + "In questa pagina trovi tutti gli eventi, gli incontri e i laboratori organizzati dalla biblioteca.": "On this page you will find every event, talk, and workshop organized by the library.", + "In ritardo": "Overdue", + "Inattivo": "Inactive", + "Indietro": "Back", + "Indirizzo": "Address", + "Indirizzo:": "Address:", + "Indirizzo completo": "Full Address", + "Indirizzo completo *": "Full address *", + "Info": "Info", + "Informazione": "Information", + "Informazioni": "Information", + "Informazioni Base": "Basic Information", + "Informazioni Evento": "Event Information", + "Informazioni Importanti": "Important Information", + "Informazioni Libro": "Book Information", + "Informazioni Personali": "Personal Information", + "Informazioni Prestito": "Loan Information", + "Informazioni Report": "Report Info", + "Informazioni di Contatto": "Contact Information", + "Informazioni di contatto": "Contact information", + "Informazioni editore": "Publisher information", + "Informazioni generali": "General Information", + "Informazioni personali": "Personal Information", + "Informazioni tessera": "Card information", + "Informazioni utili per il personale": "Useful information for staff", + "Inizia Installazione": "Start Installation", + "Inizia ad aggiungere libri al catalogo": "Start adding books to the catalog", + "Inizia aggiungendo il primo libro alla collezione": "Start by adding the first book to the collection", + "Inizia aggiungendo la prima lingua.": "Start by adding the first language.", + "Inizia caricando il tuo primo plugin": "Get started by uploading your first plugin", + "Inizia creando il primo genere letterario": "Start by creating your first literary genre", + "Inizia la Tua Avventura Letteraria": "Start Your Literary Adventure", + "Inizializzazione...": "Initializing...", + "Inizio installazione...": "Starting installation...", + "Inizio:": "Start:", + "Inserisci $1": "Enter $1", + "Inserisci codice locale (es. es_ES per Spagnolo)": "Enter locale code (e.g. es_ES for Spanish)", + "Inserisci il motivo del rifiuto...": "Enter the reason for rejection...", + "Inserisci il titolo": "Enter title", + "Inserisci la data di inizio (YYYY-MM-DD)": "Enter the start date (YYYY-MM-DD)", + "Inserisci la tua email per ricevere il link di reset.": "Enter your email to receive the reset link.", + "Inserisci la tua email per ricevere un link di reset": "Enter your email to receive a reset link", + "Inserisci la tua nuova password": "Enter your new password", + "Inserisci le credenziali del tuo database MySQL. Assicurati che il database sia già stato creato e sia vuoto.": "Enter your MySQL database credentials. Make sure the database has been created and is empty.", + "Inserisci le informazioni del nuovo evento": "Enter the information for the new event", + "Inserisci parole chiave separate da virgole per facilitare la ricerca": "Enter keywords separated by commas to facilitate searching", + "Inserisci solo script che NON tracciano utenti. Per analytics/marketing usa le sezioni dedicate.": "Only insert scripts that DO NOT track users. For analytics/marketing use the dedicated sections.", + "Inserisci un codice ISBN per continuare.": "Enter an ISBN code to continue.", + "Inserisci un numero valido di copie": "Enter a valid number of copies", + "Instagram": "Instagram", + "Installa": "Install", + "Installa Plugin": "Install Plugin", + "Installato": "Installed", + "Installato:": "Installed:", + "Installazione": "Installation", + "Installazione Completata": "Installation Completed", + "Installazione Completata!": "Installation Completed!", + "Installazione Cron Job": "Cron Job Installation", + "Installazione Database": "Database Installation", + "Installazione Guidata": "Guided Installation", + "Installazione delle tabelle del database e configurazione iniziale...": "Installing database tables and initial configuration...", + "Installazione fallita": "Installation failed", + "Installazione file": "Installing files", + "Installazione in corso...": "Installation in progress...", + "Installazione italiana usa": "Italian installation uses", + "Installazione plugin Open Library...": "Installing Open Library plugin...", + "Installer Pinakes": "Pinakes Installer", + "Installer eliminato con successo!": "Installer deleted successfully!", + "Integrità dati": "Data integrity", + "Internal server error": "Internal server error", + "Intestazione": "Header", + "Intestazione sezione": "Section Header", + "Inventario": "Inventory", + "Invia Richiesta": "Submit Request", + "Invia link": "Send link", + "Invia link di reset": "Send reset link", + "Invia messaggio": "Send message", + "Invia recensione": "Submit review", + "Inviaci un messaggio": "Send us a message", + "Inviato": "Sent", + "Invio in corso...": "Sending...", + "Invita gli utenti a registrarsi": "Invite users to register", + "Italiano (IT)": "Italian (IT)", + "JPG, PNG, GIF, WEBP - Max 5MB": "JPG, PNG, GIF, WEBP - Max 5MB", + "JavaScript Analitici": "Analytics JavaScript", + "JavaScript Essenziali": "Essential JavaScript", + "JavaScript Marketing": "Marketing JavaScript", + "L'API key può essere fornita in due modi:": "API key can be provided in two ways:", + "L'API è limitata a 50 risultati per richiesta": "API is limited to 50 results per request", + "L'applicazione NON può funzionare senza questo passaggio!": "The application CANNOT work without this step!", + "L'applicazione è stata installata correttamente e tutte le verifiche sono andate a buon fine.": "The application has been successfully installed and all checks have passed.", + "L'email di attivazione è stata inviata. L'utente potrà verificare il proprio account cliccando il link ricevuto (valido 7 giorni).": "Activation email has been sent. User can verify their account by clicking the link received (valid for 7 days).", + "L'immagine verrà scaricata al salvataggio": "The image will be downloaded on save", + "L'immagine è troppo grande. Max 5MB.": "Image is too large. Max 5MB.", + "L'indirizzo email deve essere valido.": "Email address must be valid.", + "L'installazione non è completa o valida.": "The installation is not complete or valid.", + "L'installazione è stata completata senza errori.": "The installation has been completed without errors.", + "L'ID primario deve essere presente nella lista degli autori da unire": "The primary ID must be present in the list of authors to merge", + "L'ID primario deve essere presente nella lista degli editori da unire": "The primary ID must be present in the list of publishers to merge", + "L'ora dell'evento deve essere nel formato corretto (HH:MM).": "Event time must be in the correct format (HH:MM).", + "L'ora deve essere nel formato corretto (HH:MM).": "Time must be in the correct format (HH:MM).", + "L'URL canonico non è valido. Deve iniziare con http:// o https://": "Canonical URL is not valid. It must start with http:// or https://", + "L'ultima sezione che invita all'azione": "The final call-to-action section", + "L'utente del database non ha i permessi per creare i TRIGGER. L'installazione è stata completata, ma per garantire la piena integrità dei dati è necessario installarli manualmente.": "The database user does not have permissions to create TRIGGERS. The installation has been completed, but to ensure full data integrity it is necessary to install them manually.", + "L'utente non è in stato sospeso. Solo gli utenti sospesi richiedono approvazione.": "User is not in suspended state. Only suspended users require approval.", + "L'utente riceverà un'email con link di verifica (valido 7 giorni) e potrà attivare autonomamente l'account.": "User will receive an email with verification link (valid for 7 days) and can activate the account autonomously.", + "L'utente riceverà una notifica via email della prenotazione creata": "User will receive email notification of the created reservation", + "L'utente richiesto non esiste nel database.": "Requested user does not exist in database.", + "L'utente sarà attivato immediatamente e riceverà un'email di benvenuto. Potrà accedere subito.": "User will be activated immediately and will receive a welcome email. Can log in right away.", + "L'utente è stato attivato e può già effettuare il login. È stata inviata un'email di benvenuto.": "User has been activated and can already log in. A welcome email has been sent.", + "L'utente è stato eliminato.": "The user has been deleted.", + "La Tua Biblioteca Digitale": "Your Digital Library", + "La cartella vendor/ esiste e contiene le librerie necessarie.": "The vendor/ folder exists and contains the necessary libraries.", + "La classificazione Dewey è utilizzata per organizzare i libri per argomento secondo standard internazionali": "The Dewey classification is used to organize books by subject according to international standards", + "La collocazione può essere assegnata automaticamente o inserita manualmente durante la creazione/modifica del libro": "Location can be assigned automatically or entered manually during book creation/editing", + "La collocazione è l'indirizzo fisico che identifica dove si trova un libro nella biblioteca.": "Location is the physical address that identifies where a book is located in the library.", + "La copertina verrà rimossa al salvataggio del libro": "The cover will be removed when saving the book", + "La data dell'evento è obbligatoria e deve essere nel formato corretto.": "Event date is required and must be in the correct format.", + "La data dell'evento è obbligatoria.": "Event date is required.", + "La data di nascita deve essere precedente alla data di morte.": "Birth date must be before death date.", + "La lingua contrassegnata come 'Predefinita' verrà usata in tutta l'applicazione per tutti gli utenti. Per cambiare la lingua dell'intera app, clicca sull'icona stella": "The language marked as 'Default' will be used throughout the application for all users. To change the language of the entire app, click the star icon", + "La pagina che stai cercando non esiste o è stata spostata.": "The page you are looking for does not exist or has been moved.", + "La password deve contenere almeno 8 caratteri, lettere maiuscole, minuscole e numeri": "Password must contain at least 8 characters with uppercase letters, lowercase letters, and numbers", + "La password deve contenere almeno una lettera maiuscola, una minuscola e un numero": "Password must contain at least one uppercase letter, one lowercase letter and one number", + "La password deve essere lunga almeno 8 caratteri": "Password must be at least 8 characters long", + "La password deve essere lunga almeno 8 caratteri!": "Password must be at least 8 characters long!", + "La posizione fisica è indipendente dalla classificazione Dewey e indica dove si trova il libro sugli scaffali.": "The physical position is independent of the Dewey classification and indicates where the book is located on the shelves.", + "La posizione in coda sarà calcolata automaticamente in base alle prenotazioni esistenti": "Queue position will be calculated automatically based on existing reservations", + "La posizione viene assegnata automaticamente": "Position is assigned automatically", + "La recensione è stata approvata e pubblicata con successo.": "The review has been approved and published successfully.", + "La recensione è stata rifiutata e non sarà pubblicata.": "The review has been rejected and will not be published.", + "La risposta include tutti i dati del libro:": "Response includes all book data:", + "La scadenza verrà estesa di 14 giorni": "The due date will be extended by 14 days", + "La sessione è scaduta. Aggiorna la pagina e riprova.": "The session has expired. Refresh the page and try again.", + "La sezione principale che appare per prima sulla home": "The main section that appears first on the homepage", + "La sitemap viene aggiornata automaticamente quando premi il pulsante oppure tramite lo script CLI": "Sitemap is updated automatically when you press the button or via CLI script", + "La sitemap viene aggiornata automaticamente quando premi il pulsante oppure tramite lo script CLI php scripts/generate-sitemap.php. Usa questa azione dopo aver importato un grande numero di libri o modifiche ai contenuti CMS.": "Sitemap is automatically updated when you press button or via CLI script php scripts/generate-sitemap.php. Use this action after importing many books or CMS content changes.", + "La cronologia degli aggiornamenti apparirà qui": "The update history will appear here", + "La tua biblioteca digitale...": "Your digital library...", + "La versione %s è disponibile. Prima di aggiornare, verrà creato un backup automatico del database.": "Version %s is available. Before updating, an automatic database backup will be created.", + "La tua sessione è scaduta. Per motivi di sicurezza, effettua nuovamente l'accesso": "Your session has expired. For security reasons, please sign in again", + "La tua sessione è scaduta. Per motivi di sicurezza, ricarica la pagina e riprova": "Your session has expired. For security reasons, refresh the page and try again", + "La tua sessione è scaduta. Per motivi di sicurezza, ricarica la pagina ed effettua nuovamente l'accesso.": "Your session has expired. For security reasons, reload the page and log in again.", + "La tua wishlist è vuota": "Your wishlist is empty", + "Lascia una recensione": "Leave a review", + "Lascia vuoto o usa \"Genera\" per assegnare automaticamente la prossima posizione disponibile.": "Leave empty or use \"Generate\" to automatically assign the next available position.", + "Lascia vuoto o usa \\": "Leave empty or use \\", + "Lascia vuoto per 1 mese": "Leave empty for 1 month", + "Lascia vuoto per auto-rilevamento. Necessario solo su macOS/Linux con socket personalizzati.": "Leave empty for auto-detection. Only needed on macOS/Linux with custom sockets.", + "Lascia vuoto per generare automaticamente": "Leave blank to generate automatically", + "Lascia vuoto per inviare un link di impostazione": "Leave blank to send a setup link", + "Lascia vuoto per nascondere il social dal footer": "Leave empty to hide the social from footer", + "Lascia vuoto per nascondere il titolo": "Leave empty to hide the title", + "Lascia vuoto per mantenere la chiave esistente. Inserisci un nuovo valore per aggiornarla.": "Leave empty to keep the existing key. Enter a new value to update it.", + "Lascia vuoto per mantenere il nome attuale": "Leave empty to keep the current name", + "Lascia vuoto per non modificare": "Leave empty to not modify", + "Lascia vuoto se l'autore è vivente": "Leave blank if the author is alive", + "Le API key disattivate restituiranno errore 401": "Disabled API keys will return 401 error", + "Le Mie Prenotazioni": "My Reservations", + "Le Mie Recensioni": "My Reviews", + "Le copie disponibili vengono calcolate automaticamente": "Available copies are calculated automatically", + "Le date rosse non sono disponibili. La richiesta verrà valutata da un amministratore.": "Red dates are unavailable. Your request will be reviewed by an administrator.", + "Le mie prenotazioni": "My Reservations", + "Le password non coincidono": "Passwords do not match", + "Le password non coincidono!": "Passwords do not match!", + "Le posizioni si generano automaticamente": "Positions are generated automatically", + "Le route non possono contenere spazi": "Routes cannot contain spaces", + "Le route sono gli URL usati nell'applicazione. Traducendole, puoi avere URL in italiano o inglese in base alla lingua dell'installazione.": "Routes are the URLs used in the application. By translating them, you can have URLs in Italian or English based on the installation language.", + "Le tue recensioni": "Your reviews", + "Letto": "Read", + "Lettore": "Reader", + "Libero": "Free", + "Librerie di upload non caricate. Ricarica la pagina.": "Upload libraries not loaded. Please reload the page.", + "Libri": "Books", + "Libri Disponibili": "Available Books", + "Libri Prestati": "Loaned Books", + "Libri Totali": "Total Books", + "Libri per Collocazione": "Books by Location", + "Libro": "Book", + "Libro Esistente:": "Existing Book:", + "Libro Già Esistente": "Book Already Exists", + "Libro aggiornato con successo!": "Book updated successfully!", + "Libro aggiunto con successo!": "Book added successfully!", + "Libro da prenotare": "Book to reserve", + "Libro e utente sono campi obbligatori.": "Book and user are required fields.", + "Libro non disponibile": "Book not available", + "Libro non trovato su Open Library.": "Book not found on Open Library.", + "Libro non trovato.": "Book not found.", + "Libro non trovato": "Book not found", + "Libro senza titolo": "Untitled book", + "Libro:": "Book:", + "Licenza": "License", + "Limite massimo rinnovi raggiunto": "Maximum renewal limit reached", + "Limiti: massimo 50 libri con scraping attivo, timeout 5 minuti": "Limits: maximum 50 books with scraping enabled, 5 minute timeout", + "Lingua": "Language", + "Lingua App": "App Language", + "Lingua Attiva": "Active Language", + "Lingua Predefinita": "Default Language", + "Lingua Predefinita:": "Default Language:", + "Lingua aggiornata con successo": "Language updated successfully", + "Lingua creata con successo": "Language created successfully", + "Lingua eliminata con successo": "Language deleted successfully", + "Lingua non trovata": "Language not found", + "Lingua originale del libro": "Original language of the book", + "Lingua predefinita impostata con successo": "Default language set successfully", + "Lingue": "Languages", + "Lingue Configurate": "Configured Languages", + "Link": "Link", + "Link Cookie Statement": "Cookie Statement Link", + "Link Cookie Technologies": "Cookie Technologies Link", + "Link Social Media": "Social Media Links", + "Link al file digitale (se disponibile)": "Link to digital file (if available)", + "Link all'audiolibro (se disponibile)": "Link to audiobook (if available)", + "Link copiato!": "Link copied!", + "Link di reset non valido o scaduto": "Reset link invalid or expired", + "Link pulsante": "Button Link", + "LinkedIn": "LinkedIn", + "Livello": "Level", + "Livello ${m.numero_livello}": "Level ${m.numero_livello}", + "Livello *": "Level *", + "Livello 1 (Classi)": "Level 1 (Classes)", + "Livello 2 (Divisioni)": "Level 2 (Divisions)", + "Livello 3 (Specifiche)": "Level 3 (Specifics)", + "Livello principale (es. Prosa, Poesia, Teatro)": "Main level (e.g. Prose, Poetry, Theater)", + "Lo script CLI utilizza il valore di APP_CANONICAL_URL. Assicurati che sia configurato correttamente per evitare URL duplicati.": "CLI script uses APP_CANONICAL_URL value. Make sure it is configured correctly to avoid duplicate URLs.", + "Lo stato della prenotazione sarà impostato automaticamente come \"attiva\"": "The reservation status will be automatically set as \"active\"", + "Lo stato della prenotazione sarà impostato automaticamente come \\": "Reservation status will be automatically set as \\", + "Loans": "Loans", + "Locale": "Local", + "Lock file creato (installazione protetta)": "Lock file created (installation protected)", + "Log": "Log", + "Log Sicurezza": "Security Logs", + "Log di Sicurezza": "Security Log", + "Login": "Login", + "Login Riuscito": "Login Successful", + "Logo": "Logo", + "Logo Applicazione (opzionale)": "Application Logo (optional)", + "Logout effettuato con successo": "Logout successful", + "MP3, M4A o OGG, max 500 MB": "MP3, M4A or OGG, max 500 MB", + "Mai generata": "Never generated", + "Mai utilizzata": "Never used", + "Mancante": "Missing", + "Mantieni in ritardo": "Keep overdue", + "Manuale": "Manual", + "Manutenzione": "Maintenance", + "Manutenzione completata: %d record corretti": "Maintenance completed: %d records fixed", + "Manutenzione giornaliera del database": "Daily database maintenance", + "MaintenanceService connessione database fallita": "MaintenanceService database connection failed", + "MaintenanceService errore attivazione prestiti": "MaintenanceService loan activation error", + "MaintenanceService errore attivazione prestito": "MaintenanceService loan activation error", + "MaintenanceService errore conversione prenotazioni": "MaintenanceService reservation conversion error", + "MaintenanceService errore durante hook login admin": "MaintenanceService admin login hook error", + "MaintenanceService errore elaborazione prenotazione": "MaintenanceService reservation processing error", + "MaintenanceService errore generazione ICS": "MaintenanceService ICS generation error", + "MaintenanceService errore notifiche": "MaintenanceService notification error", + "MaintenanceService errore prenotazioni scadute": "MaintenanceService expired reservations error", + "MaintenanceService errore prestiti in ritardo": "MaintenanceService overdue loans error", + "MaintenanceService errore scadenza prenotazione": "MaintenanceService reservation expiration error", + "MaintenanceService eseguito al login admin": "MaintenanceService executed on admin login", + "MaintenanceService ICS non generato": "MaintenanceService ICS not generated", + "MaintenanceService prenotazione convertita in prestito": "MaintenanceService reservation converted to loan", + "MaintenanceService prenotazione scaduta": "MaintenanceService reservation expired", + "Manutenzione disattivata": "Maintenance disabled", + "Mappa Interattiva": "Interactive Map", + "Mappa del sito per i motori di ricerca": "Site map for search engines", + "Mappa non disponibile": "Map not available", + "Mario": "John", + "Maschio": "Male", + "Max 10.000 righe • Max 100 copie per libro": "Max 10,000 rows • Max 100 copies per book", + "Mediocre": "Fair", + "Membro": "Member", + "Mensola": "Shelf", + "Mensola creata e %d posizioni generate.": "Shelf created and %d positions generated.", + "Mensola creata.": "Shelf created.", + "Mensole": "Shelves", + "Menu": "Menu", + "Menu Principale": "Main Menu", + "Menu \"Prestiti\" nell'admin sidebar": "\"Loans\" menu in admin sidebar", + "Migrazione database": "Database migration", + "Messaggi": "Messages", + "Messaggi di Contatto": "Contact Messages", + "Messaggio": "Message", + "Messaggio inviato con successo! Ti risponderemo al più presto.": "Message sent successfully! We will reply as soon as possible.", + "Messaggio non trovato.": "Message not found.", + "Metadati:": "Metadata:", + "Metodo di invio": "Sending method", + "Minimo 8 caratteri": "Minimum 8 characters", + "Minimo 8 caratteri, con lettere maiuscole, minuscole e numeri": "Minimum 8 characters, with uppercase, lowercase and numbers", + "Mittente": "From", + "Mittente (email)": "Sender (email)", + "Mittente (nome)": "Sender (name)", + "Moderatore": "Moderator", + "Modalità Catalogo": "Catalogue Mode", + "Modalità Solo Catalogo": "Catalogue Only Mode", + "Modalità di importazione": "Import mode", + "Merge - Aggiungi e aggiorna (mantiene dati esistenti)": "Merge - Add and update (keeps existing data)", + "Merge completato": "Merge completed", + "Merge completato: %d aggiunti, %d aggiornati, %d invariati. Totale: %d voci.": "Merge completed: %d added, %d updated, %d unchanged. Total: %d entries.", + "Modifica": "Edit", + "Modifica %s": "Edit %s", + "Modifica Autore": "Edit Author", + "Modifica Autore:": "Edit Author:", + "Modifica Chi Siamo": "Edit About Us", + "Modifica Editore": "Edit Publisher", + "Modifica Evento": "Edit Event", + "Modifica Evento: %s": "Edit Event: %s", + "Modifica Homepage": "Edit Homepage", + "Modifica Libro": "Edit Book", + "Modifica Lingua:": "Edit Language:", + "Modifica Prenotazione": "Edit Reservation", + "Modifica Prenotazione #%s": "Edit Reservation #%s", + "Modifica Route Tradotte": "Edit Translated Routes", + "Modifica Stato Copia": "Edit Copy Status", + "Modifica Utente": "Edit User", + "Modifica i contenuti della homepage: hero, features, CTA e immagine di sfondo": "Edit homepage content: hero, features, CTA and background image", + "Modifica il contenuto e le impostazioni della pagina": "Edit page content and settings", + "Modifica le informazioni dell'evento": "Edit the event information", + "Modifica le pagine statiche del sito": "Edit static site pages", + "Modifica prestito": "Edit loan", + "Modifica prestito #%s": "Edit Loan #%s", + "Modifica profilo": "Edit profile", + "Modifica stato": "Edit status", + "Modifica utente": "Edit user", + "Modulo": "Module", + "Molto buono": "Very good", + "Mondadori": "Mondadori", + "Monitora tentativi di login e eventi di sicurezza": "Monitor login attempts and security events", + "Mostra": "Show", + "Mostra API Key": "Show API Key", + "Mostra Cookie Analitici": "Show Analytics Cookies", + "Mostra Cookie di Marketing": "Show Marketing Cookies", + "Mostra _MENU_ libri": "Show _MENU_ books", + "Mostra categoria \\": "Show category \\", + "Mostra filtri": "Show filters", + "Mostra gli ultimi libri aggiunti al catalogo": "Show the latest books added to the catalog", + "Motivo del rifiuto (opzionale)": "Reason for rejection (optional)", + "Motivo del rifiuto (opzionale):": "Reason for rejection (optional):", + "N. Libri": "No. of Books", + "N/D": "N/A", + "Narrativa": "Fiction", + "Nascondi": "Hide", + "Nascondi API Key": "Hide API Key", + "Nascondi filtri": "Hide filters", + "Nascondi se il sito non utilizza cookie di marketing o advertising": "Hide if site does not use marketing or advertising cookies", + "Nascondi se il sito non utilizza strumenti di analytics (es. Google Analytics)": "Hide if site does not use analytics tools (e.g. Google Analytics)", + "Nascita a": "Birth date to", + "Nascita da": "Birth date from", + "Nascosto": "Hidden", + "Nato il %s": "Born on %s", + "Nazionalità": "Nationality", + "Nederlands (NL)": "Dutch (NL)", + "Nei Preferiti": "In Favorites", + "Nella collezione": "In collection", + "Nessun aggiornamento": "No updates", + "Nessun Problema": "No Issues", + "Nessun autore trovato": "No authors found", + "Nessun autore trovato, premi Invio per aggiungerne uno nuovo": "No author found, press Enter to add a new one", + "Nessun dato": "No data", + "Nessun dato trovato su LibreriaUniversitaria/Feltrinelli.": "No data found on LibreriaUniversitaria/Feltrinelli.", + "Nessun editore trovato": "No publishers found", + "Nessun editore trovato per \"${query}\" — premi Invio per crearne uno nuovo.": "No publisher found for \"${query}\" — press Enter to create a new one.", + "Nessun elemento trovato": "No items found", + "Nessun evento": "No events", + "Nessun evento in programma": "No events scheduled", + "Nessun file caricato": "No file uploaded", + "Nessun file caricato.": "No file uploaded.", + "Nessun file di traduzione caricato. Carica un file JSON per abilitare questa lingua.": "No translation file uploaded. Upload a JSON file to enable this language.", + "Nessun genere trovato": "No genres found", + "Nessun libro": "No books", + "Nessun libro ancora inserito": "No books added yet", + "Nessun libro con collocazione trovato": "No books with location found", + "Nessun libro nel database": "No books in database", + "Nessun libro recente disponibile": "No recent books available", + "Nessun libro registrato": "No books registered", + "Nessun libro trovato": "No books found", + "Nessun log disponibile": "No logs available", + "Nessun logo caricato": "No logo uploaded", + "Nessun messaggio ricevuto": "No messages received", + "Nessun motivo specificato": "No reason specified", + "Nessun plugin installato": "No plugins installed", + "Nessun prestito attivo": "No active loans", + "Nessun prestito disponibile per generare il grafico": "No loans available to generate chart", + "Nessun prestito in corso": "No active loans", + "Nessun prestito passato": "No past loans", + "Nessun prestito registrato": "No loans registered", + "Nessun prestito scaduto": "No overdue loans", + "Nessun prestito trovato": "No loans found", + "Nessun prestito trovato.": "No loans found.", + "Nessun ritiro": "No pickups", + "Nessun risultato": "No results", + "Nessun risultato trovato": "No results found", + "Nessun risultato trovato con i filtri applicati": "No results found with applied filters", + "Nessun risultato trovato per la ricerca.": "No results found for search.", + "Nessun sottogenere": "No subgenre", + "Nessun sottogenere definito": "No subgenres defined", + "Nessun suggerimento": "No suggestion", + "Nessun suggerimento disponibile": "No suggestion available", + "Nessun titolo corrisponde al filtro corrente.": "No titles match the current filter.", + "Nessuna": "None", + "Nessun aggiornamento registrato": "No updates recorded", + "Nessuna API key configurata": "No API keys configured", + "Nessuna collocazione trovata": "No locations found", + "Nessuna copia attualmente disponibile": "No copy currently available", + "Nessuna copertina caricata": "No cover uploaded", + "Nessuna copia disponibile per questo libro": "No copy available for this book", + "Nessuna copia disponibile per il periodo richiesto.": "No copy available for the requested period.", + "Nessuna descrizione disponibile": "No description available", + "Nessuna descrizione disponibile per questo libro.": "No description available for this book.", + "Nessuna lingua configurata": "No languages configured", + "Nessuna mensola. Creane una per iniziare!": "No shelves. Create one to get started!", + "Nessuna mensola per questo scaffale. Creane una!": "No shelves for this bookcase. Create one!", + "Nessuna notifica": "No notifications", + "Nessuna prenotazione": "No reservations", + "Nessuna prenotazione attiva": "No active reservations", + "Nessuna recensione": "No reviews", + "Nessuna recensione approvata": "No approved reviews", + "Nessuna recensione in attesa": "No pending reviews", + "Nessuna recensione rifiutata": "No rejected reviews", + "Nessuna richiesta": "No requests", + "Nessuna richiesta in attesa": "No pending requests", + "Nessuna richiesta in attesa di approvazione.": "No requests pending approval.", + "Nessuna selezione": "No selection", + "Nessuno": "None", + "Nessuno scaffale. Creane uno per iniziare!": "No bookcases. Create one to get started!", + "Nessuno storico": "No history", + "No": "No", + "Nome": "First Name", + "Nome *": "Name *", + "Nome Applicazione": "Application Name", + "Nome Categoria": "Category Name", + "Nome Cognome": "First Last Name", + "Nome Database": "Database Name", + "Nome Editore": "Publisher Name", + "Nome Inglese": "English Name", + "Nome Nativo": "Native Name", + "Nome Referente": "Contact Person Name", + "Nome applicazione": "Application name", + "Nome autore": "Author name", + "Nome editore...": "Publisher name...", + "Nome, pseudonimo, biografia...": "Name, pseudonym, biography...", + "Nome categoria esistente": "Existing category name", + "Nome completo": "Full Name", + "Nome cookie analitici": "Analytics cookies name", + "Nome cookie essenziali": "Essential cookies name", + "Nome cookie marketing": "Marketing cookies name", + "Nome d'arte o pseudonimo": "Stage name or pseudonym", + "Nome dell'editore": "Publisher name", + "Nome della casa editrice": "Publisher name", + "Nome della lingua in inglese (es. Italian, English, Spanish)": "Name of the language in English (e.g. Italian, English, Spanish)", + "Nome della lingua nella lingua stessa (es. Italiano, English, Español)": "Name of the language in the language itself (e.g. Italiano, English, Español)", + "Nome e cognome del referente": "Contact person name", + "Nome e cognome dell'autore": "Author's full name", + "Nome editore": "Publisher name", + "Nome o cognome troppo lungo (massimo 100 caratteri)": "Name or surname too long (maximum 100 characters)", + "Nome plugin non valido. Usa solo lettere, numeri, trattini o underscore.": "Invalid plugin name. Use only letters, numbers, hyphens or underscores.", + "Nome, cognome, email...": "Name, surname, email...", + "Nome:": "Name:", + "Non Disponibile": "Not Available", + "Non Disponibili": "Unavailable", + "Non ancora restituito": "Not yet returned", + "Non assegnata": "Not assigned", + "Non autenticato": "Not authenticated", + "Non autorizzato.": "Unauthorized.", + "Non ci sono dati da esportare": "There is no data to export", + "Non ci sono recensioni in attesa di approvazione.": "There are no reviews waiting for approval.", + "Non ci sono richieste di prestito in attesa di approvazione.": "There are no loan requests pending approval.", + "Non disponibile": "Not available", + "Non disponibile ora": "Not available now", + "Non eliminabile": "Cannot Delete", + "Non hai ancora creato nessun evento. Inizia creando il tuo primo evento.": "You haven't created any events yet. Start by creating your first event.", + "Non hai ancora lasciato recensioni": "You have not left any reviews yet", + "Non hai libri in prestito al momento": "You have no books on loan at the moment", + "Non hai prenotazioni attive al momento": "You have no active reservations at the moment", + "Non hai prestiti passati": "You have no past loans", + "Non hai un account?": "Don't have an account?", + "Non includere tag ": "Do not include tags", + "Non letto": "Unread", + "Non puoi eliminare l'installer finché non completi l'installazione delle dipendenze PHP.": "You cannot delete the installer until you complete the PHP dependencies installation.", + "Non puoi recensire questo libro (devi averlo preso in prestito e non averlo già recensito)": "You cannot review this book (you must have borrowed it and not already reviewed it)", + "Non rinnovabile: prestito in ritardo": "Not renewable: loan overdue", + "Non installato": "Not installed", + "Non scrivibile": "Not writable", + "Non selezionato": "Not selected", + "Non specificata": "Not specified", + "Non specificato": "Not specified", + "Non usare spazi nelle route": "Do not use spaces in routes", + "Non è stato possibile eliminare l'utente. Controlla la console.": "Unable to delete the user. Check the console.", + "Non è stato trovato alcun aggiornamento": "No updates found", + "Nota:": "Note:", + "Nota: Impostare come predefinita disattiverà lo status di predefinita per tutte le altre lingue.": "Note: Setting as default will disable the default status for all other languages.", + "Nota: in produzione limita questa funzione agli amministratori.": "Note: in production limit this function to administrators.", + "Note": "Notes", + "Note (opzionali)": "Notes (optional)", + "Note Importanti": "Important Notes", + "Note Varie": "Miscellaneous Notes", + "Note aggiuntive o osservazioni particolari...": "Additional notes or special observations...", + "Note importanti:": "Important notes:", + "Note interne": "Internal Notes", + "Note sul prestito": "Loan notes", + "Note sulla restituzione": "Return notes", + "Note tecniche": "Technical notes", + "Notifiche": "Notifications", + "Notifiche Automatiche": "Automatic Notifications", + "Notifiche Prestiti": "Loan Notifications", + "Notifiche disponibilità libri in wishlist": "Wishlist book availability notifications", + "Notifiche prestiti scaduti": "Overdue loan notifications", + "N. Inventario": "Inventory No.", + "Numero Inventario": "Inventory Number", + "Numero Libri": "Number of Books", + "Numero Pagine": "Number of Pages", + "Numero Serie": "Series Number", + "Numero di Pagine": "Number of Pages", + "Numero di copie non valido.": "Invalid number of copies.", + "Numero di libri": "Number of books", + "Numero inventario": "Inventory number", + "Numero massimo di righe superato (%d). Dividi il file in parti più piccole.": "Maximum number of rows exceeded (%d). Split the file into smaller parts.", + "Numero o descrizione dell'edizione": "Edition number or description", + "Numero prenotazioni attive": "Number of active reservations", + "Numero serie": "Series number", + "Numero tessera": "Card number", + "Nuova Collocazione": "New Location", + "Nuova Password": "New Password", + "Nuova password": "New password", + "Nuova prenotazione": "New Reservation", + "Nuova recensione da approvare": "New review to approve", + "Nuova registrazione utente": "New User Registration", + "Nuova richiesta di prestito": "New loan request", + "Nuovo": "New", + "Novità nelle versioni successive": "What's new in upcoming versions", + "Non chiudere questa finestra": "Do not close this window", + "Nuovo aggiornamento disponibile!": "New update available!", + "Nuovo Autore": "New Author", + "Nuovo Editore": "New Publisher", + "Nuovo Evento": "New Event", + "Nuovo Genere": "New Genre", + "Nuovo Libro": "New Book", + "Nuovo messaggio di contatto": "New Contact Message", + "Nuovo Prestito": "New Loan", + "Nuovo Utente": "New User", + "Nuovo editore:": "New publisher:", + "Nuovo utente": "New User", + "Nuovo nome (opzionale)": "New name (optional)", + "OFF": "Off", + "OK": "OK", + "ON": "On", + "Obbligatorio": "Required", + "Obbligatorio per utenti non amministratori.": "Required for non-administrator users.", + "Obsoleto": "Obsolete", + "Occupato": "Busy", + "Occupato (prestito attivo)": "Occupied (active loan)", + "Occupato (in ritardo)": "Occupied (overdue)", + "Prenota questo libro": "Reserve this book", + "Seleziona le date per la tua prenotazione. La richiesta verrà inviata alla biblioteca per approvazione.": "Select dates for your reservation. The request will be sent to the library for approval.", + "Accedi per Prenotare": "Login to Reserve", + "Libro disponibile per la prenotazione": "Book available for reservation", + "Richiesta inviata!": "Request sent!", + "La tua richiesta di prestito è stata inviata. Riceverai una notifica quando verrà approvata.": "Your loan request has been sent. You will receive a notification when it is approved.", + "Richiesta inviata con successo!": "Request sent successfully!", + "Errore durante la prenotazione": "Error during reservation", + "Offline": "Offline", + "Oggetto": "Subject", + "Oggetto dell'email": "Email subject", + "Ogni 15 minuti nei giorni lavorativi (8:00-18:00)": "Every 15 minutes on weekdays (8:00-18:00)", + "Ogni route deve iniziare con": "Each route must start with", + "Online": "Online", + "Open Graph (Facebook)": "Open Graph (Facebook)", + "Open Graph (Facebook, LinkedIn)": "Open Graph (Facebook, LinkedIn)", + "Operatore": "Operator", + "Operazione annullata": "Operation cancelled", + "Operazione completata": "Operation completed", + "Operazione non consentita": "Operation not allowed", + "Operazioni": "Operations", + "Opere": "Works", + "Oppure usa il terminale SSH del tuo hosting (cPanel, Plesk, etc.)": "Or use your hosting's SSH terminal (cPanel, Plesk, etc.)", + "Ops, qualcosa è andato storto": "Oops, something went wrong", + "Opzionale": "Optional", + "Opzionale per amministratori": "Optional for administrators", + "Opzione 1:": "Option 1:", + "Opzione 2:": "Option 2:", + "Opzione 3:": "Option 3:", + "Ora Evento": "Event Time", + "Ora puoi accedere con la tua nuova password.": "You can now sign in with your new password.", + "Ora puoi ricaricare questa pagina - il warning sparirà se tutto è OK.": "Now you can reload this page - the warning will disappear if everything is OK.", + "Ordina Sezioni Homepage": "Sort Homepage Sections", + "Ordina per": "Sort by", + "Ordinamento": "Sorting", + "Ordinamento libri": "Book sorting", + "Ordine salvato con successo!": "Order saved successfully!", + "Ordine:": "Order:", + "Organizza e gestisci i generi letterari della biblioteca": "Organize and manage library literary genres", + "Organizza scaffali, mensole e posizioni per la biblioteca fisica": "Organize shelves, levels, and positions for the physical library", + "Ospite": "Guest", + "Ottieni le chiavi da Google reCAPTCHA": "Get keys from Google reCAPTCHA", + "Ottimizza l'evento per i motori di ricerca e i social media": "Optimize event for search engines and social media", + "Ottimizzazione": "Optimization", + "Ottimizzazione SEO (Meta Tags)": "SEO Optimization (Meta Tags)", + "Ottimizzazione SEO e Social Media": "SEO and Social Media Optimization", + "Output atteso: cartella vendor/ con sottocartelle (slim, monolog, etc.)": "Expected output: vendor/ folder with subfolders (slim, monolog, etc.)", + "PDF": "PDF", + "PDF o ePub, max 100 MB": "PDF or ePub, max 100 MB", + "PHP mail()": "PHP mail()", + "PHP mail() - Predefinito": "PHP mail() - Default", + "PHPMailer": "PHPMailer", + "PNG, SVG, JPG o WebP (max 2MB)": "PNG, SVG, JPG or WebP (max 2MB)", + "Paese": "Country", + "Pagina": "Page", + "Pagina Cookie Policy": "Cookie Policy Page", + "Pagina Non Trovata": "Page Not Found", + "Pagina \\": "Page \\", + "Pagina aggiornata con successo.": "Page updated successfully.", + "Pagina attiva (visibile sul sito)": "Active page (visible on site)", + "Pagina non trovata.": "Page not found.", + "Pagina precedente": "Previous page", + "Pagina successiva": "Next page", + "Paginazione eventi": "Events pagination", + "Pagine": "Pages", + "Pannello": "Panel", + "Panoramica generale": "General overview", + "Panoramica generale di Pinakes": "General overview of Pinakes", + "Panoramica completa di prestiti, ritiri e prenotazioni": "Complete overview of loans, pickups and reservations", + "Paragrafo": "Paragraph", + "Paragraph": "Paragraph", + "Parametri di Ricerca": "Search Parameters", + "Parametri non validi": "Invalid parameters.", + "Parametro ISBN mancante.": "Missing ISBN parameter.", + "Parametro category_id obbligatorio.": "Parameter category_id is required.", + "Parametro cover_url mancante.": "Missing cover_url parameter.", + "Parametro division_id obbligatorio.": "Parameter division_id is required.", + "Parole Chiave": "Keywords", + "Parole Chiave SEO": "SEO Keywords", + "Parole chiave": "Keywords", + "Parole chiave SEO": "SEO Keywords", + "Parole chiave per i motori di ricerca (impatto SEO limitato). Separate da virgola.": "Keywords for search engines (limited SEO impact). Comma separated.", + "Password": "Password", + "Password aggiornata con successo.": "Password updated successfully.", + "Password dimenticata": "Forgot password", + "Password dimenticata?": "Forgot password?", + "Password iniziale": "Initial Password", + "Password resettata con successo!": "Password reset successfully!", + "Password troppo lunga (massimo 128 caratteri)": "Password too long (maximum 128 characters)", + "Pattern URL": "URL Pattern", + "Pendente": "Pending", + "Pending": "Pending", + "Per aggiornare automaticamente la sitemap ogni giorno:": "To automatically update sitemap daily:", + "Per assistenza, contatta l'amministrazione della biblioteca.": "For assistance, contact the library administration.", + "Per inserire il codice JavaScript Analytics (Google Analytics, Matomo, ecc.), vai su {{variabile}} per inserire dati dinamici.": "Customize the content of automatic emails with the TinyMCE editor. Use placeholders {{variable}} to insert dynamic data.", + "Personalizza il contenuto delle mail automatiche con l'editor TinyMCE. Usa i segnaposto sospeso e richiede approvazione. Scegli un'opzione:": "This user is in suspended state and requires approval. Choose an option:", + "Radice": "Root", + "Rallenta l'importazione": "Slows down import", + "Recensione (opzionale)": "Review (optional)", + "Recensione approvata": "Review approved", + "Recensione del": "Review on", + "Recensione inviata con successo!": "Review submitted successfully!", + "Recensione inviata con successo! Sarà pubblicata dopo l'approvazione di un amministratore.": "Review successfully submitted! It will be published after administrator approval.", + "Recensione inviata!": "Review submitted!", + "Recensione per \"%s\" da %s - %s": "Review for \"%s\" by %s - %s", + "Recensione rifiutata": "Review rejected", + "Recensione eliminata": "Review deleted", + "La recensione è stata eliminata definitivamente.": "The review has been permanently deleted.", + "Elimina recensione": "Delete review", + "Vuoi eliminare definitivamente questa recensione? Questa azione non può essere annullata.": "Do you want to permanently delete this review? This action cannot be undone.", + "Impossibile eliminare la recensione": "Unable to delete the review", + "Operazione non riuscita": "Operation failed", + "Recensioni": "Reviews", + "Recensioni Approvate": "Approved Reviews", + "Recensioni Rifiutate": "Rejected Reviews", + "Recensioni utenti": "User reviews", + "Recente": "Recent", + "Recupera Password": "Recover Password", + "Referente": "Contact Person", + "Registra Restituzione": "Register Return", + "Registra prestito": "Register loan", + "Registra restituzione": "Register return", + "Registra restituzione prestito": "Register loan return", + "Registra una prenotazione per permettere ad un utente di riservare un libro specifico": "Register a reservation to allow a user to reserve a specific book", + "Registrati": "Register", + "Registrati Ora": "Register Now", + "Registrato da": "Registered from", + "Registrato il": "Registered on", + "Registrazione": "Registration", + "Registrazione Completata": "Registration Completed", + "Registrazione completata": "Registration completed", + "Registrazione completata! Effettua l'accesso": "Registration completed! Please sign in", + "Reimposta password": "Reset password", + "Reindirizzamento verso dominio non autorizzato bloccato.": "Redirect to an unauthorized domain blocked.", + "Reinstalla da Capo": "Reinstall from Scratch", + "Remoto": "Remote", + "Report": "Report", + "Report Integrità Dati": "Data Integrity Report", + "Report e analisi": "Reports and analytics", + "Requisiti": "Requirements", + "Requisiti del plugin:": "Plugin requirements:", + "Requisiti di Sistema": "System Requirements", + "Requisiti di sistema non soddisfatti": "System requirements not met", + "Richiesto": "Required", + "Reset": "Reset", + "Reset Filtri": "Reset Filters", + "Reset anni": "Reset years", + "Resetta Password": "Reset Password", + "Recupera la tua password": "Recover your password", + "Abbiamo ricevuto una richiesta di reset della password per il tuo account.": "We received a request to reset the password for your account.", + "Clicca sul pulsante qui sotto per resettare la tua password:": "Click the button below to reset your password:", + "Oppure copia e incolla questo link nel tuo browser:": "Or copy and paste this link in your browser:", + "Questo link scadrà tra 2 ore.": "This link will expire in 2 hours.", + "Se non hai richiesto il reset della password, puoi ignorare questa email. Il tuo account rimane sicuro.": "If you did not request a password reset, you can ignore this email. Your account remains secure.", + "Ciao": "Hello", + "Restituito": "Returned", + "Restituito in ritardo": "Returned late", + "Restituito regolarmente": "Returned on time", + "Restituzione": "Return", + "Restituzione prestito": "Loan return", + "Restituzione prestito #%s": "Loan Return #%s", + "Ricarica Dewey (seed)": "Reload Dewey (seed)", + "Ricarica Pagina": "Reload Page", + "Ricerca": "Search", + "Ricerca Libro": "Search Book", + "Ricerca Utente": "Search User", + "Ricerca in corso...": "Searching...", + "Ricerca rapida": "Quick Search", + "Riceverai un link di reset via email. Il link sarà valido per 24 ore.": "You will receive a reset link via email. The link will be valid for 24 hours.", + "Riceverai una conferma via email appena la richiesta sarà approvata.": "You'll receive an email confirmation once the request is approved.", + "Ricevuto": "Received", + "Richiede App:": "Requires App:", + "Richiede PHP:": "Requires PHP:", + "Richiedi Prestito": "Request Loan", + "Richiedi approvazione admin dopo la conferma email": "Require admin approval after email confirmation", + "Richiesta Inviata!": "Request Sent!", + "Richiesta Prestito": "Loan Request", + "Richiesta del %s": "Request of %s", + "Ricevuta di Prestito": "Loan Receipt", + "Ricevuta di prestito bibliotecario": "Library loan receipt", + "Richiesta di prestito dal %1$s al %2$s": "Loan request from %1$s to %2$s", + "Richiesta di prestito dal %s per 1 mese": "Loan request starting on %s for 1 month", + "Richiesta di prestito inviata con successo": "Loan request successfully submitted", + "Richiesta di prestito per \"%s\" da %s dal %s al %s": "Loan request for \"%s\" by %s from %s to %s", + "Richiesta di prestito per \\": "Loan request for \\", + "Richiesta fallita:": "Request failed:", + "Richiesta manuale": "Manual request", + "Richieste Manuali": "Manual Requests", + "Richiesta rifiutata": "Request rejected", + "Richieste Pendenti": "Pending Requests", + "Richieste di Prestito": "Loan Requests", + "Richieste di Prestito in Attesa": "Pending Loan Requests", + "Richieste in Sospeso": "Pending Requests", + "Richieste in sospeso": "Pending requests", + "Richieste pendenti": "Pending Requests", + "Richiesto il": "Requested on", + "Richiesto il %s": "Requested on %s", + "Ricordami": "Remember me", + "Ricordi la password?": "Remember your password?", + "Riepilogo Installazione": "Installation Summary", + "Riepilogo wishlist": "Wishlist Summary", + "Rifiuta": "Reject", + "Rifiuta Prestito?": "Reject Loan?", + "Rifiuta non essenziali": "Reject Non-Essential", + "Rifiuta prestito": "Reject loan", + "Rifiuta recensione": "Reject review", + "Rifiutata": "Rejected", + "Rifiutata il": "Rejected on", + "Rifiutato": "Rejected", + "Rifiuterai questa richiesta di prestito?": "Will you reject this loan request?", + "Ritiri da Confermare": "Pickups to Confirm", + "Riga %d (%s): %s": "Row %d (%s): %s", + "Riga %d: numero di colonne non corrispondente": "Row %d: column count does not match", + "Rigenera Sitemap": "Regenerate Sitemap", + "Rigenera adesso": "Regenerate now", + "Rimuovere dalla wishlist?": "Remove from Wishlist?", + "Rimuovere i libri associati prima di eliminare l'autore": "Remove associated books before deleting the author", + "Rimuovere i libri dell'editore prima di eliminarlo": "Remove publisher's books before deleting", + "Rimuovi": "Remove", + "Rimuovi dai Preferiti": "Remove from Favorites", + "Rimuovi dalla wishlist": "Remove from Wishlist", + "Rimuovi editore": "Remove publisher", + "Rimuovi filtro": "Remove filter", + "Rimuovi immagine": "Remove image", + "Rimuovi immagine attuale": "Remove current image", + "Rimuovi immagine di sfondo attuale": "Remove current background image", + "Rimuovi logo attuale": "Remove current logo", + "Rimuovi tutti i filtri": "Remove all filters", + "Rinnova": "Renew", + "Rinnova prestito (+14 giorni)": "Renew loan (+14 days)", + "Rinnova prestito?": "Renew loan?", + "Rinnovare il prestito? La scadenza verrà estesa di 14 giorni.": "Renew loan? The due date will be extended by 14 days.", + "Rinnovi": "Renewals", + "Rinnovi Effettuati:": "Renewals Made:", + "Rinnovi effettuati": "Renewals made", + "Riordina trascinando gli elementi": "Reorder by dragging elements", + "Ripeti la password": "Repeat password", + "Ripristina Default": "Reset to Default", + "Ripristino": "Restore", + "Riprova": "Retry", + "Riservato": "Reserved", + "Risolvi i problemi indicati sopra e ricarica la pagina.": "Fix the issues indicated above and reload the page.", + "Risorsa": "Resource", + "Risorse esterne": "External Resources", + "Rispettiamo il tuo diritto alla privacy. Puoi scegliere di non consentire alcuni tipi di cookie. Le tue preferenze si applicheranno all'intero sito web.": "We respect your right to privacy. You can choose not to allow some types of cookies. Your preferences will apply to the entire website.", + "Rispondi": "Reply", + "Risposta": "Reply", + "Risposta JSON": "JSON Response", + "Risposta non valida dal servizio ISBN.": "Invalid response from the ISBN service.", + "Risposta non valida. Controlla la console per dettagli.": "Invalid response. Check the console for details.", + "Risultati": "Results", + "Risultati per '%s' - Catalogo Biblioteca": "Results for '%s' - Library Catalog", + "Rossi": "Doe", + "Route Comuni": "Common Routes", + "Route Tradotte": "Translated Routes", + "Ruolo": "Role", + "Ruolo:": "Role:", + "SDK": "SDK", + "SEO - Meta Description": "SEO - Meta Description", + "SEO Base": "Basic SEO", + "SEO Base (Meta Tags)": "Base SEO (Meta Tags)", + "SMTP (custom)": "SMTP (custom)", + "SMTP Host": "SMTP Host", + "SMTP Password": "SMTP Password", + "SMTP Personalizzato": "Custom SMTP", + "SMTP Port": "SMTP Port", + "SMTP Username": "SMTP Username", + "SMTP personalizzato": "Custom SMTP", + "SSL": "SSL", + "Salva": "Save", + "Salva API Key": "Save API key", + "Salva Autore": "Save Author", + "Salva Contatti": "Save Contacts", + "Salva Editore": "Save Publisher", + "Salva Identità": "Save Identity", + "Salva Impostazioni": "Save Settings", + "Salva Impostazioni Avanzate": "Save Advanced Settings", + "Salva Libro": "Save Book", + "Salva Lingua": "Save Language", + "Salva Modifiche": "Save Changes", + "Salva Privacy Policy": "Save Privacy Policy", + "Salva Route": "Save Routes", + "Salva Template": "Save Template", + "Salva Testi Cookie Banner": "Save Cookie Banner Texts", + "Salva filtri correnti": "Save current filters", + "Salva identità": "Save identity", + "Salva impostazioni email": "Save email settings", + "Salva impostazioni etichette": "Save label settings", + "Salva in UTF-8": "Save as UTF-8", + "Salva la API key in un luogo sicuro. Non sarà possibile visualizzarla nuovamente dopo la creazione.": "Save the API key in a safe place. It will not be possible to view it again after creation.", + "Salva modifiche": "Save changes", + "Salva modifiche Homepage": "Save Homepage Changes", + "Salva template": "Save template", + "Salva testi banner": "Save banner texts", + "Salva utente": "Save User", + "Salvataggio in corso...": "Saving...", + "Salvataggio...": "Saving...", + "Sarà pubblicata dopo l'approvazione di un amministratore.": "It will be published after administrator approval.", + "Sarà utilizzata per accedere al sistema": "Will be used to log in to the system", + "Sarà visualizzato nell'header e in tutto il sito": "Will be displayed in the header and throughout the site", + "Scadenza": "Due date", + "Scadenza Mancante": "Missing Due Date", + "Scadenza tessera": "Card Expiration", + "Scadenza:": "Due date:", + "Scadenza: %s": "Expiry: %s", + "Scaduto": "Expired", + "Scaduta": "Expired", + "Scaduta il": "Expired on", + "Scaffale": "Bookcase", + "Scaffale *": "Bookcase *", + "Scaffale Narrativa": "Fiction Bookcase", + "Scaffali": "Bookcases", + "Scaffali e mensole": "Shelves and racks", + "Scarica": "Download", + "Scarica copertine": "Fetch covers", + "Scarica PDF": "Download PDF", + "Scarica Ricevuta PDF": "Download PDF Receipt", + "Scarica ricevuta PDF": "Download PDF receipt", + "Scarica automaticamente la ricevuta PDF dopo la creazione del prestito.": "Automatically download the PDF receipt after creating the loan.", + "Scaricamento copertine...": "Fetching covers...", + "Copertine scaricate:": "Covers fetched:", + "Già presenti o senza ISBN:": "Already present or no ISBN:", + "Nessuna copertina da scaricare": "No covers to fetch", + "Scraping fallito": "Scraping failed", + "Download aggiornamento": "Downloading update", + "Download copertina fallito": "Cover download failed", + "Download fallito": "Download failed", + "Immagine non valida": "Invalid image", + "Formato immagine non supportato": "Unsupported image format", + "Errore processamento immagine": "Image processing error", + "Errore salvataggio immagine": "Image save error", + "Scarica Audiobook": "Download Audiobook", + "Scarica JSON": "Download JSON", + "Scarica eBook": "Download eBook", + "Scarica esempio_import_libri.csv": "Download example_import_books.csv", + "Scarica il CSV di esempio con 3 libri già compilati per capire il formato corretto e iniziare subito.": "Download the example CSV with 3 pre-filled books to understand the correct format and get started immediately.", + "Scarica il file CSV di esempio": "Download the example CSV file", + "Scarica l'eBook in formato digitale": "Download the eBook in digital format", + "Scarso": "Poor", + "Scorri a destra per vedere tutte le colonne": "Scroll right to see all columns", + "Sincronizza Copertine": "Sync Covers", + "Sincronizzare le copertine?": "Sync covers?", + "Questa operazione scaricherà le copertine mancanti per tutti i libri con ISBN. Può richiedere diversi minuti.": "This operation will download missing covers for all books with ISBN. It may take several minutes.", + "Sì, sincronizza": "Yes, sync", + "Sincronizzazione...": "Syncing...", + "Sincronizzazione completata!": "Sync completed!", + "Copertine sincronizzate: %s": "Covers synced: %s", + "Copertine già presenti: %s": "Covers already present: %s", + "Si è verificato un errore durante la sincronizzazione": "An error occurred during synchronization", + "Sincronizza copertine mancanti via scraping": "Sync missing covers via scraping", + "Scegli": "Choose", + "Scegli come ordinare i libri nella sezione": "Choose how to sort books in this section", + "Scegli Icona Font Awesome": "Choose Font Awesome Icon", + "Scegli come inviare le email dal sistema. Puoi usare la funzione PHP mail(), PHPMailer o un server SMTP esterno.": "Choose how to send emails from the system. You can use the PHP mail() function, PHPMailer or an external SMTP server.", + "Scegli come inviare le email dal sistema. Puoi usare la funzione PHP con il percorso corretto di PHP sul tuo server": "Replace /usr/bin/php with the correct PHP path on your server", + "Sottocategoria": "Subcategory", + "Sottogenere": "Subgenre", + "Sottogenere specifico (opzionale)": "Specific subgenre (optional)", + "Spazio libero": "Free space", + "Sottogeneri": "Subgenres", + "Sottotitolo": "Subtitle", + "Sottotitolo CTA": "CTA Subtitle", + "Sottotitolo del libro (opzionale)": "Book subtitle (optional)", + "Sottotitolo sezione": "Section Subtitle", + "Staff": "Staff", + "Staff:": "Staff:", + "Stai per aggiornare Pinakes alla versione": "You are about to update Pinakes to version", + "Stai per eliminare": "You are about to delete", + "Stai per unire": "You are about to merge", + "Stai utilizzando l'ultima versione.": "You are using the latest version.", + "Stai utilizzando l'ultima versione disponibile.": "You are using the latest available version.", + "Stampa": "Print", + "Stampa etichetta": "Print label", + "Standard": "Standard", + "Standard Tirrenia catalogazione": "Standard Tirrenia cataloging", + "Standard dorso libri (più comune)": "Standard book spine (most common)", + "Statistiche": "Statistics", + "Statistiche Prestiti": "Loan Statistics", + "Statistiche Rapide": "Quick Statistics", + "Statistiche:": "Statistics:", + "Stato": "Status", + "Stato API": "API Status", + "Stato API key aggiornato con successo.": "API key status updated successfully.", + "Stato Incongruente": "Status Mismatch", + "Stato dell'installazione:": "Installation status:", + "Stato della copia": "Copy status", + "Stato e Gestione": "Status and Management", + "Stato attuale:": "Current status:", + "Stato prestito": "Loan status", + "Stato prestito corrente": "Current loan status", + "Stato prestito non valido.": "Invalid loan status.", + "Stato:": "Status:", + "Status attuale di questa copia del libro": "Current status of this book copy", + "Storico Prestiti": "Loan History", + "Nella stessa collana": "In the same series", + "Volumi di quest'opera": "Volumes of this work", + "volumi": "volumes", + "Questo libro è il volume %s dell'opera": "This book is volume %s of the work", + "Gestione Collane": "Series Management", + "Gestisci le collane e le serie di libri": "Manage book series and collections", + "Collane totali": "Total series", + "Libri nelle collane": "Books in series", + "Nessuna collana trovata. Aggiungi una collana a un libro per iniziare.": "No series found. Add a series to a book to get started.", + "Collane": "Series", + "Serie e collane di libri": "Book series and collections", + "Rinomina collana": "Rename series", + "Rinomina": "Rename", + "Unisci con altra collana": "Merge with another series", + "Nome collana di destinazione": "Target series name", + "Unisci": "Merge", + "Sei sicuro? Tutti i libri verranno spostati nella collana di destinazione.": "Are you sure? All books will be moved to the target series.", + "Crea opera multi-volume": "Create multi-volume work", + "Crea un libro padre che raccoglie tutti i volumi di questa collana.": "Create a parent book that collects all volumes of this series.", + "Titolo dell'opera completa": "Title of the complete work", + "Crea opera": "Create work", + "Collana rinominata: %d libri aggiornati": "Series renamed: %d books updated", + "Nome collana non valido": "Invalid series name", + "Collane unite: %d libri spostati in \"%s\"": "Series merged: %d books moved to \"%s\"", + "Parametri non validi per l'unione": "Invalid parameters for merge", + "Opera \"%s\" creata con %d volumi": "Work \"%s\" created with %d volumes", + "Errore nella creazione dell'opera": "Error creating the work", + "Aggiungi volume": "Add volume", + "Cartaceo": "Paperback", + "eBook": "eBook", + "Audiolibro": "Audiobook", + "CD Audio": "Audio CD", + "Vinile": "Vinyl", + "LP": "LP", + "Cassetta": "Cassette", + "DVD": "DVD", + "Blu-ray": "Blu-ray", + "Digitale": "Digital", + "Cerca libro": "Search for a book", + "Titolo o ISBN...": "Title or ISBN...", + "Numero volume": "Volume number", + "Seleziona un libro": "Select a book", + "Volume aggiunto": "Volume added", + "Rimuovi volume?": "Remove volume?", + "Il libro non sarà eliminato, solo la relazione.": "The book will not be deleted, only the relationship.", + "Volume rimosso": "Volume removed", + "Configura come opera multi-volume": "Configure as multi-volume work", + "Errore database": "Database error", + "Nuova Collana": "New Series", + "Collana \"%s\" creata": "Series \"%s\" created", + "Descrizione della collana...": "Series description...", + "Salva descrizione": "Save description", + "Descrizione salvata": "Description saved", + "Assegna collana": "Assign series", + "Collana assegnata": "Series assigned", + "%d libri assegnati alla collana \"%s\"": "%d books assigned to series \"%s\"", + "Elimina collana": "Delete series", + "Rimuove la collana da tutti i libri. I libri non verranno eliminati.": "Removes the series from all books. Books will not be deleted.", + "Sei sicuro? La collana verrà rimossa da tutti i libri.": "Are you sure? The series will be removed from all books.", + "Collana \"%s\" eliminata (%d libri aggiornati)": "Series \"%s\" deleted (%d books updated)", + "International Standard Serial Number (per periodici)": "International Standard Serial Number (for periodicals)", + "ISSN Non Valido": "Invalid ISSN", + "ISSN deve essere nel formato XXXX-XXXX (8 cifre, l'ultima può essere X).": "ISSN must be in the format XXXX-XXXX (7 digits plus a check character (digit or X)).", + "ISSN non valido. Il formato corretto è XXXX-XXXX (8 cifre, l'ultima può essere X).": "Invalid ISSN. The correct format is XXXX-XXXX (7 digits plus a check character (digit or X)).", + "Relazione ciclica: questo libro è già opera padre del libro selezionato": "Cyclic relationship: this book is already a parent work of the selected book", + "Assegna": "Assign", + "es. 1234-5678": "e.g. 1234-5678", + "es. Harry Potter": "e.g. Harry Potter", + "Identificatori": "Identifiers", + "Inserisci un nome": "Enter a name", + "Nome della collana": "Series name", + "ISSN": "ISSN", + "Volumi": "Volumes", + "Successiva": "Next", + "Successivo": "Next", + "Successo": "Success", + "Successo!": "Success!", + "Suggerimenti": "Tips", + "Suggerimento": "Tip", + "Suggerimento:": "Tip:", + "Suggerisci collocazione": "Suggest location", + "Suggerito scaffale #${data.scaffale_id}": "Suggested bookcase #${data.scaffale_id}", + "Suggerito:": "Suggested:", + "Supporto": "Support", + "Sì": "Yes", + "Sì, Aggiorna": "Yes, Update", + "Sì, Salva": "Yes, Save", + "Sì, aggiorna": "Yes, update", + "Sì, approva": "Yes, approve", + "Sì, attiva": "Yes, activate", + "Sì, disattiva": "Yes, deactivate", + "Sì, disinstalla": "Yes, uninstall", + "Sì, elimina": "Yes, delete", + "Sì, elimina!": "Yes, delete it!", + "Sì, rimuovi": "Yes, Remove", + "TLS": "TLS", + "Tag": "Tag", + "Telefono": "Phone", + "Telefono:": "Phone:", + "Telefono *": "Phone *", + "Telefono Referente": "Contact Person Phone", + "Tema": "Theme", + "Template": "Templates", + "Template Email": "Email Templates", + "Template aggiornato con successo!": "Template updated successfully!", + "Template email": "Email templates", + "Termini": "Terms", + "Termini di Servizio": "Terms of Service", + "Tessera biblioteca": "Library Card", + "Test": "Test", + "Test Connessione": "Test Connection", + "Test del cron job:": "Cron job test:", + "Testi Banner": "Banner Texts", + "Testi Banner Iniziale": "Initial Banner Texts", + "Testi Cookie Banner": "Cookie Banner Texts", + "Testi Modale Preferenze": "Preferences Modal Texts", + "Testi categorie cookie": "Cookie categories texts", + "Testo Privacy": "Privacy Text", + "Testo che apparirà nel footer del sito": "Text that will appear in the site footer", + "Testo checkbox": "Checkbox text", + "Testo della checkbox privacy nel form": "Privacy checkbox text in the form", + "Testo introduttivo": "Introductory text", + "Testo principale mostrato nel banner. Puoi usare HTML.": "Main text shown in the banner. You can use HTML.", + "Testo pulsante": "Button Text", + "Testo pulsante \"Accetta tutti\"": "\"Accept all\" button text", + "Testo pulsante \"Preferenze\"": "\"Preferences\" button text", + "Testo pulsante \"Rifiuta non essenziali\"": "\"Reject non-essential\" button text", + "Testo pulsante \"Salva selezionati\"": "\"Save selected\" button text", + "Ti abbiamo inviato un'email con il link per confermare l'indirizzo.": "We have sent you an email with the link to confirm your address.", + "Timestamp": "Timestamp", + "Tipo": "Type", + "Tipo Acquisizione": "Acquisition Type", + "Tipo Card": "Card Type", + "Tipo Contenuto": "Content Type", + "Tipo MIME non valido. Solo file CSV sono accettati.": "Invalid MIME type. Only CSV files are accepted.", + "Tipo OG": "OG Type", + "Tipo Utente": "User Type", + "Tipo acquisizione": "Acquisition type", + "Tipo di file non supportato. Solo JPEG e PNG sono consentiti.": "Unsupported file type. Only JPEG and PNG are allowed.", + "Tipo di file non valido.": "Invalid file type.", + "Tipo di file non valido. Carica un'immagine reale.": "Invalid file type. Please upload a real image.", + "Tipo non valido": "Invalid type.", + "Tipo utente": "User Type", + "Tipologia account": "Account Type", + "Tipologia:": "Type:", + "Titolo": "Title", + "Titolo:": "Title:", + "Fonte dati:": "Data source:", + "Fonti consultate:": "Sources consulted:", + "Vedi alternative": "View alternatives", + "Dati alternativi disponibili": "Alternative data available", + "Copertina:": "Cover:", + "Usa": "Use", + "Nessuna alternativa disponibile": "No alternatives available", + "Valore applicato": "Value applied", + "Editore applicato": "Publisher applied", + "Copertina applicata": "Cover applied", + "Titolo (opzionale)": "Title (optional)", + "Titolo 1": "Heading 1", + "Titolo 2": "Heading 2", + "Titolo 3": "Heading 3", + "Titolo A-Z": "Title A-Z", + "Titolo CTA": "CTA Title", + "Titolo Evento": "Event Title", + "Titolo Modale": "Modal Title", + "Titolo OG": "OG Title", + "Titolo Open Graph": "Open Graph Title", + "Titolo Pagina": "Page Title", + "Titolo SEO": "SEO Title", + "Titolo Twitter": "Twitter Title", + "Titolo Z-A": "Title Z-A", + "Titolo del libro": "Book title", + "Titolo della sezione e le 4 card con le caratteristiche": "Section title and the 4 feature cards", + "Titolo e descrizione mostrati sopra i caroselli dei generi": "Title and description shown above genre carousels", + "Titolo libro": "Book title", + "Titolo mostrato quando condividi su Facebook/LinkedIn. Se vuoto, usa il titolo SEO o hero.": "Title shown when sharing on Facebook/LinkedIn. If empty, uses the SEO or hero title.", + "Titolo non disponibile": "Title not available", + "Titolo obbligatorio mancante": "Missing required title", + "Titolo pagina": "Page title", + "Titolo principale (H1)": "Main Title (H1)", + "Titolo sezione": "Section Title", + "Titolo troppo lungo (max 255 caratteri)": "Title too long (max 255 characters)", + "Titolo, sottotitolo, descrizione...": "Title, subtitle, description...", + "Titolo...": "Title...", + "Token CSRF non valido": "Invalid CSRF token.", + "Token CSRF non valido. Riprova.": "Invalid CSRF token. Please try again.", + "Token configurato": "Token configured", + "Token configurato — lascia vuoto per mantenere": "Token configured — leave empty to keep", + "Token di sicurezza non valido. Riprova.": "Invalid security token. Please try again.", + "Top 10 Lettori Più Attivi": "Top 10 Most Active Readers", + "Top 10 Libri Più Prestati": "Top 10 Most Loaned Books", + "Torna Indietro": "Go Back", + "Torna agli Eventi": "Back to Events", + "Torna agli eventi": "Back to events", + "Torna ai Libri": "Back to Books", + "Torna ai Prestiti": "Back to Loans", + "Torna al login": "Back to login", + "Torna all'Applicazione": "Back to Application", + "Torna all'elenco": "Back to list", + "Torna alla Configurazione Database": "Back to Database Configuration", + "Torna alla categoria superiore": "Back to parent category", + "Torna alla dashboard": "Back to Dashboard", + "Torna alla lista": "Back to list", + "Torna alla panoramica eventi": "Back to all events", + "Torna alle Impostazioni": "Back to Settings", + "Torna alle Impostazioni CMS": "Back to CMS Settings", + "Torna alle Lingue": "Back to Languages", + "Torna alle Prenotazioni": "Back to Reservations", + "Total users:": "Total users:", + "Totale": "Total", + "Totale Autori": "Total Authors", + "Totale Generi": "Total Genres", + "Totale Libri": "Total Books", + "Totale Prestiti": "Total Loans", + "Trasforma Pinakes in un catalogo di sola consultazione": "Transform Pinakes into a browse-only catalogue", + "Totale autori": "Total authors", + "Totale editori:": "Total publishers:", + "Totale libri": "Total books", + "Totale libri presenti": "Total books in collection", + "Totale utenti:": "Total users:", + "Totale: %s righe": "Total: %s rows", + "Tracce": "Tracks", + "Tracklist": "Tracklist", + "Traduzioni e localizzazione": "Translations and localization", + "Trascina le sezioni per riordinarle. L'ordine sarà salvato automaticamente e rispecchiato nella homepage.": "Drag sections to reorder them. The order will be saved automatically and reflected on the homepage.", + "Trascina per riordinare • Il codice deve essere univoco": "Drag to reorder • Code must be unique", + "Trascina per riordinare • Ogni scaffale + livello deve essere univoco": "Drag to reorder • Each bookcase + level must be unique", + "Trascina qui il file CSV o %{browse}": "Drag CSV file here or %{browse}", + "Trascina qui il file ZIP del plugin o %{browse}": "Drag the plugin ZIP file here or %{browse}", + "Trascina qui il logo o %{browse}": "Drag logo here or %{browse}", + "Trascina qui l'immagine di sfondo o %{browse}": "Drag the background image here or %{browse}", + "Trascina qui l'immagine o %{browse}": "Drag image here or %{browse}", + "Trascina qui l'immagine, %{browse} o importa da": "Drag image here, %{browse} or import from", + "Trascina qui la copertina del libro o %{browse}": "Drag the book cover here or %{browse}", + "Trascina qui la copertina del libro o clicca per selezionare": "Drag the book cover here or click to select", + "Trigger database configurati": "Database triggers configured", + "Trigger importati OK": "Triggers imported OK", + "Troppi tentativi. Attendi qualche minuto prima di riprovare": "Too many attempts. Please wait a few minutes before trying again", + "Trovato": "Found", + "Tutorial": "Tutorial", + "Tutte le date sono in formato ISO 8601 (YYYY-MM-DD HH:MM:SS)": "All dates are in ISO 8601 format (YYYY-MM-DD HH:MM:SS)", + "Tutte le mensole": "All shelves", + "Tutte le notifiche del sistema": "All system notifications", + "Tutte le route devono iniziare con": "All routes must start with", + "Tutti": "All", + "Tutti gli anni": "All years", + "Tutti gli autori": "All authors", + "Tutti gli editori": "All publishers", + "Tutti gli eventi": "All events", + "Tutti gli scaffali": "All bookcases", + "Tutti gli stati": "All statuses", + "Tutti i controlli di integrità sono passati con successo!": "All integrity checks passed successfully!", + "Tutti i diritti riservati.": "All rights reserved.", + "Tutti i filtri sono stati rimossi": "All filters have been removed", + "Tutti i generi": "All genres", + "Tutti i libri": "All books", + "Tutti i messaggi ricevuti tramite il form contatti": "All messages received through contact form", + "Tutti i requisiti sono soddisfatti! Puoi procedere con l'installazione.": "All requirements are met! You can proceed with the installation.", + "Tutti i ruoli": "All roles", + "Tutti soddisfatti": "All met", + "Tutto aggiornato!": "All up to date!", + "Tutto": "All", + "Twitter": "Twitter", + "Twitter Card": "Twitter Card", + "URL Canonico": "Canonical URL", + "URL Canonico (opzionale)": "Canonical URL (optional)", + "URL Non Valido": "Invalid URL", + "URL OG": "OG URL", + "URL completo della pagina (auto-generato se vuoto)": "Full page URL (auto-generated if empty)", + "URL completo del sito (es: https://biblioteca.example.com). Usato per link nelle email (verifica account, reset password). Se lasciato vuoto, verrà auto-rilevato.": "Full site URL (e.g., https://biblioteca.example.com). Used for email links (account verification, password reset). If left blank, it will be auto-detected.", + "URL della pagina con la cookie policy": "URL of the page with cookie policy", + "URL della pagina con le tecnologie dei cookie": "URL of the page with cookie technologies", + "URL non valido o non permesso.": "Invalid or unauthorized URL.", + "URL non valido.": "Invalid URL.", + "URL principale del sito. Se vuoto, usa l'URL corrente.": "Main site URL. If empty, uses the current URL.", + "URL pubblico:": "Public URL:", + "URL sito web...": "Website URL...", + "URL...": "URL...", + "Ultima generazione:": "Last generated:", + "Ultima Versione": "Latest Version", + "Ultimi Arrivi": "Latest Arrivals", + "Ultimi Libri Aggiunti": "Latest Books Added", + "Ultimi Libri Inseriti": "Recently Added Books", + "Ultimi aggiunti (data creazione)": "Recently added (creation date)", + "Ultimi modificati (data aggiornamento)": "Recently edited (update date)", + "Ultima": "Last", + "Ultimo": "Last", + "Ultimo Aggiornamento": "Last Updated", + "Ultimo accesso": "Last access", + "Ultimo aggiornamento": "Last Update", + "Ultimo uso:": "Last used:", + "Umberto Eco": "Umberto Eco", + "Un altro aggiornamento è già in corso. Riprova più tardi.": "Another update is already in progress. Please try again later.", + "Un backup viene creato automaticamente prima di salvare": "A backup is created automatically before saving", + "Un'esperienza di lettura moderna, intuitiva e sempre a portata di mano": "A modern, intuitive reading experience always at your fingertips", + "Una chiave è già salvata. Inserisci un nuovo valore per aggiornarla oppure lascia vuoto per rimuoverla.": "A key is already stored. Enter a new value to update it or leave empty to remove it.", + "Una descrizione completa aiuta gli utenti a conoscere meglio l'autore": "A complete description helps users get to know the author better", + "Una mensola con livello %d esiste già in questo scaffale. Usa un livello diverso.": "A shelf with level %d already exists on this bookcase. Use a different level.", + "Una panoramica dei libri che hai salvato per non perderli di vista.": "An overview of the books you've saved to keep track of.", + "Unisciti alla nostra community di lettori e scopri il piacere della lettura con la nostra piattaforma moderna.": "Join our community of readers and discover the joy of reading with our modern platform.", + "Unisci autori": "Merge authors", + "Unisci editori": "Merge publishers", + "Uploader non disponibile": "Uploader not available", + "Usa 'localhost' (raccomandato, rileva automaticamente TCP/socket). Puoi forzare '127.0.0.1' per TCP.": "Use 'localhost' (recommended, auto-detects TCP/socket). You can force '127.0.0.1' for TCP.", + "Usa codici semplici (A, B, C...)": "Use simple codes (A, B, C...)", + "Usa i servizi online per precompilare automaticamente i dati del libro": "Use online services to automatically prefill book data", + "Usa il pulsante \"Rigenera adesso\" per crearla": "Use \"Regenerate now\" button to create it", + "Usa il separatore %s": "Use %s separator", + "Usa l'editor per formattare il testo, aggiungere link, immagini e altro": "Use the editor to format text, add links, images, and more", + "Usa l'editor per formattare il testo, aggiungere link, immagini e altro.": "Use the editor to format text, add links, images, and more.", + "Usa le frecce ← → per saltare": "Use ← → arrows to skip", + "Usa questa azione dopo aver importato un grande numero di libri o modifiche ai contenuti CMS.": "Use this action after importing a large number of books or CMS content changes.", + "Usa questo campo per personalizzare lo stile del sito senza modificare i file di tema.": "Use this field to customize site style without modifying theme files.", + "Usata per login e comunicazioni.": "Used for login and communications.", + "Username": "Username", + "Users": "Users", + "Utente": "User", + "Utente admin creato:": "Admin user created:", + "Utente aggiornato con successo!": "User updated successfully!", + "Utente approvato con successo!": "User approved successfully!", + "Utente attivato direttamente!": "User activated directly!", + "Utente creato con successo!": "User created successfully!", + "Utente prenotante": "User making reservation", + "Utente sconosciuto": "Unknown user", + "Utente senza nome": "Unnamed user", + "Utente %s (%s) si è registrato": "User %s (%s) has registered", + "Utente:": "User:", + "Utenti": "Users", + "Utenti Attivi": "Active Users", + "Utenti registrati": "Registered users", + "Utilizza l'editor TinyMCE per formattare il testo e Uppy per caricare immagini di alta qualità. Le modifiche saranno immediatamente visibili nella pagina pubblica.": "Use the TinyMCE editor to format text and Uppy to upload high quality images. Changes will be immediately visible on the public page.", + "Utilizziamo i cookie per migliorare la tua esperienza. Continuando a visitare questo sito, accetti il nostro uso dei cookie.": "We use cookies to improve your experience. By continuing to visit this site, you accept our use of cookies.", + "Vai": "Go", + "Vai al Login": "Go to Login", + "Vai al login": "Go to login", + "Vai all'Applicazione": "Go to Application", + "Vai alla Home": "Go to Home", + "Valore compreso tra 1 e 30 giorni. Consigliato: 3 giorni": "Value between 1 and 30 days. Recommended: 3 days", + "Valore non valido": "Invalid value", + "Valutazione *": "Rating *", + "Valutazione non valida (1-5 stelle)": "Invalid rating (1-5 stars)", + "Variabili disponibili:": "Available variables:", + "Vecchio": "Old", + "Vedi": "View", + "Vedi Dettagli": "View Details", + "Vedi dettagli": "View details", + "Vedi istruzioni sotto per correggere manualmente.": "See instructions below to fix manually.", + "Vedi tutte le notifiche": "View all notifications", + "Vedi tutti": "View all", + "Vedi tutti gli eventi": "View all events", + "Verifica che il database sia accessibile e configurato correttamente nel file .env": "Verify that the database is accessible and correctly configured in the .env file", + "Verifica che le credenziali del database nel file .env siano corrette": "Verify that the database credentials in the .env file are correct", + "Verifica coerenza e integrità del database": "Check database consistency and integrity", + "Verifica completata OK": "Verification completed OK", + "Verifica i permessi di esecuzione: chmod +x cron/automatic-notifications.php": "Verify execution permissions: chmod +x cron/automatic-notifications.php", + "Verifica in corso...": "Checking...", + "Verifica versioni": "Check versions", + "Verrà creato automaticamente un backup prima dell'aggiornamento.": "A backup will be automatically created before updating.", + "Verrà creato un backup completo del database.": "A complete database backup will be created.", + "Verifica installazione...": "Verifying installation...", + "Verificato": "Verified", + "Versione": "Version", + "Versione Installata": "Installed Version", + "Versione Installer:": "Installer Version:", + "Versione non specificata": "Version not specified", + "Versione non trovata": "Version not found", + "Versione:": "Version:", + "Via Roma 123, 00100 Roma RM, Italia": "123 Main St, New York, NY 10001, USA", + "Via, numero civico, città, CAP": "Street, number, city, ZIP code", + "Via, numero...": "Street, number...", + "Video": "Video", + "Video tutorial": "Video tutorial", + "Visibile": "Visible", + "Visibile pubblicamente sulla pagina contatti": "Publicly visible on contact page", + "Visibilità Sezione Eventi": "Events Section Visibility", + "Visibilità aggiornata!": "Visibility updated!", + "Visita il sito ufficiale": "Visit official website", + "Visualizza": "View", + "Visualizza Libro": "View Book", + "Visualizza Tutte le Categorie": "View All Categories", + "Visualizza Tutto il Catalogo": "View Entire Catalog", + "Visualizza dettagli": "View details", + "Visualizza dettagli libro": "View book details", + "Visualizza e esporta l'elenco dei libri per posizione fisica": "View and export the list of books by physical position", + "Visualizza e gestisci tutti i prestiti della biblioteca": "View and manage all library loans", + "Visualizza pagina live": "View live page", + "Visualizzazione da _START_ a _END_ di _TOTAL_ libri": "Showing _START_ to _END_ of _TOTAL_ books", + "Visualizzazione gerarchica di generi e sottogeneri": "Hierarchical view of genres and subgenres", + "Voci totali": "Total entries", + "Vuoi aggiornare il libro \"${title}\"?": "Do you want to update the book \"${title}\"?", + "Vuoi aggiornare il libro \"%s\"?": "Do you want to update the book \"%s\"?", + "Vuoi aggiornare lo stato di questa copia?": "Do you want to update the status of this copy?", + "Vuoi approvare questa recensione e renderla visibile sul sito?": "Do you want to approve this review and make it visible on the site?", + "Vuoi attivare questo plugin?": "Do you want to activate this plugin?", + "Vuoi aumentare il numero di copie di questo libro?": "Do you want to increase the number of copies of this book?", + "Vuoi disattivare questo plugin?": "Do you want to deactivate this plugin?", + "Vuoi eliminare questo elemento?": "Do you want to delete this item?", + "Vuoi procedere?": "Do you want to proceed?", + "Vuoi rifiutare questa recensione? L'utente verrà avvisato dell'esito.": "Do you want to reject this review? The user will be notified of the outcome.", + "Wishlist": "Wishlist", + "Working...": "Working...", + "Zona Pericolosa": "Danger Zone", + "agosto": "August", + "acquisto": "purchase", + "al": "to", + "altamente consigliato": "highly recommended", + "aprile": "April", + "autori": "authors", + "biblioteca, prestito libri, catalogo online, scopri libri, prenotazioni": "library, book lending, online catalog, discover books, reservations", + "chiavi": "keys", + "chiavi tradotte": "translated keys", + "come nuovo autore": "as new author", + "completamento": "completion", + "con successo": "successfully", + "copi": "copi", + "copia": "copy", + "copie": "copies", + "crontab -e": "crontab -e", + "danneggiato": "damaged", + "della lingua desiderata.": "of the desired language.", + "di": "of", + "di %s": "of %s", + "dicembre": "December", + "directory": "directories", + "disattivata": "disabled", + "disponibile": "available", + "disponibili ora": "available now", + "donazione": "donation", + "dopo aver completato l'installazione.": "after completing the installation.", + "eBook (PDF/ePub)": "eBook (PDF/ePub)", + "eBook caricato!": "eBook uploaded!", + "eBook disponibile": "eBook available", + "editori": "publishers", + "elementi": "items", + "elemento": "item", + "elimina la cartella": "delete the folder", + "errore di comunicazione con il server": "server communication error", + "es. 0.450": "e.g. 0.450", + "es. 15": "e.g. 15", + "es. 19.90": "e.g. 19.90", + "es. 2020": "e.g. 2020", + "es. 2024": "e.g. 2024", + "es. 2025": "e.g. 2025", + "es. 21x14 cm": "e.g. 21x14 cm", + "es. 26 agosto 2025": "e.g. August 26, 2025", + "es. 320": "e.g. 320", + "es. 8842935786": "e.g. 8842935786", + "es. 978-88-429-3578-0": "e.g. 978-88-429-3578-0", + "es. 9788842935780": "e.g. 9788842935780", + "es. Acquisto, Donazione, Prestito": "e.g. Purchase, Donation, Loan", + "es. Biblioteca Civica": "e.g. Public Library", + "es. Copertina rigida, Brossura": "e.g. Hardcover, Paperback", + "es. Fantasy contemporaneo": "e.g. Contemporary Fantasy", + "es. I Classici": "e.g. The Classics", + "es. INV-2024-001": "e.g. INV-2024-001", + "es. Integrazione Sito Web": "e.g. Website Integration", + "es. Italiano, Inglese": "e.g. Italian, English", + "es. La morale anarchica": "e.g. The Anarchist Morality", + "es. Noir mediterraneo": "e.g. Mediterranean Noir", + "es. Prima edizione": "e.g. First edition", + "es. RSSMRA80A01H501U": "e.g. RSSMRA80A01H501U", + "es. Urban fantasy": "e.g. Urban fantasy", + "es. noreply@biblioteca.local": "e.g. noreply@library.local", + "es. romanzo, fantasy, avventura (separare con virgole)": "e.g. novel, fantasy, adventure (separate with commas)", + "eventi": "events", + "eventi, biblioteca, cultura": "events, library, culture", + "fallite.": "failed.", + "fas fa-users": "fas fa-users", + "febbraio": "February", + "gennaio": "January", + "giorni prima della scadenza": "days before expiry", + "giugno": "June", + "https://www.editore.com": "https://www.publisher.com", + "icone disponibili": "icons available", + "in attesa": "pending", + "in_corso": "in progress", + "in_ritardo": "overdue", + "info@editore.com": "info@publisher.com", + "installazione inglese usa": "English installation uses", + "kg": "kg", + "libri": "books", + "libri trovati": "books found", + "libro": "book", + "libro trovato": "book found", + "linea": "line", + "lingue": "languages", + "lingue. Errori:": "languages. Errors:", + "luglio": "July", + "maggio": "May", + "manutenzione": "maintenance", + "mario.rossi@email.it": "john.doe@email.com", + "marzo": "March", + "nella directory dell'applicazione.": "in the application directory.", + "nella nostra biblioteca.": "in our library.", + "novembre": "November", + "o multipli separati da |": "or multiple separated by |", + "o multipli: Engels;Marx": "or multiple: Engels;Marx", + "opzionale": "optional", + "opzionali": "optional", + "ottobre": "October", + "pagina": "page", + "pagine": "pages", + "per conformità GDPR.": "for GDPR compliance.", + "per evitare blocchi (delay di 3 secondi tra ogni richiesta).": "to avoid blocks (3 second delay between each request).", + "per il giorno": "for the day", + "per pagina": "per page", + "perso": "lost", + "preferiti": "favorites", + "premi Invio per crearne uno nuovo.": "press Enter to create a new one.", + "prenotazione attiva": "active reservation", + "prenotazioni attive": "active reservations", + "prenotato": "reserved", + "prestato": "on loan", + "prestiti attivi": "active loans", + "prestiti passati": "past loans", + "prestiti totali": "total loans", + "prestito attivo": "active loan", + "prestito passato": "past loan", + "prima di procedere.": "before proceeding.", + "recensione": "review", + "recensioni": "reviews", + "referente@editore.com": "contact@publisher.com", + "restituito": "returned", + "richiesta in sospeso": "pending request", + "richieste in sospeso": "pending requests", + "risultati": "results", + "risultato": "result", + "seleziona": "browse", + "seleziona file": "select file", + "selezionati": "selected", + "settembre": "September", + "sfoglia": "browse", + "sottogeneri": "subgenres", + "sul server tramite SSH.": "on the server via SSH.", + "titoli": "titles", + "utente@example.com": "user@example.com", + "utenti": "users", + "verranno automaticamente selezionati.": "will be automatically selected.", + "Български (BG)": "Bulgarian (BG)", + "עברית (HE)": "Hebrew (HE)", + "– Nessuno –": "– None –", + "••••••••": "••••••••", + "⚙️ Comportamento Automatico: Se inserisci codice in \"JavaScript Analitici\" o \"JavaScript Marketing\", i rispettivi toggle in Impostazioni Privacy verranno automaticamente selezionati.": "⚙️ Automatic Behavior: If you insert code in \"Analytics JavaScript\" or \"Marketing JavaScript\", the respective toggles in Privacy Settings will be automatically selected.", + "⚠️ AZIONE RICHIESTA: Installazione Dipendenze PHP": "⚠️ ACTION REQUIRED: PHP Dependencies Installation", + "⚠️ Privacy: Le mappe esterne vengono caricate solo se l'utente accetta i cookie Analytics.": "⚠️ Privacy: External maps are loaded only if the user accepts Analytics cookies.", + "✅ Dipendenze PHP installate correttamente": "✅ PHP dependencies installed correctly", + "✓ Connessione riuscita! Database è vuoto e pronto per l'installazione.": "✓ Connection successful! Database is empty and ready for installation.", + "✓ Crea autori mancanti": "✓ Create missing authors", + "✓ Crea editori mancanti": "✓ Create missing publishers", + "✓ Report errori": "✓ Error reporting", + "✓ Validazione dati": "✓ Data validation", + "❌ Errore di comunicazione con il server": "Communication error with the server", + "💡 Non hai accesso SSH?": "💡 Don't have SSH access?", + "📋 Importante: Devi elencare manualmente i cookie tracciati da questi script nella Pagina Cookie per conformità GDPR.": "📋 Important: You must manually list cookies tracked by these scripts in the Cookie Page for GDPR compliance.", + "📋 Istruzioni SSH (Click per espandere/chiudere)": "📋 SSH Instructions (Click to expand/collapse)", + "🔒 Sicurezza Importante": "🔒 Important Security", + "Gestione Temi": "Theme Management", + "Temi": "Themes", + "Personalizza l'aspetto dell'applicazione": "Customize the application appearance", + "Tema Attivo": "Active Theme", + "Temi Disponibili": "Available Themes", + "Personalizza": "Customize", + "Attivare questo tema?": "Activate this theme?", + "Errore durante l'attivazione": "Error during activation", + "Errore di rete": "Network error", + "Primario": "Primary", + "Secondario": "Secondary", + "Bottone": "Button", + "Testo Bottone": "Button Text", + "Accento": "Accent", + "Personalizza Tema": "Customize Theme", + "Torna ai temi": "Back to themes", + "Colori Tema": "Theme Colors", + "Personalizza la palette colori dell'applicazione": "Customize the application color palette", + "Colore Primario": "Primary Color", + "link, accenti": "links, accents", + "Colore Secondario": "Secondary Color", + "bottoni principali": "main buttons", + "Colore Bottoni CTA": "CTA Button Color", + "bottoni nelle card": "buttons in cards", + "Colore Testo Bottoni": "Button Text Color", + "Verifica Leggibilità": "Readability Check", + "Link di esempio": "Example link", + "Bottone CTA": "CTA Button", + "Bottone Primario": "Primary Button", + "Ripristina": "Reset", + "Contrasto": "Contrast", + "WCAG AA Conforme": "WCAG AA Compliant", + "AA Testo Grande": "AA Large Text", + "Insufficiente": "Insufficient", + "Ripristinare i colori?": "Reset colors to defaults?", + "Tema attivato con successo": "Theme activated successfully", + "Errore durante l'attivazione del tema": "Error activating theme", + "Colori ripristinati ai valori predefiniti": "Colors reset to defaults", + "Errore nel ripristino dei colori": "Error resetting colors", + "Tema non trovato": "Theme not found", + "Colore non valido": "Invalid color", + "Contrasto insufficiente tra bottone e testo (minimo 3:1). Attuale": "Insufficient contrast between button and text (minimum 3:1). Current", + "Tema salvato con successo": "Theme saved successfully", + "Errore nel salvataggio del tema": "Error saving theme", + "Utenti in Attesa di Approvazione": "Users Awaiting Approval", + "Invia Email": "Send Email", + "Confermi di voler attivare direttamente questo utente?": "Are you sure you want to activate this user directly?", + "Non includere tag": "Do not include tags", + "Il codice verrà inserito in un tag": "The code will be inserted in a tag", + "nell'header. Non includere i tag": "in the header. Do not include tags", + "Sicurezza Connessione": "Connection Security", + "Configura le impostazioni di sicurezza per le connessioni HTTPS": "Configure security settings for HTTPS connections", + "Attiva HTTPS solo se hai un certificato SSL valido installato. Attivare HSTS rende permanente il reindirizzamento HTTPS nel browser.": "Enable HTTPS only if you have a valid SSL certificate installed. Enabling HSTS makes HTTPS redirection permanent in the browser.", + "Info HSTS:": "HSTS Info:", + "HTTP Strict Transport Security forza i browser a usare solo connessioni HTTPS per 1 anno (raccomandato per produzione con SSL valido).": "HTTP Strict Transport Security forces browsers to use only HTTPS connections for 1 year (recommended for production with valid SSL).", + "Forza HTTPS": "Force HTTPS", + "Reindirizza automaticamente tutte le richieste HTTP a HTTPS": "Automatically redirect all HTTP requests to HTTPS", + "Abilita HSTS": "Enable HSTS", + "Attiva HTTP Strict Transport Security (max-age: 1 anno, include sottodomini)": "Enable HTTP Strict Transport Security (max-age: 1 year, includes subdomains)", + "Requisiti:": "Requirements:", + "Certificato SSL/TLS valido": "Valid SSL/TLS certificate", + "Tutte le risorse del sito devono essere HTTPS": "All site resources must be HTTPS", + "Sottodomini devono supportare HTTPS (se usati)": "Subdomains must support HTTPS (if used)", + "Funzionamento automatico:": "Automatic operation:", + "Auto-attivazione:": "Auto-activation:", + "Caricamento automatico:": "Automatic loading:", + "Devi elencare manualmente i cookie tracciati da questi script nella": "You must manually list the cookies tracked by these scripts in the", + "Pagina Cookie": "Cookie Page", + "Database '%s' non esiste. Crealo prima di procedere.": "Database '%s' does not exist. Please create it before proceeding.", + "File dati iniziali per la lingua selezionata non trovato: %s": "Initial data file for the selected language not found: %s", + "%s è richiesto": "%s is required", + "%s è richiesta": "%s is required", + "%s deve essere di almeno 8 caratteri": "%s must be at least 8 characters", + "%s non può superare i 72 caratteri": "%s cannot exceed 72 characters", + "%s non è valido": "%s is not valid", + "Schema non importato correttamente. Tabelle mancanti: %s": "Schema not imported correctly. Missing tables: %s", + "Schema incompleto: trovate %d tabelle su %d attese.": "Incomplete schema: found %d tables out of %d expected.", + "Errore verifica tabelle: %s": "Error verifying tables: %s", + "Installazione database non completa. Tabelle mancanti: %s": "Database installation incomplete. Missing tables: %s", + "Installazione database non completa. Trovate %d tabelle, attese %d": "Database installation incomplete. Found %d tables, expected %d", + "Dati di classificazione mancanti": "Classification data missing", + "Dati generi mancanti": "Genre data missing", + "Le password non corrispondono": "Passwords do not match", + "Requisito '%s' non soddisfatto": "Requirement '%s' not met", + "Non è possibile creare la directory: %s": "Cannot create directory: %s", + "Directory non scrivibile: %s": "Directory not writable: %s", + "Il file supera la dimensione massima consentita": "File exceeds maximum allowed size", + "Errore sconosciuto durante il caricamento": "Unknown error during upload", + "Il file supera la dimensione massima di %s MB": "File exceeds maximum size of %s MB", + "Tipo di file non consentito. Sono ammessi solo: %s": "File type not allowed. Only allowed: %s", + "Troppi errori durante l'import dello schema (%d errori). Primi errori:\n%s": "Too many errors during schema import (%d errors). First errors:\n%s", + "Troppi errori durante l'import dei dati (%d errori). Primi errori:\n%s": "Too many errors during data import (%d errors). First errors:\n%s", + "Impossibile determinare l'ID del plugin Open Library.": "Unable to determine Open Library plugin ID.", + "Tutte le copie in prestito": "All copies on loan", + "Tutte le copie prenotate": "All copies reserved", + "Tutte le copie di questo libro hanno già un prestito attivo o prenotato. Attendi che una copia venga restituita.": "All copies of this book already have an active or scheduled loan. Please wait for a copy to be returned.", + "Copie disponibili": "Copies available", + "Nessuna copia disponibile nelle date richieste": "No copies available for the requested dates", + "Le date rosse o arancioni non sono disponibili. La richiesta verrà valutata da un amministratore.": "Red or orange dates are not available. The request will be evaluated by an administrator.", + "Sono stati rilevati problemi di integrità": "Integrity issues were detected", + "Clicca su \\\"Esegui Manutenzione\\\" per correggere automaticamente i problemi riparabili.": "Click \\\"Run Maintenance\\\" to automatically fix resolvable issues.", + "Ricalcola Disponibilità": "Recalculate Availability", + "Aggiorna il conteggio delle copie disponibili": "Update available copy counts", + "Correggi Problemi": "Fix Issues", + "Ripara automaticamente gli errori rilevati": "Automatically repair detected errors", + "Manutenzione Completa": "Full Maintenance", + "Esegui tutte le operazioni di manutenzione": "Run all maintenance operations", + "Vuoi correggere automaticamente i problemi di integrità rilevati?": "Do you want to automatically fix the detected integrity issues?", + "Vuoi eseguire la manutenzione completa del sistema? Questa operazione potrebbe richiedere alcuni minuti.": "Do you want to run full system maintenance? This may take a few minutes.", + "Prenotazione sovrapposta a prestito": "Reservation overlaps with a loan", + "Prenotazioni sovrapposte": "Overlapping reservations", + "Sì, correggi": "Yes, fix", + "Sì, esegui": "Yes, run", + "Elaborazione...": "Processing...", + "Operazione fallita": "Operation failed", + "Processing...": "Processing...", + "Operation completed": "Operation completed", + "Operation failed": "Operation failed", + "Communication error with the server": "Communication error with the server", + "Do you want to automatically fix the detected integrity issues?": "Do you want to automatically fix the detected integrity issues?", + "Do you want to run full system maintenance? This may take a few minutes.": "Do you want to run full system maintenance? This may take a few minutes.", + "Confirm?": "Confirm?", + "Yes, fix": "Yes, fix", + "Yes, run": "Yes, run", + "Cancel": "Cancel", + "Connessione database non disponibile": "Database connection not available", + "File .env non trovato": ".env file not found", + "Impossibile caricare configurazione database": "Unable to load database configuration", + "Errore connessione database": "Database connection error", + "Il tuo sistema Pinakes per catalogare, gestire e condividere la tua collezione libraria.": "Your Pinakes system to catalog, manage, and share your book collection.", + "Eventi e Incontri": "Events and Meetings", + "ordine:": "order:", + "Traduttore": "Translator", + "Nome del traduttore (se applicabile)": "Translator name (if applicable)", + "Illustratore": "Illustrator", + "Nome dell'illustratore (se applicabile)": "Illustrator name (if applicable)", + "Curatore": "Curator", + "Nome del curatore dell'opera (se applicabile)": "Curator name (if applicable)", + "es. Gianni De Conno": "e.g. Gianni De Conno", + "es. Mario Rossi": "e.g. Mario Rossi", + "Lingua non supportata": "Unsupported language", + "Lingue valide": "Valid languages", + "(codici ISO e nomi inglesi accettati)": "(ISO codes and English names accepted)", + "Copie totali": "Total copies", + "Data creazione": "Created at", + "Ultima modifica": "Last updated", + "Copia %d di %d": "Copy %d of %d", + "File caricato con successo": "File uploaded successfully", + "Errore durante l'importazione (HTTP": "Error during import (HTTP", + "Problemi di Configurazione": "Configuration Issues", + "URL Canonico Mancante": "Missing Canonical URL", + "URL Canonico Vuoto": "Empty Canonical URL", + "URL Canonico Non Valido": "Invalid Canonical URL", + "Applica Fix": "Apply Fix", + "Problemi di Integrità Database": "Database Integrity Issues", + "Tipo di issue non valido": "Invalid issue type", + "L'URL fornito non è valido": "The provided URL is not valid", + "Impossibile leggere il file .env": "Cannot read .env file", + "Impossibile scrivere nel file .env": "Cannot write to .env file", + "Configurazione aggiornata con successo!": "Configuration updated successfully!", + "Errore durante l'applicazione del fix:": "Error while applying fix:", + "Applicazione del fix...": "Applying fix...", + "Fix applicato": "Fix applied", + "Sì, applica": "Yes, apply", + "Vuoi impostare APP_CANONICAL_URL a:": "Do you want to set APP_CANONICAL_URL to:", + "Gestisci i tuoi prestiti, esplora il catalogo e scopri nuovi titoli.": "Manage your loans, explore the catalog and discover new titles.", + "Nessun libro recente": "No recent books", + "Non ci sono nuovi arrivi al momento.": "No new arrivals at the moment.", + "Non hai prestiti in corso al momento.": "You have no active loans at the moment.", + "%d giorni": "%d days", + "Email verificata con successo! Il tuo account è ora in attesa di approvazione da parte dell'amministratore. Riceverai un'email quando sarà attivato.": "Email verified successfully! Your account is now pending administrator approval. You will receive an email when it is activated.", + "Il link di verifica email è scaduto o non valido. Registrati nuovamente per ricevere un nuovo link.": "The email verification link has expired or is invalid. Please register again to receive a new link.", + "Il link di verifica non è valido. Assicurati di aver copiato l'intero link dall'email.": "The verification link is not valid. Make sure you copied the entire link from the email.", + "La mia bacheca": "My Dashboard", + "La modalità manutenzione non era attiva": "Maintenance mode was not active", + "Modalità manutenzione disattivata": "Maintenance mode disabled", + "Se il sito resta in manutenzione, elimina il file": "If the site stays in maintenance, delete the file", + "Server in manutenzione. Attendi il completamento dell'aggiornamento.": "Server in maintenance. Wait for the update to complete.", + "Creazione indici di ottimizzazione...": "Creating optimization indexes...", + "Indici di ottimizzazione creati OK": "Optimization indexes created OK", + "Nessun libro selezionato": "No books selected", + "Stato non valido": "Invalid status", + "ID libri non validi": "Invalid book IDs", + "Stato aggiornato per %d libri": "Status updated for %d books", + "%d libri eliminati": "%d books deleted", + "%d autori eliminati": "%d authors deleted", + "%d editori eliminati": "%d publishers deleted", + "Impossibile eliminare: alcuni libri hanno prestiti attivi": "Cannot delete: some books have active loans", + "Impossibile eliminare: alcuni editori hanno libri associati": "Cannot delete: some publishers have associated books", + "ISBN o EAN...": "ISBN or EAN...", + "autori. Questa azione non può essere annullata.": "authors. This action cannot be undone.", + "autori. Tutti i libri verranno assegnati all'autore risultante.": "authors. All books will be assigned to the resulting author.", + "editori. Questa azione non può essere annullata.": "publishers. This action cannot be undone.", + "editori. Tutti i libri verranno assegnati all'editore risultante.": "publishers. All books will be assigned to the resulting publisher.", + "libri. Questa azione non può essere annullata.": "books. This action cannot be undone.", + "I libri degli altri autori verranno assegnati a questo": "Books from other authors will be assigned to this one", + "I libri degli altri editori verranno assegnati a questo": "Books from other publishers will be assigned to this one", + "Nessun autore selezionato": "No authors selected", + "Nessun editore selezionato": "No publishers selected", + "ID autori non validi": "Invalid author IDs", + "ID editori non validi": "Invalid publisher IDs", + "Ottimizzazione Indici Database": "Database Index Optimization", + "Ottimizzato": "Optimized", + "%d Indici Mancanti": "%d Missing Indexes", + "Il database è già ottimizzato!": "The database is already optimized!", + "Tutti gli indici di performance sono presenti.": "All performance indexes are present.", + "Perché servono questi indici?": "Why are these indexes needed?", + "Gli indici migliorano significativamente le performance delle query, specialmente su tabelle con molti record. Le installazioni recenti li includono già, ma le installazioni più vecchie potrebbero non averli.": "Indexes significantly improve query performance, especially on tables with many records. Recent installations already include them, but older installations may not have them.", + "Tabella": "Table", + "Nome Indice": "Index Name", + "Colonne": "Columns", + "Crea Indici Automaticamente": "Create Indexes Automatically", + "Scarica Script SQL": "Download SQL Script", + "Creazione indici...": "Creating indexes...", + "Vuoi creare gli indici mancanti? Questa operazione migliorerà le performance del database.": "Do you want to create the missing indexes? This operation will improve database performance.", + "Sì, crea indici": "Yes, create indexes", + "Indici creati:": "Indexes created:", + "Errori:": "Errors:", + "Indici creati con successo": "Indexes created successfully", + "%d indici creati con successo": "%d indexes created successfully", + "Errore durante la creazione degli indici": "Error while creating indexes", + "Errore durante la creazione degli indici:": "Error while creating indexes:", + "%d indici mancanti trovati": "%d missing indexes found", + "Cerca per titolo, ISBN o EAN": "Search by title, ISBN or EAN", + "%d copie disponibili su %d": "%d copies available out of %d", + "1 copia disponibile su %d": "1 copy available out of %d", + "Nessuna copia registrata": "No copies registered", + "Disponibile nella data selezionata": "Available on selected date", + "Non disponibile nella data selezionata": "Not available on selected date", + "Prima data disponibile: %s": "First available date: %s", + "Seleziona un libro per vedere la disponibilità": "Select a book to see availability", + "Calendario Disponibilità": "Availability Calendar", + "visualizzazione per copia": "view by copy", + "In prestito fino al": "On loan until", + "Libro '%s' (ID: %d) ha copie disponibili negative: %d": "Book '%s' (ID: %d) has negative available copies: %d", + "Libro '%s' (ID: %d) ha più copie disponibili (%d) che totali (%d)": "Book '%s' (ID: %d) has more available copies (%d) than total (%d)", + "Prestito ID %d riferisce libro/utente inesistente (libro: %d, utente: %d)": "Loan ID %d references non-existent book/user (book: %d, user: %d)", + "Prestito ID %d attivo senza data scadenza": "Active loan ID %d has no due date", + "Libro '%s' (ID: %d) ha stato '%s' ma copie disponibili: %d": "Book '%s' (ID: %d) has status '%s' but available copies: %d", + "Prenotazione ID %d si sovrappone al prestito ID %d per il libro %d": "Reservation ID %d overlaps with loan ID %d for book %d", + "Prenotazioni ID %d e %d si sovrappongono per il libro %d": "Reservations ID %d and %d overlap for book %d", + "Prenotazione ID %d scaduta il %s ma ancora attiva": "Reservation ID %d expired on %s but still active", + "Libro ID %d ha posizioni coda non sequenziali: %s": "Book ID %d has non-sequential queue positions: %s", + "Prestito ID %d da prenotazione in attesa da %d giorni (libro %d)": "Loan ID %d from reservation pending for %d days (book %d)", + "Prestito ID %d con stato '%s' ha ancora attivo = 1": "Loan ID %d with status '%s' still has active = 1", + "APP_CANONICAL_URL non configurato nel file .env. Link nelle email potrebbero non funzionare correttamente. Valore suggerito: %s": "APP_CANONICAL_URL not configured in .env file. Email links may not work correctly. Suggested value: %s", + "Aggiungi al file .env: APP_CANONICAL_URL=%s": "Add to .env file: APP_CANONICAL_URL=%s", + "APP_CANONICAL_URL configurato ma vuoto nel file .env. Link nelle email useranno fallback a HTTP_HOST. Valore suggerito: %s": "APP_CANONICAL_URL configured but empty in .env file. Email links will use HTTP_HOST fallback. Suggested value: %s", + "Imposta nel file .env: APP_CANONICAL_URL=%s": "Set in .env file: APP_CANONICAL_URL=%s", + "APP_CANONICAL_URL configurato con valore non valido: '%s'. Link nelle email potrebbero non funzionare. Valore suggerito: %s": "APP_CANONICAL_URL configured with invalid value: '%s'. Email links may not work. Suggested value: %s", + "Correggi nel file .env: APP_CANONICAL_URL=%s": "Fix in .env file: APP_CANONICAL_URL=%s", + "Prestito non trovato": "Loan not found", + "Prestito validato e aggiornato": "Loan validated and updated", + "Errore validazione prestito:": "Loan validation error:", + "Errore correzione dati:": "Data correction error:", + "Errore creazione indici:": "Index creation error:", + "Indice %s creato su %s": "Index %s created on %s", + "Errore creazione %s su %s:": "Error creating %s on %s:", + "Eccezione creazione %s su %s:": "Exception creating %s on %s:", + "Dati libro recuperati con successo da Open Library": "Book data successfully retrieved from Open Library", + "Libro non trovato nel database Open Library": "Book not found in Open Library database", + "Calendario Prestiti e Prenotazioni": "Loans and Reservations Calendar", + "Sincronizza (ICS)": "Sync (ICS)", + "Copia Link": "Copy Link", + "Prestiti programmati": "Scheduled Loans", + "Prestiti scaduti": "Overdue Loans", + "Creata il": "Created on", + "Mese": "Month", + "Settimana": "Week", + "Lista": "List", + "Programmato": "Scheduled", + "L'URL del calendario è stato copiato negli appunti.": "The calendar URL has been copied to clipboard.", + "Prestito Programmato": "Scheduled Loan", + "Prestito Scaduto": "Overdue Loan", + "Richiesta Pendente": "Pending Request", + "Calendario non disponibile": "Calendar not available", + "Errore lettura calendario": "Calendar read error", + "Inizio": "Start", + "Oggi": "Today", + "Prestiti in corso": "Active Loans", + "Sicurezza Automatica": "Automatic Security", + "L'accesso alla cartella installer è automaticamente bloccato dopo l'installazione.": "Access to the installer folder is automatically blocked after installation.", + "Il file": "The file", + "nella root del progetto impedisce qualsiasi accesso non autorizzato.": "in the project root prevents any unauthorized access.", + "SBN Italia - Integrato": "SBN Italy - Integrated", + "Il catalogo SBN (OPAC Nazionale Italiano) è già integrato e viene interrogato automaticamente durante l'importazione ISBN. Non è necessario aggiungerlo come server esterno.": "The SBN catalog (Italian National OPAC) is already integrated and automatically queried during ISBN import. No need to add it as an external server.", + "Server Esterni SRU": "External SRU Servers", + "Server SRU aggiuntivi per Copy Cataloging. SBN Italia è già integrato (vedi sopra).": "Additional SRU servers for Copy Cataloging. SBN Italy is already integrated (see above).", + "Inserimento Manuale Dewey": "Manual Dewey Entry", + "es. 599.9, 004.6782, 641.5945": "e.g. 599.9, 004.6782, 641.5945", + "es. 599.9, 004.6782, 641.5945, 599.1": "e.g. 599.9, 004.6782, 641.5945, 599.1", + "Inserisci il codice Dewey completo (supporta fino a 4 decimali)": "Enter the complete Dewey code (supports up to 4 decimal digits)", + "Inserisci qualsiasi codice Dewey (anche se non presente nell'elenco)": "Enter any Dewey code (even if not in the list)", + "Oppure naviga per categorie:": "Or browse by categories:", + "Oppure naviga per categorie": "Or browse by categories", + "Classificazione selezionata:": "Selected classification:", + "Codice Dewey trovato e impostato": "Dewey code found and set", + "Codice Dewey non trovato": "Dewey code not found", + "Errore nel recupero dei figli": "Error retrieving children", + "Usa gli endpoint specifici per il formato legacy": "Use specific endpoints for legacy format", + "Parametro code obbligatorio.": "Code parameter required.", + "Codice parent non trovato.": "Parent code not found.", + "Codice Dewey": "Dewey Code", + "Inserisci un codice Dewey": "Enter a Dewey code", + "Formato codice non valido": "Invalid code format", + "Usa formato: 599 oppure 599.9 oppure 599.93": "Use format: 599 or 599.9 or 599.93", + "Formato codice non valido. Usa formato: 599 oppure 599.9 oppure 599.93": "Invalid code format. Use format: 599 or 599.9 or 599.93", + "Questo endpoint è supportato solo per il formato Dewey legacy. Usa /api/dewey/children.": "This endpoint is only supported for the legacy Dewey format. Use /api/dewey/children.", + "Errore nella lettura del backup.": "Error reading backup file.", + "Formato dati non valido.": "Invalid data format.", + "Errore nella lettura del file.": "Error reading file.", + "Errore nella lettura del file Dewey esistente.": "Error reading existing Dewey file.", + "File Dewey esistente non è un JSON valido o è corrotto.": "Existing Dewey file is not valid JSON or is corrupted.", + "Errore nella codifica JSON.": "JSON encoding error.", + "Attiva questa opzione solo se il tuo server supporta HTTPS. Se il tuo hosting forza già HTTPS automaticamente, non è necessario abilitarla (potrebbe causare redirect loop).": "Enable this option only if your server supports HTTPS. If your hosting already forces HTTPS automatically, you don't need to enable it (may cause redirect loop).", + "Locale non supportato.": "Unsupported locale.", + "File Dewey non trovato.": "Dewey file not found.", + "Errore nel parsing del file JSON.": "Error parsing JSON file.", + "Errori di validazione.": "Validation errors.", + "Errore nel salvataggio del file.": "Error saving file.", + "Salvato con successo.": "Saved successfully.", + "Dati validi.": "Valid data.", + "Errori di validazione nel file importato.": "Validation errors in imported file.", + "Importato con successo. %d voci totali.": "Imported successfully. %d total entries.", + "Nome file non valido.": "Invalid filename.", + "Backup non trovato.": "Backup not found.", + "Errore nel ripristino.": "Error during restore.", + "Backup ripristinato con successo.": "Backup restored successfully.", + "JSON non valido.": "Invalid JSON.", + "Nessun dato.": "No data.", + "Errore nel caricamento.": "Error loading.", + "Ripristinato": "Restored", + "Aggiungi decimale": "Add decimal", + "I dati devono essere un array non vuoto.": "Data must be a non-empty array.", + "Nodo mancante di codice a profondità %d.": "Node missing code at depth %d.", + "Il codice %s ha un nome non valido (minimo 2 caratteri).": "Code %s has an invalid name (minimum 2 characters).", + "Il codice %s ha un livello non valido (deve essere 1-7).": "Code %s has an invalid level (must be 1-7).", + "Il codice %s ha un formato non valido.": "Code %s has an invalid format.", + "Il codice %s è duplicato.": "Code %s is duplicated.", + "Il codice %s non è un figlio valido di %s.": "Code %s is not a valid child of %s.", + "Classe principale mancante: %s.": "Missing main class: %s.", + "Importato": "Imported", + "Modifiche non salvate": "Unsaved changes", + "Nome della classificazione": "Classification name", + "Formato codice non valido. Usa: XXX.Y (es. 599.1)": "Invalid code format. Use: XXX.Y (e.g. 599.1)", + "Errore nel caricamento dei backup.": "Error loading backups.", + "I dati attuali verranno sostituiti.": "Current data will be replaced.", + "Ripristinare questo backup?": "Restore this backup?", + "Questo codice esiste già.": "This code already exists.", + "Formato JSON non valido": "Invalid JSON format", + "Sessioni attive": "Active sessions", + "Gestisci i dispositivi su cui hai effettuato l'accesso con 'Ricordami'. Puoi disconnetterti da singoli dispositivi o da tutti contemporaneamente.": "Manage the devices you've logged in with 'Remember Me'. You can sign out from individual devices or all at once.", + "Caricamento sessioni...": "Loading sessions...", + "Nessuna sessione attiva. Le sessioni vengono create quando accedi con 'Ricordami' selezionato.": "No active sessions. Sessions are created when you log in with 'Remember Me' selected.", + "Sessione corrente": "Current session", + "Ultimo utilizzo": "Last used", + "Creata": "Created", + "Scade": "Expires", + "Disconnetti": "Sign out", + "Disconnetti tutti": "Sign out all", + "Vuoi disconnettere questo dispositivo?": "Do you want to sign out this device?", + "Vuoi disconnettere tutti i dispositivi? Dovrai effettuare nuovamente l'accesso su ogni dispositivo.": "Do you want to sign out all devices? You will need to log in again on each device.", + "Dispositivo sconosciuto": "Unknown device", + "sessioni attive": "active sessions", + "La richiesta ha impiegato troppo tempo. Riprova.": "The request took too long. Please try again.", + "Sessione revocata": "Session revoked", + "Impossibile revocare la sessione": "Unable to revoke session", + "Revocate %d sessioni": "Revoked %d sessions", + "ID sessione non valido": "Invalid session ID", + "Non autorizzato": "Unauthorized", + "Tabelle di Sistema": "System Tables", + "Complete": "Complete", + "%d Tabelle Mancanti": "%d Missing Tables", + "Tutte le tabelle di sistema sono presenti!": "All system tables are present!", + "Il sistema di aggiornamento è pronto.": "The update system is ready.", + "Tabelle richieste per l'aggiornamento": "Tables required for updates", + "Queste tabelle sono necessarie per tracciare gli aggiornamenti e le migrazioni del database.": "These tables are required to track updates and database migrations.", + "Cronologia degli aggiornamenti eseguiti": "History of executed updates", + "Registro delle migrazioni database applicate": "Registry of applied database migrations", + "Crea Tabelle Mancanti": "Create Missing Tables", + "Creazione tabelle...": "Creating tables...", + "Vuoi creare le tabelle di sistema mancanti? Queste sono necessarie per il sistema di aggiornamento.": "Do you want to create the missing system tables? These are required for the update system.", + "Sì, crea tabelle": "Yes, create tables", + "Tabelle create:": "Tables created:", + "%d tabelle create con successo": "%d tables created successfully", + "Errore durante la creazione delle tabelle:": "Error creating tables:", + "Tabella %s creata": "Table %s created", + "Errore creazione tabella %s:": "Error creating table %s:", + "Eccezione creazione tabella %s:": "Exception creating table %s:", + "Errore riassegnazione copia": "Copy reassignment error", + "Errore riassegnazione copia persa": "Lost copy reassignment error", + "Impossibile notificare utente: dati mancanti": "Cannot notify user: missing data", + "Notifica prenotazione disponibile inviata": "Reservation available notification sent", + "Invio notifica prenotazione fallito": "Reservation notification failed", + "Impossibile notificare utente copia non disponibile": "Cannot notify user copy unavailable", + "La copia assegnata è stata segnalata come persa o danneggiata": "The assigned copy has been reported as lost or damaged", + "La prenotazione è scaduta": "The reservation has expired", + "La copia non è più disponibile": "The copy is no longer available", + "Prenotazione: copia non disponibile": "Reservation: copy unavailable", + "Prenotazione per \"%s\" (utente: %s) messa in attesa. %s.": "Reservation for \"%s\" (user: %s) put on hold. %s.", + "Notifica copia non disponibile creata": "Copy unavailable notification created", + "Errore gestione cambio stato copia": "Copy status change handling error", + "DataIntegrity warning (store loan)": "DataIntegrity warning (store loan)", + "Notifica prestito fallita": "Loan notification failed", + "Validazione prestito fallita": "Loan validation failed", + "Riassegnazione copia fallita": "Copy reassignment failed", + "Errore elaborazione restituzione": "Return processing error", + "Rinnovo prestito fallito": "Loan renewal failed", + "Errore export CSV": "CSV export error", + "Errore annullamento prestito": "Loan cancellation error", + "Errore annullamento prenotazione": "Reservation cancellation error", + "Errore modifica data prenotazione": "Reservation date change error", + "Notifica richiesta prestito fallita": "Loan request notification failed", + "Errore richiesta prestito": "Loan request error", + "Errore prenotazione": "Reservation error", + "Riassegnazione prenotazione nuova copia fallita": "New copy reservation reassignment failed", + "Elaborazione lista attesa fallita": "Waitlist processing failed", + "La tua prenotazione per \"%s\" è stata messa in attesa. %s. Verrai notificato quando sarà disponibile una nuova copia.": "Your reservation for \"%s\" has been put on hold. %s. You will be notified when a new copy becomes available.", + "Esauriti tentativi riassegnazione copia": "Exhausted copy reassignment attempts", + "Errore gestione copia non disponibile": "Copy unavailable handling error", + "Errore invio notifica differita": "Deferred notification send error", + "Da Ritirare": "Ready for Pickup", + "Conferma Ritiro": "Confirm Pickup", + "L'utente ha ritirato il libro?": "Has the user picked up the book?", + "Ritiro confermato! Il prestito è ora in corso.": "Pickup confirmed! The loan is now active.", + "Errore nella conferma del ritiro": "Error confirming pickup", + "Giorni per ritirare un prestito approvato": "Days to pick up an approved loan", + "Ritiro confermato con successo": "Pickup confirmed successfully", + "Prestito non trovato o non pronto per il ritiro": "Loan not found or not ready for pickup", + "Recati in biblioteca durante gli orari di apertura per ritirare il libro.": "Visit the library during opening hours to pick up the book.", + "Pronto per il ritiro": "Ready for Pickup", + "Ritiro scaduto": "Pickup Expired", + "Inviata quando un prestito è stato approvato e il libro è pronto per il ritiro.": "Sent when a loan has been approved and the book is ready for pickup.", + "Inviata quando il tempo per ritirare un libro è scaduto e il prestito è stato annullato.": "Sent when the pickup deadline has passed and the loan has been cancelled.", + "Scadenza ritiro": "Pickup deadline", + "Prestiti in attesa di ritiro attivati": "Loans ready for pickup activated", + "Ritiri scaduti elaborati": "Expired pickups processed", + "Prestito pronto per ritiro non trovato": "Loan ready for pickup not found", + "Errore attivazione prestito schedulato": "Scheduled loan activation error", + "Errore elaborazione ritiro scaduto": "Expired pickup processing error", + "Il termine per il ritiro è scaduto": "The pickup deadline has passed", + "Ritiro non effettuato entro il termine previsto": "Pickup not completed within the deadline", + "Ritiro già confermato o modificato": "Pickup already confirmed or modified", + "Prestito già modificato da altra richiesta": "Loan already modified by another request", + "Errore invio notifica ritiro scaduto": "Error sending pickup expired notification", + "Nessun prestito in attesa di ritiro": "No loans waiting for pickup", + "Gestisci tutti": "Manage all", + "Ritiro annullato": "Pickup cancelled", + "Inviata quando un ritiro viene annullato dall'amministratore.": "Sent when a pickup is cancelled by an administrator.", + "Prestito non trovato o non cancellabile": "Loan not found or cannot be cancelled", + "Ritiro annullato con successo": "Pickup cancelled successfully", + "Ritiro non effettuato": "Pickup not completed", + "Errore durante l'annullamento del ritiro": "Error cancelling pickup", + "Prestito senza copia assegnata - contattare l'amministratore": "Loan has no assigned copy - contact administrator", + "(opzionale - max 200 caratteri)": "(optional - max 200 characters)", + "(opzionale - max 70 caratteri)": "(optional - max 70 characters)", + "(percorso legacy)": "(legacy path)", + "+ Aggiungi da preset...": "+ Add from preset...", + "1 evento": "1 event", + "API Key già configurata": "API Key already configured", + "API configurata": "API configured", + "Abilita Client SRU": "Enable SRU Client", + "Abilita Plugin": "Enable Plugin", + "Abilita Server SRU": "Enable SRU Server", + "Accedi e Procedi": "Login and Continue", + "Accesso negato. Permessi insufficienti.": "Access denied. Insufficient permissions.", + "Acquisito a": "Acquired at", + "Acquisito da": "Acquired from", + "Aggiornamento disponibile!": "Update available!", + "Aggiunti di recente al catalogo": "Recently added to catalog", + "Anni di Vita": "Years of Life", + "Anno a": "Year to", + "Anno da": "Year from", + "Annulla Prestito": "Cancel Loan", + "Annulla Prestito Scaduto": "Cancel Expired Loan", + "Annullare il prestito scaduto?": "Cancel the expired loan?", + "Applicazione già installata": "Application already installed", + "Approvato il %s": "Approved on %s", + "Article (Articolo/Blog)": "Article (Article/Blog)", + "Autenticazione Admin Richiesta": "Admin Authentication Required", + "Autenticazione Richiesta": "Authentication Required", + "Autenticazione richiesta.": "Authentication required.", + "Autore non specificato": "Author not specified", + "Backup creato!": "Backup created!", + "Backup eliminato con successo": "Backup deleted successfully", + "Cambia vista": "Change view", + "Cancella": "Clear", + "Caricamento del logo non riuscito. Verifica le dimensioni e il formato del file.": "Logo upload failed. Check file size and format.", + "Cerca...": "Search...", + "Codice scaffale obbligatorio": "Shelf code required", + "Collocazione:": "Location:", + "Compila tutti i campi obbligatori.": "Fill in all required fields.", + "Confermare il ritiro?": "Confirm pickup?", + "Confermi di voler attivare direttamente questo utente senza richiedere verifica email?": "Are you sure you want to directly activate this user without requiring email verification?", + "Configura API": "Configure API", + "Configura Z39.50": "Configure Z39.50", + "Consigliato: Summary Large Image per homepage.": "Recommended: Summary Large Image for homepage.", + "Contenuto della pagina": "Page content", + "Controlla la tua casella di posta e clicca sul link per resettare la password. Il link sarà valido per 2 ore.": "Check your inbox and click the link to reset your password. The link will be valid for 2 hours.", + "Controllo pre-aggiornamento fallito": "Pre-update check failed", + "Copertina del libro \"%s\"": "Book cover for \"%s\"", + "Copia eliminata con successo.": "Copy deleted successfully.", + "Copia non trovata.": "Copy not found.", + "Crea Backup": "Create Backup", + "Credenziali": "Credentials", + "Credenziali non valide o utente non admin": "Invalid credentials or user is not admin", + "Da approvare o rifiutare": "To approve or reject", + "Da ritirare": "Ready for pickup", + "Data Restituzione": "Return Date", + "Data non valida.": "Invalid date.", + "Database installato (46 tabelle)": "Database installed (46 tables)", + "Descrizione per Twitter/X. Se vuoto, usa la descrizione Open Graph.": "Description for Twitter/X. If empty, uses Open Graph description.", + "Editore %s": "Publisher %s", + "Eliminare i libri selezionati?": "Delete selected books?", + "Eliminare il file .installed dalla root del progetto e rieseguire l'installer": "Delete the .installed file from the project root and run the installer again", + "Email Admin": "Admin Email", + "Endpoint SRU:": "SRU Endpoint:", + "Errore di salvataggio. Riprova più tardi.": "Save error. Please try again later.", + "Errore di sicurezza. Ricarica la pagina e riprova": "Security error. Reload the page and try again", + "Errore di sicurezza. Riprova.": "Security error. Please try again.", + "Errore durante il recupero dei dati": "Error retrieving data", + "Errore durante il recupero delle sessioni": "Error retrieving sessions", + "Errore durante il salvataggio delle impostazioni.": "Error saving settings.", + "Errore durante la conferma del ritiro": "Error confirming pickup", + "Errore durante la revoca della sessione": "Error revoking session", + "Errore durante la revoca delle sessioni": "Error revoking sessions", + "Errore durante la ricerca": "Error during search", + "Errore durante la verifica dei libri associati": "Error verifying associated books", + "Errore durante la verifica dei prestiti attivi": "Error verifying active loans", + "Errore generazione calendario": "Calendar generation error", + "Errore generazione PDF prestito": "Error generating loan PDF", + "Errore interno del database": "Internal database error", + "Errore interno del database durante la verifica": "Internal database error during verification", + "Errore invio notifica ritiro pronto": "Error sending pickup ready notification", + "Errore nel salvataggio del file di traduzione": "Error saving translation file", + "Errore nel salvataggio del file route": "Error saving route file", + "Errore nella prenotazione.": "Error creating reservation.", + "Errore nella ricerca.": "Error during search.", + "Errore nella richiesta di prestito.": "Error creating loan request.", + "Esiste già un altro libro con lo stesso identificatore (ISBN/EAN).": "Another book with the same identifier (ISBN/EAN) already exists.", + "Esiste già un libro con lo stesso identificatore (ISBN/EAN).": "A book with the same identifier (ISBN/EAN) already exists.", + "Esplora il catalogo e scopri nuovi titoli.": "Explore the catalog and discover new titles.", + "Esplora il nostro catalogo digitale": "Explore our digital catalog", + "Espone il catalogo locale via protocollo SRU per altre biblioteche.": "Exposes local catalog via SRU protocol for other libraries.", + "File backup non trovato": "Backup file not found", + "File di aggiornamento non valido (troppo piccolo)": "Invalid update file (too small)", + "File di log non trovato": "Log file not found", + "File troppo grande. Dimensione massima 5MB.": "File too large. Maximum size 5MB.", + "Formato richiesta non valido": "Invalid request format", + "Genere creato con successo!": "Genre created successfully!", + "Google Books API collegata": "Google Books API connected", + "Hai già una prenotazione attiva per questo libro.": "You already have an active reservation for this book.", + "Hai già una richiesta di prestito in attesa per questo libro": "You already have a pending loan request for this book", + "Hai già un prestito attivo o in attesa per questo libro": "You already have an active or pending loan for this book", + "ID genere non valido": "Invalid genre ID", + "IN RITARDO": "OVERDUE", + "ISBN non trovato. Fonti consultate: %s": "ISBN not found. Sources consulted: %s", + "Il download dovrebbe iniziare automaticamente": "Download should start automatically", + "Il termine per il ritiro è scaduto. Vuoi annullare questo prestito?": "The pickup deadline has passed. Do you want to cancel this loan?", + "Immagine Twitter": "Twitter Image", + "Immagine per Twitter/X. Dimensioni consigliate: 1200x675px o 1200x1200px. Se vuoto, usa l'immagine Open Graph.": "Image for Twitter/X. Recommended dimensions: 1200x675px or 1200x1200px. If empty, uses Open Graph image.", + "Importante:": "Important:", + "Impossibile acquisire il lock. Riprova tra qualche secondo.": "Unable to acquire lock. Please try again in a few seconds.", + "Impossibile creare la mensola. Riprova più tardi.": "Unable to create shelf. Please try again later.", + "Impossibile creare lo scaffale. Riprova più tardi.": "Unable to create bookcase. Please try again later.", + "Impossibile eliminare il libro: ci sono prestiti o prenotazioni attive. Termina prima i prestiti/prenotazioni.": "Cannot delete book: there are active loans or reservations. End loans/reservations first.", + "Impossibile eliminare una copia attualmente in prestito.": "Cannot delete a copy currently on loan.", + "Impossibile eliminare: la mensola contiene libri": "Cannot delete: shelf contains books", + "Impossibile eliminare: lo scaffale contiene libri": "Cannot delete: bookcase contains books", + "Impossibile eliminare: lo scaffale contiene mensole": "Cannot delete: bookcase contains shelves", + "Impossibile leggere il file di log": "Unable to read log file", + "Impossibile modificare una copia attualmente in prestito. Prima termina il prestito o imposta lo stato su \"Disponibile\" per chiuderlo automaticamente.": "Cannot edit a copy currently on loan. First end the loan or set status to \"Available\" to close it automatically.", + "Impossibile riaprire il file ZIP": "Unable to reopen ZIP file", + "Impossibile ricalcolare la disponibilità del libro.": "Unable to recalculate book availability.", + "Impossibile salvare le impostazioni.": "Unable to save settings.", + "Impostazioni API Book Scraper salvate correttamente.": "Book Scraper API settings saved successfully.", + "Impostazioni Z39.50 salvate correttamente.": "Z39.50 settings saved successfully.", + "In Attesa": "Pending", + "In scadenza": "Expiring soon", + "Indice ISBN": "ISBN Index", + "Inserisci una breve biografia dell'autore...": "Enter a brief author biography...", + "L'applicazione risulta correttamente configurata.": "The application is correctly configured.", + "L'installazione è stata completata correttamente e tutte le verifiche sono andate a buon fine.": "Installation completed successfully and all verifications passed.", + "La data non può essere nel passato.": "Date cannot be in the past.", + "La pagina che stai cercando non esiste.": "The page you are looking for does not exist.", + "La password deve contenere almeno una lettera maiuscola, una minuscola e un numero.": "Password must contain at least one uppercase letter, one lowercase letter and a number.", + "La password deve contenere maiuscole, minuscole e numeri.": "Password must contain uppercase, lowercase and numbers.", + "La password deve essere lunga almeno 8 caratteri.": "Password must be at least 8 characters long.", + "La password non può superare i 72 caratteri.": "Password cannot exceed 72 characters.", + "La password attuale non è corretta.": "Current password is incorrect.", + "Le password non coincidono.": "Passwords do not match.", + "Le sessioni scadono automaticamente per proteggere i tuoi dati.": "Sessions expire automatically to protect your data.", + "Letta": "Read", + "Libri attualmente in prestito": "Books currently on loan", + "Libri prenotati dagli utenti": "Books reserved by users", + "MaintenanceService errore ritiri scaduti": "MaintenanceService expired pickups error", + "MaintenanceService errore scadenza ritiro": "MaintenanceService pickup expiration error", + "MaintenanceService ritiro scaduto": "MaintenanceService pickup expired", + "Mensola eliminata": "Shelf deleted", + "Modifica Route": "Edit Route", + "Mostra questa guida": "Show this guide", + "Nessun editore trovato per": "No publisher found for", + "Nessun risultato trovato per": "No results found for", + "Nessun server configurato. Aggiungine uno per iniziare.": "No servers configured. Add one to get started.", + "Nessuna copia disponibile per il periodo richiesto": "No copy available for the requested period", + "Nessuna fonte di scraping disponibile. Installa almeno un plugin di scraping (es. Open Library o Scraping Pro).": "No scraping source available. Install at least one scraping plugin (e.g. Open Library or Scraping Pro).", + "Nessuna ricerca recente": "No recent searches", + "Nessuna richiesta da approvare": "No requests to approve", + "Nome Server": "Server Name", + "Nome e cognome sono obbligatori.": "First name and last name are required.", + "Non ci sono azioni urgenti da completare.": "No urgent actions to complete.", + "Nuova ricerca": "New search", + "Nuovo libro": "New book", + "Oppure accedere a /installer/?force=1 per forzare una nuova procedura": "Or go to /installer/?force=1 to force a new installation", + "PDF generato!": "PDF generated!", + "PDF prestito non generato": "Loan PDF not generated", + "Passo": "Step", + "Percorso backup non valido": "Invalid backup path", + "Periodo": "Period", + "Permette di importare libri (Copy Cataloging) e cercare su cataloghi esterni.": "Allows importing books (Copy Cataloging) and searching external catalogs.", + "Personalizzato": "Custom", + "Personalizzazione aspetto": "Appearance customization", + "Plugin API personalizzata per scraping dati libri": "Custom API plugin for book data scraping", + "Prenotazione": "Reservation", + "Prenotazione effettuata con successo": "Reservation created successfully", + "Prenotazioni attive (slot libro)": "Active reservations (book slots)", + "Prestiti approvati in attesa di consegna": "Approved loans awaiting delivery", + "Prestiti pronti per il ritiro": "Loans ready for pickup", + "Prestito annullato!": "Loan cancelled!", + "Prestito approvato - in attesa di ritiro": "Loan approved - awaiting pickup", + "Prestito chiuso automaticamente. La copia è ora disponibile.": "Loan closed automatically. The copy is now available.", + "Prestito già processato da un altro utente": "Loan already processed by another user", + "Prestito prenotato con successo": "Loan reserved successfully", + "Prestito rinnovato correttamente. Nuova scadenza: %s": "Loan renewed successfully. New due date: %s", + "Profile (Profilo)": "Profile", + "Puoi eliminare solo copie perse, danneggiate o in manutenzione. Prima modifica lo stato della copia.": "You can only delete lost, damaged or in maintenance copies. First change the copy status.", + "Quando abilitato, il plugin interrogherà l'API durante l'importazione dati libri.": "When enabled, the plugin will query the API during book data import.", + "Questa operazione cancellerà tutti i dati esistenti. Assicurati di avere un backup.": "This operation will delete all existing data. Make sure you have a backup.", + "Questi sono i server a cui la tua biblioteca si collegherà per cercare e importare libri.": "These are the servers your library will connect to for searching and importing books.", + "Questo plugin interroga un servizio API esterno per recuperare dati libri tramite ISBN/EAN. Ha priorità 3 (più alta di Open Library).": "This plugin queries an external API service to retrieve book data via ISBN/EAN. It has priority 3 (higher than Open Library).", + "Ricerche recenti": "Recent searches", + "Richiedono attenzione immediata": "Require immediate attention", + "Richieste in Attesa": "Pending Requests", + "Richiesto:": "Required:", + "Ritiro confermato!": "Pickup confirmed!", + "Ritiro scaduto il": "Pickup expired on", + "Route aggiornate con successo": "Routes updated successfully", + "Salva Configurazione": "Save Configuration", + "Scadenza prenotazione": "Reservation expiration", + "Scadenza ritiro:": "Pickup deadline:", + "Scaduto il:": "Expired on:", + "Scaffale creato": "Bookcase created", + "Scaffale eliminato": "Bookcase deleted", + "Scaffale obbligatorio": "Bookcase required", + "Cerca globale": "Global search", + "Chiudi popup": "Close popup", + "Mostra scorciatoie": "Show shortcuts", + "Navigazione": "Navigation", + "Scorciatoie da tastiera": "Keyboard shortcuts", + "Vai a Autori": "Go to Authors", + "Vai a Dashboard": "Go to Dashboard", + "Vai a Editori": "Go to Publishers", + "Vai a Impostazioni": "Go to Settings", + "Vai a Libri": "Go to Books", + "Vai a Prestiti": "Go to Loans", + "Vai a Utenti": "Go to Users", + "poi": "then", + "Se desideri reinstallare puoi:": "If you want to reinstall you can:", + "Sei sicuro di voler eliminare questo messaggio?": "Are you sure you want to delete this message?", + "Sei sicuro di voler eliminare questo utente?": "Are you sure you want to delete this user?", + "Seleziona tutti": "Select all", + "Sessione Scaduta": "Session Expired", + "Si è verificato un errore di rete.": "A network error occurred.", + "Si è verificato un errore durante il salvataggio.": "An error occurred while saving.", + "Si è verificato un errore imprevisto.": "An unexpected error occurred.", + "Si è verificato un errore. Riprova.": "An error occurred. Please try again.", + "Sintassi": "Syntax", + "Sito": "Website", + "Statistiche aggiornate per": "Statistics updated for", + "Stato della copia aggiornato con successo.": "Copy status updated successfully.", + "Stato non valido.": "Invalid status.", + "Summary (Immagine Piccola)": "Summary (Small Image)", + "Summary Large Image (Immagine Grande)": "Summary Large Image", + "Sì, Annulla": "Yes, Cancel", + "Test Endpoint": "Test Endpoint", + "Testi Banner Cookie": "Cookie Banner Texts", + "Timeout (secondi)": "Timeout (seconds)", + "Tipo Twitter Card": "Twitter Card Type", + "Tipo di contenuto per Open Graph. Scegli 'Website' per la homepage.": "Content type for Open Graph. Choose 'Website' for homepage.", + "Titolo modale": "Modal title", + "Titolo per Twitter/X. Se vuoto, usa il titolo Open Graph.": "Title for Twitter/X. If empty, uses Open Graph title.", + "Torna alla Home": "Return to Home", + "Trigger database: azione manuale richiesta": "Database trigger: manual action required", + "Tutte le richieste sono state gestite.": "All requests have been processed.", + "Tutto sotto controllo!": "Everything under control!", + "Twitter Cards (X)": "Twitter Cards (X)", + "URL Endpoint API": "API Endpoint URL", + "URL Endpoint SRU": "SRU Endpoint URL", + "Una chiave è attualmente salvata e funzionante. Puoi aggiornarla inserendo un nuovo valore o lasciarla vuota per rimuoverla.": "A key is currently saved and working. You can update it by entering a new value or leave it empty to remove it.", + "Upload non valido": "Invalid upload", + "Utente eliminato con successo.": "User deleted successfully.", + "Utente preselezionato": "Pre-selected user", + "Vai all'applicazione": "Go to application", + "Verifica reCAPTCHA fallita. Riprova.": "reCAPTCHA verification failed. Please try again.", + "Vista griglia": "Grid view", + "Vista tabella": "Table view", + "Website (Sito Web)": "Website", + "attivata": "activated", + "deve iniziare con": "must start with", + "libri eliminati": "books deleted", + "minuti fa": "minutes ago", + "non può contenere spazi": "cannot contain spaces", + "non può essere vuota": "cannot be empty", + "ore fa": "hours ago", + "prenotazioni": "reservations", + "secondi (min: 5, max: 60)": "seconds (min: 5, max: 60)", + "(opzionale)": "(optional)", + "API Key": "API Key", + "CAP": "ZIP Code", + "CSRF": "CSRF", + "Close menu": "Close menu", + "Coda": "Queue", + "Cover": "Cover", + "Database": "Database", + "Export": "Export", + "Import": "Import", + "Library Management System": "Library Management System", + "Search": "Search", + "Toggle menu": "Toggle menu", + "Toggle search": "Toggle search", + "Import LibraryThing": "Import LibraryThing", + "Import da LibraryThing": "Import from LibraryThing", + "Importa i tuoi libri esportati da LibraryThing.com (formato TSV)": "Import your books exported from LibraryThing.com (TSV format)", + "Import CSV Standard": "Standard CSV Import", + "Carica File LibraryThing": "Upload LibraryThing File", + "Arricchisci dati con scraping web (copertine, descrizioni, etc.)": "Enrich data with web scraping (covers, descriptions, etc.)", + "Importa Libri": "Import Books", + "Import in corso...": "Importing...", + "Come Esportare da LibraryThing": "How to Export from LibraryThing", + "Campi Supportati": "Supported Fields", + "Gestione Plugin LibraryThing": "LibraryThing Plugin Management", + "Completo": "Complete", + "Incompleto": "Incomplete", + "Campi Database": "Database Fields", + "Il plugin è attualmente installato e funzionante.": "The plugin is currently installed and working.", + "Disinstalla Plugin": "Uninstall Plugin", + "ATTENZIONE: Disinstallazione Irreversibile": "WARNING: Irreversible Uninstallation", + "Confermo di voler disinstallare il plugin e di aver effettuato un backup dei dati": "I confirm I want to uninstall the plugin and have made a backup of the data", + "Export per LibraryThing": "Export for LibraryThing", + "LibraryThing TSV": "LibraryThing TSV", + "File vuoto o formato non valido": "Empty file or invalid format", + "Il file deve avere estensione .tsv, .csv o .txt": "File must have .tsv, .csv or .txt extension", + "Il file non sembra essere in formato LibraryThing. Colonne richieste: Book Id, Title, Primary Author, ISBNs": "File does not appear to be in LibraryThing format. Required columns: Book Id, Title, Primary Author, ISBNs", + "Impossibile aprire il file": "Unable to open file", + "Numero massimo di righe superato (%d)": "Maximum number of rows exceeded (%d)", + "Copertine scaricate (LibraryThing):": "Covers downloaded (LibraryThing):", + "Già presenti:": "Already present:", + "Impossibile scaricare (libro senza ISBN):": "Cannot download (book has no ISBN):", + "Copertina non trovata online:": "Cover not found online:", + "Storico Import": "Import History", + "Visualizza la cronologia degli import CSV e LibraryThing con report errori dettagliati": "View the history of CSV and LibraryThing imports with detailed error reports", + "%d import registrato": "%d import recorded", + "%d import registrati": "%d imports recorded", + "Cronologia Import": "Import History", + "Libri Importati": "Books Imported", + "Aggiornati": "Updated", + "Errori Totali": "Total Errors", + "Data/Ora": "Date/Time", + "Totali": "Total", + "Importati": "Imported", + "Durata": "Duration", + "Scarica Errori": "Download Errors", + "Nessun errore": "No errors", + "Nessun import registrato": "No imports recorded", + "Gli import CSV e LibraryThing verranno visualizzati qui": "CSV and LibraryThing imports will be displayed here", + "Gli import vengono tracciati automaticamente durante l'elaborazione": "Imports are tracked automatically during processing", + "Informazioni sullo Storico Import": "Import History Information", + "Retention: 90 giorni": "Retention: 90 days", + "I log vengono conservati per 90 giorni per conformità GDPR": "Logs are retained for 90 days for GDPR compliance", + "Scarica il report CSV per analizzare gli errori in dettaglio": "Download the CSV report to analyze errors in detail", + "Ogni errore include: numero riga, titolo libro, tipo errore e messaggio dettagliato": "Each error includes: line number, book title, error type and detailed message", + "ID import mancante": "Missing import ID", + "%d import logs eliminati (più vecchi di %d giorni)": "%d import logs deleted (older than %d days)", + "Leggi PDF": "Read PDF", + "Chiudi Visualizzatore": "Close Viewer", + "Visualizzatore PDF": "PDF Viewer", + "Usa la funzione di ricerca del browser per trovare testo nel documento": "Use your browser's search function to find text in the document", + "Usa il controllo schermo intero del viewer o del browser": "Use the viewer or browser fullscreen control", + "Condivisione": "Sharing", + "Seleziona i pulsanti di condivisione da mostrare nella pagina del libro.": "Select which share buttons to show on the book page.", + "Nessun pulsante selezionato": "No buttons selected", + "Salva impostazioni condivisione": "Save sharing settings", + "Impostazioni di condivisione aggiornate.": "Sharing settings updated.", + "Condividi su X": "Share on X", + "Condividi su Telegram": "Share on Telegram", + "Condividi su LinkedIn": "Share on LinkedIn", + "Condividi su Reddit": "Share on Reddit", + "Condividi su Pinterest": "Share on Pinterest", + "Condividi su Threads": "Share on Threads", + "Condividi su Bluesky": "Share on Bluesky", + "Condividi su Tumblr": "Share on Tumblr", + "Salva su Pocket": "Save to Pocket", + "Condividi su VK": "Share on VK", + "Condividi su LINE": "Share on LINE", + "Invia via SMS": "Send via SMS", + "Invia per email": "Send by email", + "Copia link": "Copy link", + "Collezione: %d libri, %d autori, %d editori.": "Collection: %d books, %d authors, %d publishers.", + "Catalogo bibliotecario gestito con [Pinakes](https://github.com/fabiodalez-dev/Pinakes). Disponibile in: %s.": "Library catalog powered by [Pinakes](https://github.com/fabiodalez-dev/Pinakes). Available in: %s.", + "Pagine Principali": "Main Pages", + "Sfoglia e cerca la collezione completa": "Browse and search the full book collection", + "Informazioni sulla biblioteca": "About this library", + "Calendario eventi culturali": "Cultural events calendar", + "Informativa sulla privacy": "Privacy policy", + "Feed e Scoperta": "Feeds & Discovery", + "Feed RSS": "RSS Feed", + "Ultime aggiunte al catalogo (RSS 2.0)": "Latest book additions (RSS 2.0)", + "Indice completo degli URL": "Complete URL index", + "Interoperabilità bibliotecaria (MARCXML, Dublin Core)": "Library interoperability (MARCXML, Dublin Core)", + "Autenticazione utente": "User authentication", + "Registrazione nuovo utente": "New user registration", + "Genera automaticamente un file llms.txt per rendere la biblioteca comprensibile ai modelli linguistici (LLM)": "Automatically generate an llms.txt file to make the library understandable by large language models (LLMs)", + "Cos'è llms.txt:": "What is llms.txt:", + "È uno standard emergente (llmstxt.org) che fornisce ai motori AI un sommario strutturato del sito in formato Markdown. Quando attivo, il file viene generato dinamicamente con le statistiche della biblioteca, le pagine pubbliche e le informazioni API.": "An emerging standard (llmstxt.org) that provides AI engines with a structured Markdown summary of the site. When enabled, the file is dynamically generated with library statistics, public pages, and API information.", + "Abilita llms.txt": "Enable llms.txt", + "Rende disponibile /llms.txt e lo aggiunge a robots.txt": "Makes /llms.txt available and adds it to robots.txt", + "Disattivato": "Disabled", + "Tipo Media": "Media Type", + "Disco": "Record", + "Tutti i media": "All media", + "Impossibile scaricare (senza ISBN/barcode):": "Cannot download (no ISBN/barcode):" } \ No newline at end of file diff --git a/locale/it_IT.json b/locale/it_IT.json index 4198f92a..5d32ef37 100644 --- a/locale/it_IT.json +++ b/locale/it_IT.json @@ -1,150 +1,151 @@ { - "Plugin attivato con successo.": "Plugin attivato con successo.", - "Plugin disattivato con successo.": "Plugin disattivato con successo.", - "Plugin disinstallato con successo.": "Plugin disinstallato con successo.", - "Plugin installato con successo.": "Plugin installato con successo.", - "Plugin non trovato.": "Plugin non trovato.", - "Plugin già attivo.": "Plugin già attivo.", - "Plugin già disattivato.": "Plugin già disattivato.", - "Plugin già installato.": "Plugin già installato.", - "File principale del plugin non trovato.": "File principale del plugin non trovato.", - "Errore durante l'attivazione: %s": "Errore durante l'attivazione: %s", - "Errore durante l'attivazione del plugin.": "Errore durante l'attivazione del plugin.", - "Errore durante la disattivazione: %s": "Errore durante la disattivazione: %s", - "Errore durante la disattivazione del plugin.": "Errore durante la disattivazione del plugin.", - "Errore durante la rimozione dal database.": "Errore durante la rimozione dal database.", - "File ZIP non trovato.": "File ZIP non trovato.", - "File ZIP troppo grande. Dimensione massima: 100 MB.": "File ZIP troppo grande. Dimensione massima: 100 MB.", - "Impossibile aprire il file ZIP.": "Impossibile aprire il file ZIP.", - "File plugin.json non trovato nel pacchetto.": "File plugin.json non trovato nel pacchetto.", - "File plugin.json non valido.": "File plugin.json non valido.", - "Campo obbligatorio mancante: %s": "Campo obbligatorio mancante: %s", - "Nome plugin non valido. Usa solo lettere, numeri, trattini o underscore.": "Nome plugin non valido. Usa solo lettere, numeri, trattini o underscore.", - "Plugin richiede PHP %s o superiore.": "Plugin richiede PHP %s o superiore.", - "Directory plugin già esistente.": "Directory plugin già esistente.", - "Impossibile creare la directory del plugin.": "Impossibile creare la directory del plugin.", - "Percorso di installazione del plugin non valido.": "Percorso di installazione del plugin non valido.", - "Il pacchetto contiene percorsi non validi.": "Il pacchetto contiene percorsi non validi.", - "Impossibile creare la struttura del plugin.": "Impossibile creare la struttura del plugin.", - "Errore durante l'estrazione del plugin.": "Errore durante l'estrazione del plugin.", - "Il pacchetto non contiene file validi.": "Il pacchetto non contiene file validi.", - "Errore durante il salvataggio nel database.": "Errore durante il salvataggio nel database.", - "Errore durante l'installazione: %s": "Errore durante l'installazione: %s", - "Non autorizzato.": "Non autorizzato.", - "Token CSRF non valido.": "Token CSRF non valido.", - "Token configurato": "Token configurato", - "Token configurato — lascia vuoto per mantenere": "Token configurato — lascia vuoto per mantenere", - "File non trovato nell'upload.": "File non trovato nell'upload.", - "Errore durante il caricamento del file (code: %s).": "Errore durante il caricamento del file (code: %s).", - "Solo file ZIP sono accettati.": "Solo file ZIP sono accettati.", - "Errore interno: %s": "Errore interno: %s", - "Formato impostazioni non valido.": "Formato impostazioni non valido.", - "Questo plugin non supporta impostazioni personalizzate.": "Questo plugin non supporta impostazioni personalizzate.", - "Chiave Google Books salvata correttamente.": "Chiave Google Books salvata correttamente.", - "Chiave Google Books rimossa.": "Chiave Google Books rimossa.", - "Import LibraryThing": "Import LibraryThing", - "Import da LibraryThing": "Import da LibraryThing", - "Importa i tuoi libri esportati da LibraryThing.com (formato TSV)": "Importa i tuoi libri esportati da LibraryThing.com (formato TSV)", - "Torna ai Libri": "Torna ai Libri", - "Import CSV Standard": "Import CSV Standard", - "Carica File LibraryThing": "Carica File LibraryThing", - "Arricchimento automatico dati": "Arricchimento automatico dati", - "Arricchisci dati con scraping web (copertine, descrizioni, etc.)": "Arricchisci dati con scraping web (copertine, descrizioni, etc.)", - "Importa Libri": "Importa Libri", - "Import in corso...": "Import in corso...", - "Come Esportare da LibraryThing": "Come Esportare da LibraryThing", - "Importante:": "Importante:", - "Campi Supportati": "Campi Supportati", - "Gestione Plugin LibraryThing": "Gestione Plugin LibraryThing", - "Installato": "Installato", - "Completo": "Completo", - "Incompleto": "Incompleto", - "Campi Database": "Campi Database", - "Il plugin è attualmente installato e funzionante.": "Il plugin è attualmente installato e funzionante.", - "Disinstalla Plugin": "Disinstalla Plugin", - "ATTENZIONE: Disinstallazione Irreversibile": "ATTENZIONE: Disinstallazione Irreversibile", - "Confermo di voler disinstallare il plugin e di aver effettuato un backup dei dati": "Confermo di voler disinstallare il plugin e di aver effettuato un backup dei dati", - "Installa Plugin": "Installa Plugin", - "Export per LibraryThing": "Export per LibraryThing", - "LibraryThing TSV": "LibraryThing TSV", - "File vuoto o formato non valido": "File vuoto o formato non valido", - "Il file deve avere estensione .tsv, .csv o .txt": "Il file deve avere estensione .tsv, .csv o .txt", - "Il file non sembra essere in formato LibraryThing. Colonne richieste: Book Id, Title, Primary Author, ISBNs": "Il file non sembra essere in formato LibraryThing. Colonne richieste: Book Id, Title, Primary Author, ISBNs", - "Nessun file caricato": "Nessun file caricato", - "Errore nel caricamento del file": "Errore nel caricamento del file", - "Aggiunge badge cliccabili alla scheda libro per cercare su Anna's Archive, Z-Library e Project Gutenberg con un click. Ispirato all'estensione browser GoodLib.": "Aggiunge badge cliccabili alla scheda libro per cercare su Anna's Archive, Z-Library e Project Gutenberg con un click. Ispirato all'estensione browser GoodLib.", - "Anna's Archive": "Anna's Archive", - "Catalogo pubblico": "Catalogo pubblico", - "Configura Fonti": "Configura Fonti", - "Domini mirror": "Domini mirror", - "Dominio non valido. Inserisci solo host o host:porta, senza percorsi.": "Dominio non valido. Inserisci solo host o host:porta, senza percorsi.", - "Dominio personalizzato...": "Dominio personalizzato...", - "Errore": "Errore", - "Errore durante l'aggiornamento del profilo.": "Errore durante l'aggiornamento del profilo.", - "Cerca su:": "Cerca su:", - "Predefinita del sito": "Predefinita del sito", - "Cerca \"%s\" su %s": "Cerca \"%s\" su %s", - "Fonti attive": "Fonti attive", - "GoodLib — External Sources": "GoodLib — Fonti Esterne", - "GoodLib — Fonti Esterne": "GoodLib — Fonti Esterne", - "Impostazioni GoodLib salvate correttamente.": "Impostazioni GoodLib salvate correttamente.", - "Mostra badge nella pagina dettaglio libro": "Mostra badge nella pagina dettaglio libro", - "Mostra badge nell'area amministrazione": "Mostra badge nell'area amministrazione", - "Mostra i badge nella pagina dettaglio libro del catalogo": "Mostra i badge nella pagina dettaglio libro del catalogo", - "Mostra i badge nella scheda libro dell'area amministrazione": "Mostra i badge nella scheda libro dell'area amministrazione", - "Project Gutenberg": "Project Gutenberg", - "Puoi scegliere un mirror suggerito oppure selezionare dominio personalizzato.": "Puoi scegliere un mirror suggerito oppure selezionare dominio personalizzato.", - "Puoi usare i mirror suggeriti oppure inserire un dominio custom.": "Puoi usare i mirror suggeriti oppure inserire un dominio custom.", - "Questi siti cambiano dominio spesso. Seleziona un mirror funzionante.": "Questi siti cambiano dominio spesso. Seleziona un mirror funzionante.", - "Scheda libro admin": "Scheda libro admin", - "Sono accettati anche domini personalizzati; se incolli un URL completo verrà salvato solo l'host.": "Sono accettati anche domini personalizzati; se incolli un URL completo verrà salvato solo l'host.", - "Visibilita": "Visibilita", - "Visibilità": "Visibilità", - "Z-Library": "Z-Library", - "Impossibile aprire il file": "Impossibile aprire il file", - "Numero massimo di righe superato (%d)": "Numero massimo di righe superato (%d)", - "Titolo obbligatorio mancante": "Titolo obbligatorio mancante", - "Copertine scaricate:": "Copertine scaricate:", - "Già presenti:": "Già presenti:", - "Impossibile scaricare (libro senza ISBN):": "Impossibile scaricare (libro senza ISBN):", - "Copertina non trovata online:": "Copertina non trovata online:", - "Errori:": "Errori:", - "Leggi PDF": "Leggi PDF", - "Chiudi Visualizzatore": "Chiudi Visualizzatore", - "Scarica PDF": "Scarica PDF", - "Visualizzatore PDF": "Visualizzatore PDF", - "Usa la funzione di ricerca del browser per trovare testo nel documento": "Usa la funzione di ricerca del browser per trovare testo nel documento", - "Usa il controllo schermo intero del viewer o del browser": "Usa il controllo schermo intero del viewer o del browser", - "Condivisione": "Condivisione", - "Seleziona i pulsanti di condivisione da mostrare nella pagina del libro.": "Seleziona i pulsanti di condivisione da mostrare nella pagina del libro.", - "Anteprima": "Anteprima", - "Nessun pulsante selezionato": "Nessun pulsante selezionato", - "Salva impostazioni condivisione": "Salva impostazioni condivisione", - "Impostazioni di condivisione aggiornate.": "Impostazioni di condivisione aggiornate.", - "Condividi su Facebook": "Condividi su Facebook", - "Condividi su X": "Condividi su X", - "Condividi su WhatsApp": "Condividi su WhatsApp", - "Condividi su Telegram": "Condividi su Telegram", - "Condividi su LinkedIn": "Condividi su LinkedIn", - "Condividi su Reddit": "Condividi su Reddit", - "Condividi su Pinterest": "Condividi su Pinterest", - "Condividi su Threads": "Condividi su Threads", - "Condividi su Bluesky": "Condividi su Bluesky", - "Condividi su Tumblr": "Condividi su Tumblr", - "Salva su Pocket": "Salva su Pocket", - "Condividi su VK": "Condividi su VK", - "Condividi su LINE": "Condividi su LINE", - "Invia via SMS": "Invia via SMS", - "Invia per email": "Invia per email", - "Copia link": "Copia link", - "Link copiato!": "Link copiato!", - "Condividi": "Condividi", - "Tipo Media": "Tipo Media", - "Libro": "Libro", - "Disco": "Disco", - "Tutti i media": "Tutti i media", - "Filtra per tipo": "Filtra per tipo", - "Audiolibro": "Audiolibro", - "DVD": "DVD", - "Altro": "Altro" + "Plugin attivato con successo.": "Plugin attivato con successo.", + "Plugin disattivato con successo.": "Plugin disattivato con successo.", + "Plugin disinstallato con successo.": "Plugin disinstallato con successo.", + "Plugin installato con successo.": "Plugin installato con successo.", + "Plugin non trovato.": "Plugin non trovato.", + "Plugin già attivo.": "Plugin già attivo.", + "Plugin già disattivato.": "Plugin già disattivato.", + "Plugin già installato.": "Plugin già installato.", + "File principale del plugin non trovato.": "File principale del plugin non trovato.", + "Errore durante l'attivazione: %s": "Errore durante l'attivazione: %s", + "Errore durante l'attivazione del plugin.": "Errore durante l'attivazione del plugin.", + "Errore durante la disattivazione: %s": "Errore durante la disattivazione: %s", + "Errore durante la disattivazione del plugin.": "Errore durante la disattivazione del plugin.", + "Errore durante la rimozione dal database.": "Errore durante la rimozione dal database.", + "File ZIP non trovato.": "File ZIP non trovato.", + "File ZIP troppo grande. Dimensione massima: 100 MB.": "File ZIP troppo grande. Dimensione massima: 100 MB.", + "Impossibile aprire il file ZIP.": "Impossibile aprire il file ZIP.", + "File plugin.json non trovato nel pacchetto.": "File plugin.json non trovato nel pacchetto.", + "File plugin.json non valido.": "File plugin.json non valido.", + "Campo obbligatorio mancante: %s": "Campo obbligatorio mancante: %s", + "Nome plugin non valido. Usa solo lettere, numeri, trattini o underscore.": "Nome plugin non valido. Usa solo lettere, numeri, trattini o underscore.", + "Plugin richiede PHP %s o superiore.": "Plugin richiede PHP %s o superiore.", + "Directory plugin già esistente.": "Directory plugin già esistente.", + "Impossibile creare la directory del plugin.": "Impossibile creare la directory del plugin.", + "Percorso di installazione del plugin non valido.": "Percorso di installazione del plugin non valido.", + "Il pacchetto contiene percorsi non validi.": "Il pacchetto contiene percorsi non validi.", + "Impossibile creare la struttura del plugin.": "Impossibile creare la struttura del plugin.", + "Errore durante l'estrazione del plugin.": "Errore durante l'estrazione del plugin.", + "Il pacchetto non contiene file validi.": "Il pacchetto non contiene file validi.", + "Errore durante il salvataggio nel database.": "Errore durante il salvataggio nel database.", + "Errore durante l'installazione: %s": "Errore durante l'installazione: %s", + "Non autorizzato.": "Non autorizzato.", + "Token CSRF non valido.": "Token CSRF non valido.", + "Token configurato": "Token configurato", + "Token configurato — lascia vuoto per mantenere": "Token configurato — lascia vuoto per mantenere", + "File non trovato nell'upload.": "File non trovato nell'upload.", + "Errore durante il caricamento del file (code: %s).": "Errore durante il caricamento del file (code: %s).", + "Solo file ZIP sono accettati.": "Solo file ZIP sono accettati.", + "Errore interno: %s": "Errore interno: %s", + "Formato impostazioni non valido.": "Formato impostazioni non valido.", + "Questo plugin non supporta impostazioni personalizzate.": "Questo plugin non supporta impostazioni personalizzate.", + "Chiave Google Books salvata correttamente.": "Chiave Google Books salvata correttamente.", + "Chiave Google Books rimossa.": "Chiave Google Books rimossa.", + "Import LibraryThing": "Import LibraryThing", + "Import da LibraryThing": "Import da LibraryThing", + "Importa i tuoi libri esportati da LibraryThing.com (formato TSV)": "Importa i tuoi libri esportati da LibraryThing.com (formato TSV)", + "Torna ai Libri": "Torna ai Libri", + "Import CSV Standard": "Import CSV Standard", + "Carica File LibraryThing": "Carica File LibraryThing", + "Arricchimento automatico dati": "Arricchimento automatico dati", + "Arricchisci dati con scraping web (copertine, descrizioni, etc.)": "Arricchisci dati con scraping web (copertine, descrizioni, etc.)", + "Importa Libri": "Importa Libri", + "Import in corso...": "Import in corso...", + "Come Esportare da LibraryThing": "Come Esportare da LibraryThing", + "Importante:": "Importante:", + "Campi Supportati": "Campi Supportati", + "Gestione Plugin LibraryThing": "Gestione Plugin LibraryThing", + "Installato": "Installato", + "Completo": "Completo", + "Incompleto": "Incompleto", + "Campi Database": "Campi Database", + "Il plugin è attualmente installato e funzionante.": "Il plugin è attualmente installato e funzionante.", + "Disinstalla Plugin": "Disinstalla Plugin", + "ATTENZIONE: Disinstallazione Irreversibile": "ATTENZIONE: Disinstallazione Irreversibile", + "Confermo di voler disinstallare il plugin e di aver effettuato un backup dei dati": "Confermo di voler disinstallare il plugin e di aver effettuato un backup dei dati", + "Installa Plugin": "Installa Plugin", + "Export per LibraryThing": "Export per LibraryThing", + "LibraryThing TSV": "LibraryThing TSV", + "File vuoto o formato non valido": "File vuoto o formato non valido", + "Il file deve avere estensione .tsv, .csv o .txt": "Il file deve avere estensione .tsv, .csv o .txt", + "Il file non sembra essere in formato LibraryThing. Colonne richieste: Book Id, Title, Primary Author, ISBNs": "Il file non sembra essere in formato LibraryThing. Colonne richieste: Book Id, Title, Primary Author, ISBNs", + "Nessun file caricato": "Nessun file caricato", + "Errore nel caricamento del file": "Errore nel caricamento del file", + "Aggiunge badge cliccabili alla scheda libro per cercare su Anna's Archive, Z-Library e Project Gutenberg con un click. Ispirato all'estensione browser GoodLib.": "Aggiunge badge cliccabili alla scheda libro per cercare su Anna's Archive, Z-Library e Project Gutenberg con un click. Ispirato all'estensione browser GoodLib.", + "Anna's Archive": "Anna's Archive", + "Catalogo pubblico": "Catalogo pubblico", + "Configura Fonti": "Configura Fonti", + "Domini mirror": "Domini mirror", + "Dominio non valido. Inserisci solo host o host:porta, senza percorsi.": "Dominio non valido. Inserisci solo host o host:porta, senza percorsi.", + "Dominio personalizzato...": "Dominio personalizzato...", + "Errore": "Errore", + "Errore durante l'aggiornamento del profilo.": "Errore durante l'aggiornamento del profilo.", + "Cerca su:": "Cerca su:", + "Predefinita del sito": "Predefinita del sito", + "Cerca \"%s\" su %s": "Cerca \"%s\" su %s", + "Fonti attive": "Fonti attive", + "GoodLib — External Sources": "GoodLib — Fonti Esterne", + "GoodLib — Fonti Esterne": "GoodLib — Fonti Esterne", + "Impostazioni GoodLib salvate correttamente.": "Impostazioni GoodLib salvate correttamente.", + "Mostra badge nella pagina dettaglio libro": "Mostra badge nella pagina dettaglio libro", + "Mostra badge nell'area amministrazione": "Mostra badge nell'area amministrazione", + "Mostra i badge nella pagina dettaglio libro del catalogo": "Mostra i badge nella pagina dettaglio libro del catalogo", + "Mostra i badge nella scheda libro dell'area amministrazione": "Mostra i badge nella scheda libro dell'area amministrazione", + "Project Gutenberg": "Project Gutenberg", + "Puoi scegliere un mirror suggerito oppure selezionare dominio personalizzato.": "Puoi scegliere un mirror suggerito oppure selezionare dominio personalizzato.", + "Puoi usare i mirror suggeriti oppure inserire un dominio custom.": "Puoi usare i mirror suggeriti oppure inserire un dominio custom.", + "Questi siti cambiano dominio spesso. Seleziona un mirror funzionante.": "Questi siti cambiano dominio spesso. Seleziona un mirror funzionante.", + "Scheda libro admin": "Scheda libro admin", + "Sono accettati anche domini personalizzati; se incolli un URL completo verrà salvato solo l'host.": "Sono accettati anche domini personalizzati; se incolli un URL completo verrà salvato solo l'host.", + "Visibilita": "Visibilita", + "Visibilità": "Visibilità", + "Z-Library": "Z-Library", + "Impossibile aprire il file": "Impossibile aprire il file", + "Numero massimo di righe superato (%d)": "Numero massimo di righe superato (%d)", + "Titolo obbligatorio mancante": "Titolo obbligatorio mancante", + "Copertine scaricate:": "Copertine scaricate:", + "Già presenti:": "Già presenti:", + "Impossibile scaricare (libro senza ISBN):": "Impossibile scaricare (libro senza ISBN):", + "Copertina non trovata online:": "Copertina non trovata online:", + "Errori:": "Errori:", + "Leggi PDF": "Leggi PDF", + "Chiudi Visualizzatore": "Chiudi Visualizzatore", + "Scarica PDF": "Scarica PDF", + "Visualizzatore PDF": "Visualizzatore PDF", + "Usa la funzione di ricerca del browser per trovare testo nel documento": "Usa la funzione di ricerca del browser per trovare testo nel documento", + "Usa il controllo schermo intero del viewer o del browser": "Usa il controllo schermo intero del viewer o del browser", + "Condivisione": "Condivisione", + "Seleziona i pulsanti di condivisione da mostrare nella pagina del libro.": "Seleziona i pulsanti di condivisione da mostrare nella pagina del libro.", + "Anteprima": "Anteprima", + "Nessun pulsante selezionato": "Nessun pulsante selezionato", + "Salva impostazioni condivisione": "Salva impostazioni condivisione", + "Impostazioni di condivisione aggiornate.": "Impostazioni di condivisione aggiornate.", + "Condividi su Facebook": "Condividi su Facebook", + "Condividi su X": "Condividi su X", + "Condividi su WhatsApp": "Condividi su WhatsApp", + "Condividi su Telegram": "Condividi su Telegram", + "Condividi su LinkedIn": "Condividi su LinkedIn", + "Condividi su Reddit": "Condividi su Reddit", + "Condividi su Pinterest": "Condividi su Pinterest", + "Condividi su Threads": "Condividi su Threads", + "Condividi su Bluesky": "Condividi su Bluesky", + "Condividi su Tumblr": "Condividi su Tumblr", + "Salva su Pocket": "Salva su Pocket", + "Condividi su VK": "Condividi su VK", + "Condividi su LINE": "Condividi su LINE", + "Invia via SMS": "Invia via SMS", + "Invia per email": "Invia per email", + "Copia link": "Copia link", + "Link copiato!": "Link copiato!", + "Condividi": "Condividi", + "Tipo Media": "Tipo Media", + "Libro": "Libro", + "Disco": "Disco", + "Tutti i media": "Tutti i media", + "Filtra per tipo": "Filtra per tipo", + "Audiolibro": "Audiolibro", + "DVD": "DVD", + "Altro": "Altro", + "Impossibile scaricare (senza ISBN/barcode):": "Impossibile scaricare (senza ISBN/barcode):" } \ No newline at end of file From 5c0d0696568bfe67aa80fc14aa4ccb9e17f3165d Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Tue, 31 Mar 2026 15:43:56 +0200 Subject: [PATCH 25/28] fix: genres from Discogs now saved as parole_chiave MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Discogs plugin: merge genres + styles into parole_chiave (was: only styles, now: "Rock, Alternative Rock, Grunge") - Form JS: handle data.parole_chiave alias alongside data.keywords - BookRepository updateOptionals: add parole_chiave to optional columns (was missing — scraped keywords never persisted via enrichment path) --- app/Models/BookRepository.php | 2 +- app/Views/libri/partials/book_form.php | 7 ++++--- storage/plugins/discogs/DiscogsPlugin.php | 19 +++++++++++-------- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/app/Models/BookRepository.php b/app/Models/BookRepository.php index 39d0bf09..dbcc5bac 100644 --- a/app/Models/BookRepository.php +++ b/app/Models/BookRepository.php @@ -1000,7 +1000,7 @@ public function delete(int $id): bool public function updateOptionals(int $bookId, array $data): void { $cols = []; - foreach (['numero_pagine', 'ean', 'data_pubblicazione', 'anno_pubblicazione', 'traduttore', 'illustratore', 'curatore', 'collana', 'edizione', 'tipo_media'] as $c) { + foreach (['numero_pagine', 'ean', 'data_pubblicazione', 'anno_pubblicazione', 'traduttore', 'illustratore', 'curatore', 'collana', 'edizione', 'tipo_media', 'parole_chiave'] as $c) { if ($this->hasColumn($c) && array_key_exists($c, $data) && $data[$c] !== '' && $data[$c] !== null) { if ($c === 'numero_pagine') { $validated = filter_var($data[$c], FILTER_VALIDATE_INT, ['options' => ['min_range' => 1]]); diff --git a/app/Views/libri/partials/book_form.php b/app/Views/libri/partials/book_form.php index 85aa4ac4..3cec1746 100644 --- a/app/Views/libri/partials/book_form.php +++ b/app/Views/libri/partials/book_form.php @@ -3750,12 +3750,13 @@ function initializeIsbnImport() { } catch (err) { } - // Handle keywords (parole_chiave) - categories from Google Books + // Handle keywords (parole_chiave) - from Google Books, Discogs, MusicBrainz try { - if (data.keywords) { + const kw = data.keywords || data.parole_chiave; + if (kw) { const keywordsInput = document.querySelector('input[name="parole_chiave"]'); if (keywordsInput) { - keywordsInput.value = data.keywords; + keywordsInput.value = kw; } } } catch (err) { diff --git a/storage/plugins/discogs/DiscogsPlugin.php b/storage/plugins/discogs/DiscogsPlugin.php index 1d707c3e..57e51420 100644 --- a/storage/plugins/discogs/DiscogsPlugin.php +++ b/storage/plugins/discogs/DiscogsPlugin.php @@ -456,19 +456,22 @@ private function mapReleaseToPinakes(array $release, array $searchResult, ?strin // Map Discogs format to Pinakes format $format = $this->mapDiscogsFormat($release['formats'] ?? []); - // Extract genre + styles as keywords - $genre = ''; - if (!empty($release['genres'][0])) { - $genre = trim($release['genres'][0]); + // Extract all genres + styles as keywords + $allGenres = []; + foreach ($release['genres'] ?? [] as $g) { + $g = trim((string) $g); + if ($g !== '') { + $allGenres[] = $g; + } } - $styles = []; foreach ($release['styles'] ?? [] as $style) { $s = trim((string) $style); - if ($s !== '') { - $styles[] = $s; + if ($s !== '' && !in_array($s, $allGenres, true)) { + $allGenres[] = $s; } } - $keywords = implode(', ', $styles); + $genre = $allGenres[0] ?? ''; + $keywords = implode(', ', $allGenres); // Year $year = isset($release['year']) && $release['year'] > 0 From 1d46bf984d0dc6a328d6acd998b6965241592441 Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Tue, 31 Mar 2026 17:04:17 +0200 Subject: [PATCH 26/28] =?UTF-8?q?fix:=20CodeRabbit=20round=208=20=E2=80=94?= =?UTF-8?q?=208=20fixes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Discogs: register scrape.isbn.validate for EAN/UPC barcodes 2. mergeBookData: dynamic source from payload, not hardcoded 'discogs' 3. enrichWithDiscogsData: resolveTipoMedia (honors explicit tipo_media) 4. Authors array normalize (handle structured ['name' => '...']) 5. strip_tags: br→newline before stripping in tracklist rendering 6. PluginManager getPluginInstance: try/catch \Throwable → null 7. Updater: backup cleanup non-fatal after successful swap 8. Migration: AFTER formato guard (check column exists) --- app/Support/PluginManager.php | 10 +- app/Support/Updater.php | 10 +- app/Views/libri/scheda_libro.php | 7 +- data/dewey/dewey_completo_it.json | 6 + .../database/migrations/migrate_0.5.4.sql | 8 +- storage/plugins/discogs/DiscogsPlugin.php | 34 +- tests/seed-catalog.spec.js | 162 +++++ vendor/composer/autoload_classmap.php | 559 ------------------ vendor/composer/autoload_static.php | 559 ------------------ vendor/composer/installed.json | 2 +- vendor/composer/installed.php | 2 +- 11 files changed, 230 insertions(+), 1129 deletions(-) create mode 100644 tests/seed-catalog.spec.js diff --git a/app/Support/PluginManager.php b/app/Support/PluginManager.php index 0f1d1786..cdcfb2ce 100644 --- a/app/Support/PluginManager.php +++ b/app/Support/PluginManager.php @@ -360,7 +360,15 @@ public function getPluginInstance(int $pluginId): ?object return null; } - return $this->instantiatePlugin($plugin); + try { + return $this->instantiatePlugin($plugin); + } catch (\Throwable $e) { + SecureLogger::warning("[PluginManager] Failed to instantiate plugin {$plugin['name']}", [ + 'plugin_id' => $pluginId, + 'error' => $e->getMessage(), + ]); + return null; + } } /** diff --git a/app/Support/Updater.php b/app/Support/Updater.php index 6145a132..cfe62733 100644 --- a/app/Support/Updater.php +++ b/app/Support/Updater.php @@ -2259,7 +2259,15 @@ private function updateBundledPlugins(string $sourcePath): void } if (is_dir($backupPath)) { - $this->removeDirectoryTree($backupPath); + try { + $this->removeDirectoryTree($backupPath); + } catch (\Throwable $cleanupError) { + $this->debugLog('WARNING', 'Impossibile rimuovere backup plugin', [ + 'plugin' => $pluginSlug, + 'backup' => $backupPath, + 'error' => $cleanupError->getMessage(), + ]); + } } } catch (\Throwable $e) { if (is_dir($stagingPath)) { diff --git a/app/Views/libri/scheda_libro.php b/app/Views/libri/scheda_libro.php index 5ddbf633..d4288544 100644 --- a/app/Views/libri/scheda_libro.php +++ b/app/Views/libri/scheda_libro.php @@ -601,7 +601,12 @@ class="inline-flex items-center gap-1 px-2 py-1 text-xs font-medium rounded-full
          - + /i', "\n", $libro['descrizione']); + $descText = preg_replace('/<\/(?:p|div|li|h[1-6])>/i', "\n", (string) $descText); + $descText = strip_tags((string) $descText); + ?> + diff --git a/data/dewey/dewey_completo_it.json b/data/dewey/dewey_completo_it.json index 95ba3790..e352890e 100644 --- a/data/dewey/dewey_completo_it.json +++ b/data/dewey/dewey_completo_it.json @@ -6822,6 +6822,12 @@ "name": "Narrativa inglese", "level": 3, "children": [ + { + "code": "823.7", + "name": "Narrativa Inglese, 1800-1837", + "level": 4, + "children": [] + }, { "code": "823.9", "name": "Narrativa Inglese", diff --git a/installer/database/migrations/migrate_0.5.4.sql b/installer/database/migrations/migrate_0.5.4.sql index 96923506..799da32d 100644 --- a/installer/database/migrations/migrate_0.5.4.sql +++ b/installer/database/migrations/migrate_0.5.4.sql @@ -5,8 +5,14 @@ SET @col_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'libri' AND COLUMN_NAME = 'tipo_media'); +SET @formato_exists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'libri' + AND COLUMN_NAME = 'formato'); SET @sql = IF(@col_exists = 0, - "ALTER TABLE libri ADD COLUMN tipo_media ENUM('libro','disco','audiolibro','dvd','altro') NOT NULL DEFAULT 'libro' AFTER formato", + IF(@formato_exists > 0, + "ALTER TABLE libri ADD COLUMN tipo_media ENUM('libro','disco','audiolibro','dvd','altro') NOT NULL DEFAULT 'libro' AFTER formato", + "ALTER TABLE libri ADD COLUMN tipo_media ENUM('libro','disco','audiolibro','dvd','altro') NOT NULL DEFAULT 'libro'"), 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; diff --git a/storage/plugins/discogs/DiscogsPlugin.php b/storage/plugins/discogs/DiscogsPlugin.php index 57e51420..95caf01c 100644 --- a/storage/plugins/discogs/DiscogsPlugin.php +++ b/storage/plugins/discogs/DiscogsPlugin.php @@ -46,6 +46,21 @@ public function activate(): void Hooks::add('scrape.sources', [$this, 'addDiscogsSource'], 8); Hooks::add('scrape.fetch.custom', [$this, 'fetchFromDiscogs'], 8); Hooks::add('scrape.data.modify', [$this, 'enrichWithDiscogsData'], 15); + Hooks::add('scrape.isbn.validate', [$this, 'validateBarcode'], 5); + } + + /** + * Validate barcode: accept ISBN, EAN-13, and UPC-A codes + */ + public function validateBarcode(bool $isValid, string $isbn): bool + { + // If already valid (ISBN), keep it + if ($isValid) { + return true; + } + // Accept EAN-13 (13 digits) and UPC-A (12 digits) + $clean = preg_replace('/[^0-9]/', '', $isbn); + return strlen((string) $clean) === 13 || strlen((string) $clean) === 12; } /** @@ -107,6 +122,7 @@ private function registerHooks(): void ['scrape.sources', 'addDiscogsSource', 8], ['scrape.fetch.custom', 'fetchFromDiscogs', 8], ['scrape.data.modify', 'enrichWithDiscogsData', 15], + ['scrape.isbn.validate', 'validateBarcode', 5], ]; $stmt = null; @@ -310,7 +326,12 @@ private function searchDiscogsByTitleArtist($currentResult, ?string $token): ?ar $artist = trim((string) ($currentResult['author'] ?? '')); if ($artist === '' && !empty($currentResult['authors'])) { if (is_array($currentResult['authors'])) { - $artist = trim((string) ($currentResult['authors'][0] ?? '')); + $firstAuthor = $currentResult['authors'][0] ?? ''; + if (is_array($firstAuthor)) { + $artist = trim((string) ($firstAuthor['name'] ?? '')); + } else { + $artist = trim((string) $firstAuthor); + } } else { $artist = trim((string) $currentResult['authors']); } @@ -367,9 +388,11 @@ public function enrichWithDiscogsData(array $data, string $isbn, array $source, } // Only enrich from Deezer for music sources (avoid attaching music covers to books) - $resolvedType = \App\Support\MediaLabels::inferTipoMedia($data['format'] ?? $data['formato'] ?? ''); - $isMusicSource = ($data['tipo_media'] ?? '') === 'disco' - || $resolvedType === 'disco' + $resolvedType = \App\Support\MediaLabels::resolveTipoMedia( + $data['format'] ?? $data['formato'] ?? null, + $data['tipo_media'] ?? null + ); + $isMusicSource = $resolvedType === 'disco' || ($data['source'] ?? '') === 'discogs' || ($data['source'] ?? '') === 'musicbrainz'; @@ -938,7 +961,8 @@ private function mergeBookData(?array $existing, ?array $new): ?array { // Use BookDataMerger if available if (class_exists('\\App\\Support\\BookDataMerger')) { - return \App\Support\BookDataMerger::merge($existing, $new, 'discogs'); + $mergeSource = $new['source'] ?? ($existing['source'] ?? 'discogs'); + return \App\Support\BookDataMerger::merge($existing, $new, $mergeSource); } // Fallback: simple merge diff --git a/tests/seed-catalog.spec.js b/tests/seed-catalog.spec.js new file mode 100644 index 00000000..cb524c8b --- /dev/null +++ b/tests/seed-catalog.spec.js @@ -0,0 +1,162 @@ +// @ts-check +/** + * Seed the catalog with books and music records. + * This is a SEEDER — it does NOT clean up. Records persist for manual testing. + * Run: /tmp/run-e2e.sh tests/seed-catalog.spec.js --config=tests/playwright.config.js --workers=1 + */ +const { test, expect } = require('@playwright/test'); +const { execFileSync } = require('child_process'); + +const BASE = process.env.E2E_BASE_URL || 'http://localhost:8081'; +const ADMIN_EMAIL = process.env.E2E_ADMIN_EMAIL || ''; +const ADMIN_PASS = process.env.E2E_ADMIN_PASS || ''; + +// 10 music records via Discogs barcode scraping +const MUSIC_BARCODES = [ + { barcode: '0720642442524', note: 'Nirvana - Nevermind' }, + { barcode: '5099902894225', note: 'Pink Floyd - Meddle' }, + { barcode: '0094638246824', note: 'Beatles - Abbey Road' }, + { barcode: '0888837168625', note: 'Daft Punk - RAM' }, + { barcode: '5099751076322', note: 'AC/DC' }, + { barcode: '0602547428714', note: 'Adele - 25' }, + { barcode: '0602537615810', note: 'Arctic Monkeys - AM' }, + { barcode: '0886971592924', note: 'Muse - The Resistance' }, + { barcode: '0602527947747', note: 'Coldplay - Mylo Xyloto' }, + { barcode: '0602557048032', note: 'Metallica - Hardwired' }, +]; + +// 5 books via ISBN scraping +const BOOK_ISBNS = [ + { isbn: '9780061120084', note: 'To Kill a Mockingbird' }, + { isbn: '9780451524935', note: '1984' }, + { isbn: '9780141439518', note: 'Pride and Prejudice' }, + { isbn: '9780060935467', note: 'Don Quixote' }, + { isbn: '9780142437230', note: 'Moby Dick' }, +]; + +// 1 manual entry (punk split without barcode) +const MANUAL_ENTRIES = [ + { titolo: 'Zeromila / Orsetti HC — Split', formato: 'vinile', tipo_media: 'disco' }, +]; + +test.describe.serial('Seed Catalog (books + music)', () => { + /** @type {import('@playwright/test').Page} */ + let page; + /** @type {import('@playwright/test').BrowserContext} */ + let context; + + test.beforeAll(async ({ browser }) => { + test.skip(!ADMIN_EMAIL || !ADMIN_PASS, 'Missing env vars'); + context = await browser.newContext(); + page = await context.newPage(); + + await page.goto(`${BASE}/accedi`); + await page.fill('input[name="email"]', ADMIN_EMAIL); + await page.fill('input[name="password"]', ADMIN_PASS); + await page.click('button[type="submit"]'); + await page.waitForURL(/\/admin\//, { timeout: 15000 }); + }); + + test.afterAll(async () => { + // DO NOT clean up — this is a seeder + await context?.close(); + }); + + // Seed music records via barcode scraping + for (let i = 0; i < MUSIC_BARCODES.length; i++) { + const rec = MUSIC_BARCODES[i]; + test(`Music ${i + 1}: ${rec.note}`, async () => { + test.setTimeout(30000); + await page.goto(`${BASE}/admin/libri/crea`); + await page.waitForLoadState('domcontentloaded'); + + const importBtn = page.locator('#btnImportIsbn'); + if (await importBtn.isVisible({ timeout: 3000 }).catch(() => false)) { + await page.fill('#importIsbn', rec.barcode); + await importBtn.click(); + await page.waitForTimeout(8000); + + const title = await page.locator('input[name="titolo"]').inputValue(); + if (!title) { + await page.locator('input[name="titolo"]').fill(`CD (${rec.barcode})`); + await page.locator('input[name="ean"]').fill(rec.barcode); + await page.locator('input[name="formato"]').fill('cd_audio'); + } + } else { + await page.locator('input[name="titolo"]').fill(`CD (${rec.barcode})`); + await page.locator('input[name="ean"]').fill(rec.barcode); + await page.locator('input[name="formato"]').fill('cd_audio'); + } + + const copie = await page.locator('input[name="copie_totali"]').inputValue(); + if (!copie || copie === '0') await page.locator('input[name="copie_totali"]').fill('1'); + + await page.locator('button[type="submit"]').first().click(); + const swal = page.locator('.swal2-confirm'); + if (await swal.isVisible({ timeout: 3000 }).catch(() => false)) await swal.click(); + await page.waitForURL(/\/admin\/libri\/\d+/, { timeout: 15000 }).catch(() => {}); + console.log(` ✓ ${rec.note}`); + }); + } + + // Seed books via ISBN + for (let i = 0; i < BOOK_ISBNS.length; i++) { + const book = BOOK_ISBNS[i]; + test(`Book ${i + 1}: ${book.note}`, async () => { + test.setTimeout(30000); + await page.goto(`${BASE}/admin/libri/crea`); + await page.waitForLoadState('domcontentloaded'); + + const importBtn = page.locator('#btnImportIsbn'); + if (await importBtn.isVisible({ timeout: 3000 }).catch(() => false)) { + await page.fill('#importIsbn', book.isbn); + await importBtn.click(); + await page.waitForTimeout(8000); + + const title = await page.locator('input[name="titolo"]').inputValue(); + if (!title) { + await page.locator('input[name="titolo"]').fill(book.note); + await page.locator('input[name="isbn13"]').fill(book.isbn); + } + } else { + await page.locator('input[name="titolo"]').fill(book.note); + await page.locator('input[name="isbn13"]').fill(book.isbn); + } + + const copie = await page.locator('input[name="copie_totali"]').inputValue(); + if (!copie || copie === '0') await page.locator('input[name="copie_totali"]').fill('1'); + + await page.locator('button[type="submit"]').first().click(); + const swal = page.locator('.swal2-confirm'); + if (await swal.isVisible({ timeout: 3000 }).catch(() => false)) await swal.click(); + await page.waitForURL(/\/admin\/libri\/\d+/, { timeout: 15000 }).catch(() => {}); + console.log(` ✓ ${book.note}`); + }); + } + + // Manual entries + for (let i = 0; i < MANUAL_ENTRIES.length; i++) { + const entry = MANUAL_ENTRIES[i]; + test(`Manual ${i + 1}: ${entry.titolo}`, async () => { + test.setTimeout(15000); + await page.goto(`${BASE}/admin/libri/crea`); + await page.waitForLoadState('domcontentloaded'); + + await page.locator('input[name="titolo"]').fill(entry.titolo); + await page.locator('input[name="formato"]').fill(entry.formato); + if (entry.tipo_media) { + const sel = page.locator('#tipo_media'); + if (await sel.isVisible({ timeout: 2000 }).catch(() => false)) { + await sel.selectOption(entry.tipo_media); + } + } + await page.locator('input[name="copie_totali"]').fill('1'); + + await page.locator('button[type="submit"]').first().click(); + const swal = page.locator('.swal2-confirm'); + if (await swal.isVisible({ timeout: 3000 }).catch(() => false)) await swal.click(); + await page.waitForURL(/\/admin\/libri\/\d+/, { timeout: 15000 }).catch(() => {}); + console.log(` ✓ ${entry.titolo}`); + }); + } +}); diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index a529c0e5..922794da 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -6,557 +6,13 @@ $baseDir = dirname($vendorDir); return array( - 'App\\Controllers\\Admin\\CmsAdminController' => $baseDir . '/app/Controllers/Admin/CmsAdminController.php', - 'App\\Controllers\\Admin\\LanguagesController' => $baseDir . '/app/Controllers/Admin/LanguagesController.php', - 'App\\Controllers\\Admin\\MessagesController' => $baseDir . '/app/Controllers/Admin/MessagesController.php', - 'App\\Controllers\\Admin\\NotificationsController' => $baseDir . '/app/Controllers/Admin/NotificationsController.php', - 'App\\Controllers\\Admin\\RecensioniAdminController' => $baseDir . '/app/Controllers/Admin/RecensioniAdminController.php', - 'App\\Controllers\\Admin\\StatsController' => $baseDir . '/app/Controllers/Admin/StatsController.php', - 'App\\Controllers\\AuthController' => $baseDir . '/app/Controllers/AuthController.php', - 'App\\Controllers\\AutoriApiController' => $baseDir . '/app/Controllers/AutoriApiController.php', - 'App\\Controllers\\AutoriController' => $baseDir . '/app/Controllers/AutoriController.php', - 'App\\Controllers\\CmsController' => $baseDir . '/app/Controllers/CmsController.php', - 'App\\Controllers\\CollaneController' => $baseDir . '/app/Controllers/CollaneController.php', - 'App\\Controllers\\CollocazioneController' => $baseDir . '/app/Controllers/CollocazioneController.php', - 'App\\Controllers\\ContactController' => $baseDir . '/app/Controllers/ContactController.php', - 'App\\Controllers\\CookiesController' => $baseDir . '/app/Controllers/CookiesController.php', - 'App\\Controllers\\CopyController' => $baseDir . '/app/Controllers/CopyController.php', - 'App\\Controllers\\CoverController' => $baseDir . '/app/Controllers/CoverController.php', - 'App\\Controllers\\CsvImportController' => $baseDir . '/app/Controllers/CsvImportController.php', - 'App\\Controllers\\DashboardController' => $baseDir . '/app/Controllers/DashboardController.php', - 'App\\Controllers\\DeweyApiController' => $baseDir . '/app/Controllers/DeweyApiController.php', - 'App\\Controllers\\EditoriApiController' => $baseDir . '/app/Controllers/EditoriApiController.php', - 'App\\Controllers\\EditorsController' => $baseDir . '/app/Controllers/EditorsController.php', - 'App\\Controllers\\EventsController' => $baseDir . '/app/Controllers/EventsController.php', - 'App\\Controllers\\FeedController' => $baseDir . '/app/Controllers/FeedController.php', - 'App\\Controllers\\FrontendController' => $baseDir . '/app/Controllers/FrontendController.php', - 'App\\Controllers\\GeneriApiController' => $baseDir . '/app/Controllers/GeneriApiController.php', - 'App\\Controllers\\GeneriController' => $baseDir . '/app/Controllers/GeneriController.php', - 'App\\Controllers\\ImportHistoryController' => $baseDir . '/app/Controllers/ImportHistoryController.php', - 'App\\Controllers\\LanguageController' => $baseDir . '/app/Controllers/LanguageController.php', - 'App\\Controllers\\LibraryThingImportController' => $baseDir . '/app/Controllers/LibraryThingImportController.php', - 'App\\Controllers\\LibriApiController' => $baseDir . '/app/Controllers/LibriApiController.php', - 'App\\Controllers\\LibriController' => $baseDir . '/app/Controllers/LibriController.php', - 'App\\Controllers\\LoanApprovalController' => $baseDir . '/app/Controllers/LoanApprovalController.php', - 'App\\Controllers\\MaintenanceController' => $baseDir . '/app/Controllers/MaintenanceController.php', - 'App\\Controllers\\PasswordController' => $baseDir . '/app/Controllers/PasswordController.php', - 'App\\Controllers\\PluginController' => $baseDir . '/app/Controllers/PluginController.php', - 'App\\Controllers\\PrestitiApiController' => $baseDir . '/app/Controllers/PrestitiApiController.php', - 'App\\Controllers\\PrestitiController' => $baseDir . '/app/Controllers/PrestitiController.php', - 'App\\Controllers\\PrivacyController' => $baseDir . '/app/Controllers/PrivacyController.php', - 'App\\Controllers\\ProfileController' => $baseDir . '/app/Controllers/ProfileController.php', - 'App\\Controllers\\PublicApiController' => $baseDir . '/app/Controllers/PublicApiController.php', - 'App\\Controllers\\RecensioniController' => $baseDir . '/app/Controllers/RecensioniController.php', - 'App\\Controllers\\RegistrationController' => $baseDir . '/app/Controllers/RegistrationController.php', - 'App\\Controllers\\ReservationManager' => $baseDir . '/app/Controllers/ReservationManager.php', - 'App\\Controllers\\ReservationsAdminController' => $baseDir . '/app/Controllers/ReservationsAdminController.php', - 'App\\Controllers\\ReservationsController' => $baseDir . '/app/Controllers/ReservationsController.php', - 'App\\Controllers\\ScrapeController' => $baseDir . '/app/Controllers/ScrapeController.php', - 'App\\Controllers\\SearchController' => $baseDir . '/app/Controllers/SearchController.php', - 'App\\Controllers\\SecurityLogsController' => $baseDir . '/app/Controllers/SecurityLogsController.php', - 'App\\Controllers\\SeoController' => $baseDir . '/app/Controllers/SeoController.php', - 'App\\Controllers\\SettingsController' => $baseDir . '/app/Controllers/SettingsController.php', - 'App\\Controllers\\ThemeController' => $baseDir . '/app/Controllers/ThemeController.php', - 'App\\Controllers\\UpdateController' => $baseDir . '/app/Controllers/UpdateController.php', - 'App\\Controllers\\UserActionsController' => $baseDir . '/app/Controllers/UserActionsController.php', - 'App\\Controllers\\UserDashboardController' => $baseDir . '/app/Controllers/UserDashboardController.php', - 'App\\Controllers\\UserWishlistController' => $baseDir . '/app/Controllers/UserWishlistController.php', - 'App\\Controllers\\UsersController' => $baseDir . '/app/Controllers/UsersController.php', - 'App\\Controllers\\UtentiApiController' => $baseDir . '/app/Controllers/UtentiApiController.php', - 'App\\Middleware\\AdminAuthMiddleware' => $baseDir . '/app/Middleware/AdminAuthMiddleware.php', - 'App\\Middleware\\ApiKeyMiddleware' => $baseDir . '/app/Middleware/ApiKeyMiddleware.php', - 'App\\Middleware\\AuthMiddleware' => $baseDir . '/app/Middleware/AuthMiddleware.php', - 'App\\Middleware\\BasePathMiddleware' => $baseDir . '/app/Middleware/BasePathMiddleware.php', - 'App\\Middleware\\CsrfMiddleware' => $baseDir . '/app/Middleware/CsrfMiddleware.php', - 'App\\Middleware\\RateLimitMiddleware' => $baseDir . '/app/Middleware/RateLimitMiddleware.php', - 'App\\Middleware\\RememberMeMiddleware' => $baseDir . '/app/Middleware/RememberMeMiddleware.php', - 'App\\Models\\ApiKeyRepository' => $baseDir . '/app/Models/ApiKeyRepository.php', - 'App\\Models\\AuthorRepository' => $baseDir . '/app/Models/AuthorRepository.php', - 'App\\Models\\BookRepository' => $baseDir . '/app/Models/BookRepository.php', - 'App\\Models\\CollocationRepository' => $baseDir . '/app/Models/CollocationRepository.php', - 'App\\Models\\CopyRepository' => $baseDir . '/app/Models/CopyRepository.php', - 'App\\Models\\DashboardStats' => $baseDir . '/app/Models/DashboardStats.php', - 'App\\Models\\GenereRepository' => $baseDir . '/app/Models/GenereRepository.php', - 'App\\Models\\Language' => $baseDir . '/app/Models/Language.php', - 'App\\Models\\LoanRepository' => $baseDir . '/app/Models/LoanRepository.php', - 'App\\Models\\PublisherRepository' => $baseDir . '/app/Models/PublisherRepository.php', - 'App\\Models\\SettingsRepository' => $baseDir . '/app/Models/SettingsRepository.php', - 'App\\Models\\TaxonomyRepository' => $baseDir . '/app/Models/TaxonomyRepository.php', - 'App\\Models\\UserRepository' => $baseDir . '/app/Models/UserRepository.php', - 'App\\Repositories\\RecensioniRepository' => $baseDir . '/app/Repositories/RecensioniRepository.php', - 'App\\Services\\ReservationReassignmentService' => $baseDir . '/app/Services/ReservationReassignmentService.php', - 'App\\Support\\AuthorNormalizer' => $baseDir . '/app/Support/AuthorNormalizer.php', - 'App\\Support\\AuthorizationHelper' => $baseDir . '/app/Support/AuthorizationHelper.php', - 'App\\Support\\BookDataMerger' => $baseDir . '/app/Support/BookDataMerger.php', - 'App\\Support\\Branding' => $baseDir . '/app/Support/Branding.php', - 'App\\Support\\BundledPlugins' => $baseDir . '/app/Support/BundledPlugins.php', - 'App\\Support\\CmsHelper' => $baseDir . '/app/Support/CmsHelper.php', - 'App\\Support\\ConfigStore' => $baseDir . '/app/Support/ConfigStore.php', - 'App\\Support\\ContentSanitizer' => $baseDir . '/app/Support/ContentSanitizer.php', - 'App\\Support\\Csrf' => $baseDir . '/app/Support/Csrf.php', - 'App\\Support\\CsrfHelper' => $baseDir . '/app/Support/CsrfHelper.php', - 'App\\Support\\DataIntegrity' => $baseDir . '/app/Support/DataIntegrity.php', - 'App\\Support\\DateHelper' => $baseDir . '/app/Support/DateHelper.php', - 'App\\Support\\DeweyAutoPopulator' => $baseDir . '/app/Support/DeweyAutoPopulator.php', - 'App\\Support\\EmailService' => $baseDir . '/app/Support/EmailService.php', - 'App\\Support\\GenreHelper' => $baseDir . '/app/Support/GenreHelper.php', - 'App\\Support\\HookManager' => $baseDir . '/app/Support/HookManager.php', - 'App\\Support\\Hooks' => $baseDir . '/app/Support/Hooks.php', - 'App\\Support\\HreflangHelper' => $baseDir . '/app/Support/HreflangHelper.php', - 'App\\Support\\HtmlHelper' => $baseDir . '/app/Support/HtmlHelper.php', - 'App\\Support\\I18n' => $baseDir . '/app/Support/I18n.php', - 'App\\Support\\IcsGenerator' => $baseDir . '/app/Support/IcsGenerator.php', - 'App\\Support\\ImportLogger' => $baseDir . '/app/Support/ImportLogger.php', - 'App\\Support\\InputValidator' => $baseDir . '/app/Support/InputValidator.php', - 'App\\Support\\IsbnFormatter' => $baseDir . '/app/Support/IsbnFormatter.php', - 'App\\Support\\LibraryThingInstaller' => $baseDir . '/app/Support/LibraryThingInstaller.php', - 'App\\Support\\LoanPdfGenerator' => $baseDir . '/app/Support/LoanPdfGenerator.php', - 'App\\Support\\Log' => $baseDir . '/app/Support/Log.php', - 'App\\Support\\Mailer' => $baseDir . '/app/Support/Mailer.php', - 'App\\Support\\MaintenanceService' => $baseDir . '/app/Support/MaintenanceService.php', - 'App\\Support\\MediaLabels' => $baseDir . '/app/Support/MediaLabels.php', - 'App\\Support\\MergeHelper' => $baseDir . '/app/Support/MergeHelper.php', - 'App\\Support\\NotificationService' => $baseDir . '/app/Support/NotificationService.php', - 'App\\Support\\PluginManager' => $baseDir . '/app/Support/PluginManager.php', - 'App\\Support\\QueryCache' => $baseDir . '/app/Support/QueryCache.php', - 'App\\Support\\RateLimiter' => $baseDir . '/app/Support/RateLimiter.php', - 'App\\Support\\RememberMeService' => $baseDir . '/app/Support/RememberMeService.php', - 'App\\Support\\RouteTranslator' => $baseDir . '/app/Support/RouteTranslator.php', - 'App\\Support\\ScrapingService' => $baseDir . '/app/Support/ScrapingService.php', - 'App\\Support\\SecureLogger' => $baseDir . '/app/Support/SecureLogger.php', - 'App\\Support\\SettingsEncryption' => $baseDir . '/app/Support/SettingsEncryption.php', - 'App\\Support\\SettingsMailTemplates' => $baseDir . '/app/Support/SettingsMailTemplates.php', - 'App\\Support\\SharingProviders' => $baseDir . '/app/Support/SharingProviders.php', - 'App\\Support\\SitemapGenerator' => $baseDir . '/app/Support/SitemapGenerator.php', - 'App\\Support\\ThemeColorizer' => $baseDir . '/app/Support/ThemeColorizer.php', - 'App\\Support\\ThemeManager' => $baseDir . '/app/Support/ThemeManager.php', - 'App\\Support\\Updater' => $baseDir . '/app/Support/Updater.php', 'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', - 'DI\\Attribute\\Inject' => $vendorDir . '/php-di/php-di/src/Attribute/Inject.php', - 'DI\\Attribute\\Injectable' => $vendorDir . '/php-di/php-di/src/Attribute/Injectable.php', - 'DI\\CompiledContainer' => $vendorDir . '/php-di/php-di/src/CompiledContainer.php', - 'DI\\Compiler\\Compiler' => $vendorDir . '/php-di/php-di/src/Compiler/Compiler.php', - 'DI\\Compiler\\ObjectCreationCompiler' => $vendorDir . '/php-di/php-di/src/Compiler/ObjectCreationCompiler.php', - 'DI\\Compiler\\RequestedEntryHolder' => $vendorDir . '/php-di/php-di/src/Compiler/RequestedEntryHolder.php', - 'DI\\Container' => $vendorDir . '/php-di/php-di/src/Container.php', - 'DI\\ContainerBuilder' => $vendorDir . '/php-di/php-di/src/ContainerBuilder.php', - 'DI\\Definition\\ArrayDefinition' => $vendorDir . '/php-di/php-di/src/Definition/ArrayDefinition.php', - 'DI\\Definition\\ArrayDefinitionExtension' => $vendorDir . '/php-di/php-di/src/Definition/ArrayDefinitionExtension.php', - 'DI\\Definition\\AutowireDefinition' => $vendorDir . '/php-di/php-di/src/Definition/AutowireDefinition.php', - 'DI\\Definition\\DecoratorDefinition' => $vendorDir . '/php-di/php-di/src/Definition/DecoratorDefinition.php', - 'DI\\Definition\\Definition' => $vendorDir . '/php-di/php-di/src/Definition/Definition.php', - 'DI\\Definition\\Dumper\\ObjectDefinitionDumper' => $vendorDir . '/php-di/php-di/src/Definition/Dumper/ObjectDefinitionDumper.php', - 'DI\\Definition\\EnvironmentVariableDefinition' => $vendorDir . '/php-di/php-di/src/Definition/EnvironmentVariableDefinition.php', - 'DI\\Definition\\Exception\\InvalidAttribute' => $vendorDir . '/php-di/php-di/src/Definition/Exception/InvalidAttribute.php', - 'DI\\Definition\\Exception\\InvalidDefinition' => $vendorDir . '/php-di/php-di/src/Definition/Exception/InvalidDefinition.php', - 'DI\\Definition\\ExtendsPreviousDefinition' => $vendorDir . '/php-di/php-di/src/Definition/ExtendsPreviousDefinition.php', - 'DI\\Definition\\FactoryDefinition' => $vendorDir . '/php-di/php-di/src/Definition/FactoryDefinition.php', - 'DI\\Definition\\Helper\\AutowireDefinitionHelper' => $vendorDir . '/php-di/php-di/src/Definition/Helper/AutowireDefinitionHelper.php', - 'DI\\Definition\\Helper\\CreateDefinitionHelper' => $vendorDir . '/php-di/php-di/src/Definition/Helper/CreateDefinitionHelper.php', - 'DI\\Definition\\Helper\\DefinitionHelper' => $vendorDir . '/php-di/php-di/src/Definition/Helper/DefinitionHelper.php', - 'DI\\Definition\\Helper\\FactoryDefinitionHelper' => $vendorDir . '/php-di/php-di/src/Definition/Helper/FactoryDefinitionHelper.php', - 'DI\\Definition\\InstanceDefinition' => $vendorDir . '/php-di/php-di/src/Definition/InstanceDefinition.php', - 'DI\\Definition\\ObjectDefinition' => $vendorDir . '/php-di/php-di/src/Definition/ObjectDefinition.php', - 'DI\\Definition\\ObjectDefinition\\MethodInjection' => $vendorDir . '/php-di/php-di/src/Definition/ObjectDefinition/MethodInjection.php', - 'DI\\Definition\\ObjectDefinition\\PropertyInjection' => $vendorDir . '/php-di/php-di/src/Definition/ObjectDefinition/PropertyInjection.php', - 'DI\\Definition\\Reference' => $vendorDir . '/php-di/php-di/src/Definition/Reference.php', - 'DI\\Definition\\Resolver\\ArrayResolver' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/ArrayResolver.php', - 'DI\\Definition\\Resolver\\DecoratorResolver' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/DecoratorResolver.php', - 'DI\\Definition\\Resolver\\DefinitionResolver' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/DefinitionResolver.php', - 'DI\\Definition\\Resolver\\EnvironmentVariableResolver' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/EnvironmentVariableResolver.php', - 'DI\\Definition\\Resolver\\FactoryResolver' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/FactoryResolver.php', - 'DI\\Definition\\Resolver\\InstanceInjector' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/InstanceInjector.php', - 'DI\\Definition\\Resolver\\ObjectCreator' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/ObjectCreator.php', - 'DI\\Definition\\Resolver\\ParameterResolver' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/ParameterResolver.php', - 'DI\\Definition\\Resolver\\ResolverDispatcher' => $vendorDir . '/php-di/php-di/src/Definition/Resolver/ResolverDispatcher.php', - 'DI\\Definition\\SelfResolvingDefinition' => $vendorDir . '/php-di/php-di/src/Definition/SelfResolvingDefinition.php', - 'DI\\Definition\\Source\\AttributeBasedAutowiring' => $vendorDir . '/php-di/php-di/src/Definition/Source/AttributeBasedAutowiring.php', - 'DI\\Definition\\Source\\Autowiring' => $vendorDir . '/php-di/php-di/src/Definition/Source/Autowiring.php', - 'DI\\Definition\\Source\\DefinitionArray' => $vendorDir . '/php-di/php-di/src/Definition/Source/DefinitionArray.php', - 'DI\\Definition\\Source\\DefinitionFile' => $vendorDir . '/php-di/php-di/src/Definition/Source/DefinitionFile.php', - 'DI\\Definition\\Source\\DefinitionNormalizer' => $vendorDir . '/php-di/php-di/src/Definition/Source/DefinitionNormalizer.php', - 'DI\\Definition\\Source\\DefinitionSource' => $vendorDir . '/php-di/php-di/src/Definition/Source/DefinitionSource.php', - 'DI\\Definition\\Source\\MutableDefinitionSource' => $vendorDir . '/php-di/php-di/src/Definition/Source/MutableDefinitionSource.php', - 'DI\\Definition\\Source\\NoAutowiring' => $vendorDir . '/php-di/php-di/src/Definition/Source/NoAutowiring.php', - 'DI\\Definition\\Source\\ReflectionBasedAutowiring' => $vendorDir . '/php-di/php-di/src/Definition/Source/ReflectionBasedAutowiring.php', - 'DI\\Definition\\Source\\SourceCache' => $vendorDir . '/php-di/php-di/src/Definition/Source/SourceCache.php', - 'DI\\Definition\\Source\\SourceChain' => $vendorDir . '/php-di/php-di/src/Definition/Source/SourceChain.php', - 'DI\\Definition\\StringDefinition' => $vendorDir . '/php-di/php-di/src/Definition/StringDefinition.php', - 'DI\\Definition\\ValueDefinition' => $vendorDir . '/php-di/php-di/src/Definition/ValueDefinition.php', - 'DI\\DependencyException' => $vendorDir . '/php-di/php-di/src/DependencyException.php', - 'DI\\FactoryInterface' => $vendorDir . '/php-di/php-di/src/FactoryInterface.php', - 'DI\\Factory\\RequestedEntry' => $vendorDir . '/php-di/php-di/src/Factory/RequestedEntry.php', - 'DI\\Invoker\\DefinitionParameterResolver' => $vendorDir . '/php-di/php-di/src/Invoker/DefinitionParameterResolver.php', - 'DI\\Invoker\\FactoryParameterResolver' => $vendorDir . '/php-di/php-di/src/Invoker/FactoryParameterResolver.php', - 'DI\\NotFoundException' => $vendorDir . '/php-di/php-di/src/NotFoundException.php', - 'DI\\Proxy\\NativeProxyFactory' => $vendorDir . '/php-di/php-di/src/Proxy/NativeProxyFactory.php', - 'DI\\Proxy\\ProxyFactory' => $vendorDir . '/php-di/php-di/src/Proxy/ProxyFactory.php', - 'DI\\Proxy\\ProxyFactoryInterface' => $vendorDir . '/php-di/php-di/src/Proxy/ProxyFactoryInterface.php', 'Datamatrix' => $vendorDir . '/tecnickcom/tcpdf/include/barcodes/datamatrix.php', - 'Dotenv\\Dotenv' => $vendorDir . '/vlucas/phpdotenv/src/Dotenv.php', - 'Dotenv\\Exception\\ExceptionInterface' => $vendorDir . '/vlucas/phpdotenv/src/Exception/ExceptionInterface.php', - 'Dotenv\\Exception\\InvalidEncodingException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/InvalidEncodingException.php', - 'Dotenv\\Exception\\InvalidFileException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/InvalidFileException.php', - 'Dotenv\\Exception\\InvalidPathException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/InvalidPathException.php', - 'Dotenv\\Exception\\ValidationException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/ValidationException.php', - 'Dotenv\\Loader\\Loader' => $vendorDir . '/vlucas/phpdotenv/src/Loader/Loader.php', - 'Dotenv\\Loader\\LoaderInterface' => $vendorDir . '/vlucas/phpdotenv/src/Loader/LoaderInterface.php', - 'Dotenv\\Loader\\Resolver' => $vendorDir . '/vlucas/phpdotenv/src/Loader/Resolver.php', - 'Dotenv\\Parser\\Entry' => $vendorDir . '/vlucas/phpdotenv/src/Parser/Entry.php', - 'Dotenv\\Parser\\EntryParser' => $vendorDir . '/vlucas/phpdotenv/src/Parser/EntryParser.php', - 'Dotenv\\Parser\\Lexer' => $vendorDir . '/vlucas/phpdotenv/src/Parser/Lexer.php', - 'Dotenv\\Parser\\Lines' => $vendorDir . '/vlucas/phpdotenv/src/Parser/Lines.php', - 'Dotenv\\Parser\\Parser' => $vendorDir . '/vlucas/phpdotenv/src/Parser/Parser.php', - 'Dotenv\\Parser\\ParserInterface' => $vendorDir . '/vlucas/phpdotenv/src/Parser/ParserInterface.php', - 'Dotenv\\Parser\\Value' => $vendorDir . '/vlucas/phpdotenv/src/Parser/Value.php', - 'Dotenv\\Repository\\AdapterRepository' => $vendorDir . '/vlucas/phpdotenv/src/Repository/AdapterRepository.php', - 'Dotenv\\Repository\\Adapter\\AdapterInterface' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/AdapterInterface.php', - 'Dotenv\\Repository\\Adapter\\ApacheAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php', - 'Dotenv\\Repository\\Adapter\\ArrayAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php', - 'Dotenv\\Repository\\Adapter\\EnvConstAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php', - 'Dotenv\\Repository\\Adapter\\GuardedWriter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/GuardedWriter.php', - 'Dotenv\\Repository\\Adapter\\ImmutableWriter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ImmutableWriter.php', - 'Dotenv\\Repository\\Adapter\\MultiReader' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/MultiReader.php', - 'Dotenv\\Repository\\Adapter\\MultiWriter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/MultiWriter.php', - 'Dotenv\\Repository\\Adapter\\PutenvAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php', - 'Dotenv\\Repository\\Adapter\\ReaderInterface' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php', - 'Dotenv\\Repository\\Adapter\\ReplacingWriter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php', - 'Dotenv\\Repository\\Adapter\\ServerConstAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php', - 'Dotenv\\Repository\\Adapter\\WriterInterface' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php', - 'Dotenv\\Repository\\RepositoryBuilder' => $vendorDir . '/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php', - 'Dotenv\\Repository\\RepositoryInterface' => $vendorDir . '/vlucas/phpdotenv/src/Repository/RepositoryInterface.php', - 'Dotenv\\Store\\FileStore' => $vendorDir . '/vlucas/phpdotenv/src/Store/FileStore.php', - 'Dotenv\\Store\\File\\Paths' => $vendorDir . '/vlucas/phpdotenv/src/Store/File/Paths.php', - 'Dotenv\\Store\\File\\Reader' => $vendorDir . '/vlucas/phpdotenv/src/Store/File/Reader.php', - 'Dotenv\\Store\\StoreBuilder' => $vendorDir . '/vlucas/phpdotenv/src/Store/StoreBuilder.php', - 'Dotenv\\Store\\StoreInterface' => $vendorDir . '/vlucas/phpdotenv/src/Store/StoreInterface.php', - 'Dotenv\\Store\\StringStore' => $vendorDir . '/vlucas/phpdotenv/src/Store/StringStore.php', - 'Dotenv\\Util\\Regex' => $vendorDir . '/vlucas/phpdotenv/src/Util/Regex.php', - 'Dotenv\\Util\\Str' => $vendorDir . '/vlucas/phpdotenv/src/Util/Str.php', - 'Dotenv\\Validator' => $vendorDir . '/vlucas/phpdotenv/src/Validator.php', - 'Emleons\\SimRating\\Interfaces\\RendererInterface' => $vendorDir . '/emleons/sim-rating/src/Interfaces/RendererInterface.php', - 'Emleons\\SimRating\\Rating' => $vendorDir . '/emleons/sim-rating/src/Rating.php', - 'Emleons\\SimRating\\Renderer\\HtmlRenderer' => $vendorDir . '/emleons/sim-rating/src/Renderer/HtmlRenderer.php', - 'Emleons\\SimRating\\Renderer\\JsonRenderer' => $vendorDir . '/emleons/sim-rating/src/Renderer/JsonRenderer.php', - 'Emleons\\SimRating\\Renderer\\SvgRenderer' => $vendorDir . '/emleons/sim-rating/src/Renderer/SvgRenderer.php', - 'FastRoute\\BadRouteException' => $vendorDir . '/nikic/fast-route/src/BadRouteException.php', - 'FastRoute\\DataGenerator' => $vendorDir . '/nikic/fast-route/src/DataGenerator.php', - 'FastRoute\\DataGenerator\\CharCountBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/CharCountBased.php', - 'FastRoute\\DataGenerator\\GroupCountBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/GroupCountBased.php', - 'FastRoute\\DataGenerator\\GroupPosBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/GroupPosBased.php', - 'FastRoute\\DataGenerator\\MarkBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/MarkBased.php', - 'FastRoute\\DataGenerator\\RegexBasedAbstract' => $vendorDir . '/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php', - 'FastRoute\\Dispatcher' => $vendorDir . '/nikic/fast-route/src/Dispatcher.php', - 'FastRoute\\Dispatcher\\CharCountBased' => $vendorDir . '/nikic/fast-route/src/Dispatcher/CharCountBased.php', - 'FastRoute\\Dispatcher\\GroupCountBased' => $vendorDir . '/nikic/fast-route/src/Dispatcher/GroupCountBased.php', - 'FastRoute\\Dispatcher\\GroupPosBased' => $vendorDir . '/nikic/fast-route/src/Dispatcher/GroupPosBased.php', - 'FastRoute\\Dispatcher\\MarkBased' => $vendorDir . '/nikic/fast-route/src/Dispatcher/MarkBased.php', - 'FastRoute\\Dispatcher\\RegexBasedAbstract' => $vendorDir . '/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php', - 'FastRoute\\Route' => $vendorDir . '/nikic/fast-route/src/Route.php', - 'FastRoute\\RouteCollector' => $vendorDir . '/nikic/fast-route/src/RouteCollector.php', - 'FastRoute\\RouteParser' => $vendorDir . '/nikic/fast-route/src/RouteParser.php', - 'FastRoute\\RouteParser\\Std' => $vendorDir . '/nikic/fast-route/src/RouteParser/Std.php', - 'Fig\\Http\\Message\\RequestMethodInterface' => $vendorDir . '/fig/http-message-util/src/RequestMethodInterface.php', - 'Fig\\Http\\Message\\StatusCodeInterface' => $vendorDir . '/fig/http-message-util/src/StatusCodeInterface.php', - 'GrahamCampbell\\ResultType\\Error' => $vendorDir . '/graham-campbell/result-type/src/Error.php', - 'GrahamCampbell\\ResultType\\Result' => $vendorDir . '/graham-campbell/result-type/src/Result.php', - 'GrahamCampbell\\ResultType\\Success' => $vendorDir . '/graham-campbell/result-type/src/Success.php', - 'Invoker\\CallableResolver' => $vendorDir . '/php-di/invoker/src/CallableResolver.php', - 'Invoker\\Exception\\InvocationException' => $vendorDir . '/php-di/invoker/src/Exception/InvocationException.php', - 'Invoker\\Exception\\NotCallableException' => $vendorDir . '/php-di/invoker/src/Exception/NotCallableException.php', - 'Invoker\\Exception\\NotEnoughParametersException' => $vendorDir . '/php-di/invoker/src/Exception/NotEnoughParametersException.php', - 'Invoker\\Invoker' => $vendorDir . '/php-di/invoker/src/Invoker.php', - 'Invoker\\InvokerInterface' => $vendorDir . '/php-di/invoker/src/InvokerInterface.php', - 'Invoker\\ParameterResolver\\AssociativeArrayResolver' => $vendorDir . '/php-di/invoker/src/ParameterResolver/AssociativeArrayResolver.php', - 'Invoker\\ParameterResolver\\Container\\ParameterNameContainerResolver' => $vendorDir . '/php-di/invoker/src/ParameterResolver/Container/ParameterNameContainerResolver.php', - 'Invoker\\ParameterResolver\\Container\\TypeHintContainerResolver' => $vendorDir . '/php-di/invoker/src/ParameterResolver/Container/TypeHintContainerResolver.php', - 'Invoker\\ParameterResolver\\DefaultValueResolver' => $vendorDir . '/php-di/invoker/src/ParameterResolver/DefaultValueResolver.php', - 'Invoker\\ParameterResolver\\NumericArrayResolver' => $vendorDir . '/php-di/invoker/src/ParameterResolver/NumericArrayResolver.php', - 'Invoker\\ParameterResolver\\ParameterResolver' => $vendorDir . '/php-di/invoker/src/ParameterResolver/ParameterResolver.php', - 'Invoker\\ParameterResolver\\ResolverChain' => $vendorDir . '/php-di/invoker/src/ParameterResolver/ResolverChain.php', - 'Invoker\\ParameterResolver\\TypeHintResolver' => $vendorDir . '/php-di/invoker/src/ParameterResolver/TypeHintResolver.php', - 'Invoker\\Reflection\\CallableReflection' => $vendorDir . '/php-di/invoker/src/Reflection/CallableReflection.php', - 'Laravel\\SerializableClosure\\Contracts\\Serializable' => $vendorDir . '/laravel/serializable-closure/src/Contracts/Serializable.php', - 'Laravel\\SerializableClosure\\Contracts\\Signer' => $vendorDir . '/laravel/serializable-closure/src/Contracts/Signer.php', - 'Laravel\\SerializableClosure\\Exceptions\\InvalidSignatureException' => $vendorDir . '/laravel/serializable-closure/src/Exceptions/InvalidSignatureException.php', - 'Laravel\\SerializableClosure\\Exceptions\\MissingSecretKeyException' => $vendorDir . '/laravel/serializable-closure/src/Exceptions/MissingSecretKeyException.php', - 'Laravel\\SerializableClosure\\Exceptions\\PhpVersionNotSupportedException' => $vendorDir . '/laravel/serializable-closure/src/Exceptions/PhpVersionNotSupportedException.php', - 'Laravel\\SerializableClosure\\SerializableClosure' => $vendorDir . '/laravel/serializable-closure/src/SerializableClosure.php', - 'Laravel\\SerializableClosure\\Serializers\\Native' => $vendorDir . '/laravel/serializable-closure/src/Serializers/Native.php', - 'Laravel\\SerializableClosure\\Serializers\\Signed' => $vendorDir . '/laravel/serializable-closure/src/Serializers/Signed.php', - 'Laravel\\SerializableClosure\\Signers\\Hmac' => $vendorDir . '/laravel/serializable-closure/src/Signers/Hmac.php', - 'Laravel\\SerializableClosure\\Support\\ClosureScope' => $vendorDir . '/laravel/serializable-closure/src/Support/ClosureScope.php', - 'Laravel\\SerializableClosure\\Support\\ClosureStream' => $vendorDir . '/laravel/serializable-closure/src/Support/ClosureStream.php', - 'Laravel\\SerializableClosure\\Support\\ReflectionClosure' => $vendorDir . '/laravel/serializable-closure/src/Support/ReflectionClosure.php', - 'Laravel\\SerializableClosure\\Support\\SelfReference' => $vendorDir . '/laravel/serializable-closure/src/Support/SelfReference.php', - 'Laravel\\SerializableClosure\\UnsignedSerializableClosure' => $vendorDir . '/laravel/serializable-closure/src/UnsignedSerializableClosure.php', - 'Monolog\\Attribute\\AsMonologProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php', - 'Monolog\\Attribute\\WithMonologChannel' => $vendorDir . '/monolog/monolog/src/Monolog/Attribute/WithMonologChannel.php', - 'Monolog\\DateTimeImmutable' => $vendorDir . '/monolog/monolog/src/Monolog/DateTimeImmutable.php', - 'Monolog\\ErrorHandler' => $vendorDir . '/monolog/monolog/src/Monolog/ErrorHandler.php', - 'Monolog\\Formatter\\ChromePHPFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php', - 'Monolog\\Formatter\\ElasticaFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php', - 'Monolog\\Formatter\\ElasticsearchFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php', - 'Monolog\\Formatter\\FlowdockFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php', - 'Monolog\\Formatter\\FluentdFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php', - 'Monolog\\Formatter\\FormatterInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php', - 'Monolog\\Formatter\\GelfMessageFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php', - 'Monolog\\Formatter\\GoogleCloudLoggingFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php', - 'Monolog\\Formatter\\HtmlFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php', - 'Monolog\\Formatter\\JsonFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php', - 'Monolog\\Formatter\\LineFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LineFormatter.php', - 'Monolog\\Formatter\\LogglyFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php', - 'Monolog\\Formatter\\LogmaticFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php', - 'Monolog\\Formatter\\LogstashFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php', - 'Monolog\\Formatter\\MongoDBFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php', - 'Monolog\\Formatter\\NormalizerFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php', - 'Monolog\\Formatter\\ScalarFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php', - 'Monolog\\Formatter\\SyslogFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/SyslogFormatter.php', - 'Monolog\\Formatter\\WildfireFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php', - 'Monolog\\Handler\\AbstractHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/AbstractHandler.php', - 'Monolog\\Handler\\AbstractProcessingHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php', - 'Monolog\\Handler\\AbstractSyslogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php', - 'Monolog\\Handler\\AmqpHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/AmqpHandler.php', - 'Monolog\\Handler\\BrowserConsoleHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php', - 'Monolog\\Handler\\BufferHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/BufferHandler.php', - 'Monolog\\Handler\\ChromePHPHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php', - 'Monolog\\Handler\\CouchDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php', - 'Monolog\\Handler\\CubeHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/CubeHandler.php', - 'Monolog\\Handler\\Curl\\Util' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/Curl/Util.php', - 'Monolog\\Handler\\DeduplicationHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php', - 'Monolog\\Handler\\DoctrineCouchDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php', - 'Monolog\\Handler\\DynamoDbHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php', - 'Monolog\\Handler\\ElasticaHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php', - 'Monolog\\Handler\\ElasticsearchHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php', - 'Monolog\\Handler\\ErrorLogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php', - 'Monolog\\Handler\\FallbackGroupHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php', - 'Monolog\\Handler\\FilterHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FilterHandler.php', - 'Monolog\\Handler\\FingersCrossedHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php', - 'Monolog\\Handler\\FingersCrossed\\ActivationStrategyInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php', - 'Monolog\\Handler\\FingersCrossed\\ChannelLevelActivationStrategy' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php', - 'Monolog\\Handler\\FingersCrossed\\ErrorLevelActivationStrategy' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php', - 'Monolog\\Handler\\FirePHPHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php', - 'Monolog\\Handler\\FleepHookHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php', - 'Monolog\\Handler\\FlowdockHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php', - 'Monolog\\Handler\\FormattableHandlerInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php', - 'Monolog\\Handler\\FormattableHandlerTrait' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php', - 'Monolog\\Handler\\GelfHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/GelfHandler.php', - 'Monolog\\Handler\\GroupHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/GroupHandler.php', - 'Monolog\\Handler\\Handler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/Handler.php', - 'Monolog\\Handler\\HandlerInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HandlerInterface.php', - 'Monolog\\Handler\\HandlerWrapper' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php', - 'Monolog\\Handler\\IFTTTHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php', - 'Monolog\\Handler\\InsightOpsHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php', - 'Monolog\\Handler\\LogEntriesHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php', - 'Monolog\\Handler\\LogglyHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/LogglyHandler.php', - 'Monolog\\Handler\\LogmaticHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php', - 'Monolog\\Handler\\MailHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MailHandler.php', - 'Monolog\\Handler\\MandrillHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MandrillHandler.php', - 'Monolog\\Handler\\MissingExtensionException' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php', - 'Monolog\\Handler\\MongoDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php', - 'Monolog\\Handler\\NativeMailerHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php', - 'Monolog\\Handler\\NewRelicHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php', - 'Monolog\\Handler\\NoopHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NoopHandler.php', - 'Monolog\\Handler\\NullHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NullHandler.php', - 'Monolog\\Handler\\OverflowHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/OverflowHandler.php', - 'Monolog\\Handler\\PHPConsoleHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php', - 'Monolog\\Handler\\ProcessHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ProcessHandler.php', - 'Monolog\\Handler\\ProcessableHandlerInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php', - 'Monolog\\Handler\\ProcessableHandlerTrait' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php', - 'Monolog\\Handler\\PsrHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PsrHandler.php', - 'Monolog\\Handler\\PushoverHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PushoverHandler.php', - 'Monolog\\Handler\\RedisHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RedisHandler.php', - 'Monolog\\Handler\\RedisPubSubHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php', - 'Monolog\\Handler\\RollbarHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RollbarHandler.php', - 'Monolog\\Handler\\RotatingFileHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php', - 'Monolog\\Handler\\SamplingHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SamplingHandler.php', - 'Monolog\\Handler\\SendGridHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SendGridHandler.php', - 'Monolog\\Handler\\SlackHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackHandler.php', - 'Monolog\\Handler\\SlackWebhookHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php', - 'Monolog\\Handler\\Slack\\SlackRecord' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php', - 'Monolog\\Handler\\SocketHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SocketHandler.php', - 'Monolog\\Handler\\SqsHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SqsHandler.php', - 'Monolog\\Handler\\StreamHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/StreamHandler.php', - 'Monolog\\Handler\\SymfonyMailerHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SymfonyMailerHandler.php', - 'Monolog\\Handler\\SyslogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogHandler.php', - 'Monolog\\Handler\\SyslogUdpHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php', - 'Monolog\\Handler\\SyslogUdp\\UdpSocket' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php', - 'Monolog\\Handler\\TelegramBotHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php', - 'Monolog\\Handler\\TestHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/TestHandler.php', - 'Monolog\\Handler\\WebRequestRecognizerTrait' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php', - 'Monolog\\Handler\\WhatFailureGroupHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php', - 'Monolog\\Handler\\ZendMonitorHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php', - 'Monolog\\JsonSerializableDateTimeImmutable' => $vendorDir . '/monolog/monolog/src/Monolog/JsonSerializableDateTimeImmutable.php', - 'Monolog\\Level' => $vendorDir . '/monolog/monolog/src/Monolog/Level.php', - 'Monolog\\LogRecord' => $vendorDir . '/monolog/monolog/src/Monolog/LogRecord.php', - 'Monolog\\Logger' => $vendorDir . '/monolog/monolog/src/Monolog/Logger.php', - 'Monolog\\Processor\\ClosureContextProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/ClosureContextProcessor.php', - 'Monolog\\Processor\\GitProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/GitProcessor.php', - 'Monolog\\Processor\\HostnameProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php', - 'Monolog\\Processor\\IntrospectionProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php', - 'Monolog\\Processor\\LoadAverageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/LoadAverageProcessor.php', - 'Monolog\\Processor\\MemoryPeakUsageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php', - 'Monolog\\Processor\\MemoryProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php', - 'Monolog\\Processor\\MemoryUsageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php', - 'Monolog\\Processor\\MercurialProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php', - 'Monolog\\Processor\\ProcessIdProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php', - 'Monolog\\Processor\\ProcessorInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php', - 'Monolog\\Processor\\PsrLogMessageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php', - 'Monolog\\Processor\\TagProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/TagProcessor.php', - 'Monolog\\Processor\\UidProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/UidProcessor.php', - 'Monolog\\Processor\\WebProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/WebProcessor.php', - 'Monolog\\Registry' => $vendorDir . '/monolog/monolog/src/Monolog/Registry.php', - 'Monolog\\ResettableInterface' => $vendorDir . '/monolog/monolog/src/Monolog/ResettableInterface.php', - 'Monolog\\SignalHandler' => $vendorDir . '/monolog/monolog/src/Monolog/SignalHandler.php', - 'Monolog\\Test\\MonologTestCase' => $vendorDir . '/monolog/monolog/src/Monolog/Test/MonologTestCase.php', - 'Monolog\\Test\\TestCase' => $vendorDir . '/monolog/monolog/src/Monolog/Test/TestCase.php', - 'Monolog\\Utils' => $vendorDir . '/monolog/monolog/src/Monolog/Utils.php', 'PDF417' => $vendorDir . '/tecnickcom/tcpdf/include/barcodes/pdf417.php', - 'PHPMailer\\PHPMailer\\DSNConfigurator' => $vendorDir . '/phpmailer/phpmailer/src/DSNConfigurator.php', - 'PHPMailer\\PHPMailer\\Exception' => $vendorDir . '/phpmailer/phpmailer/src/Exception.php', - 'PHPMailer\\PHPMailer\\OAuth' => $vendorDir . '/phpmailer/phpmailer/src/OAuth.php', - 'PHPMailer\\PHPMailer\\OAuthTokenProvider' => $vendorDir . '/phpmailer/phpmailer/src/OAuthTokenProvider.php', - 'PHPMailer\\PHPMailer\\PHPMailer' => $vendorDir . '/phpmailer/phpmailer/src/PHPMailer.php', - 'PHPMailer\\PHPMailer\\POP3' => $vendorDir . '/phpmailer/phpmailer/src/POP3.php', - 'PHPMailer\\PHPMailer\\SMTP' => $vendorDir . '/phpmailer/phpmailer/src/SMTP.php', - 'PhpOption\\LazyOption' => $vendorDir . '/phpoption/phpoption/src/PhpOption/LazyOption.php', - 'PhpOption\\None' => $vendorDir . '/phpoption/phpoption/src/PhpOption/None.php', - 'PhpOption\\Option' => $vendorDir . '/phpoption/phpoption/src/PhpOption/Option.php', - 'PhpOption\\Some' => $vendorDir . '/phpoption/phpoption/src/PhpOption/Some.php', 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', - 'Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php', - 'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php', - 'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php', - 'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php', - 'Psr\\Http\\Message\\RequestFactoryInterface' => $vendorDir . '/psr/http-factory/src/RequestFactoryInterface.php', - 'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php', - 'Psr\\Http\\Message\\ResponseFactoryInterface' => $vendorDir . '/psr/http-factory/src/ResponseFactoryInterface.php', - 'Psr\\Http\\Message\\ResponseInterface' => $vendorDir . '/psr/http-message/src/ResponseInterface.php', - 'Psr\\Http\\Message\\ServerRequestFactoryInterface' => $vendorDir . '/psr/http-factory/src/ServerRequestFactoryInterface.php', - 'Psr\\Http\\Message\\ServerRequestInterface' => $vendorDir . '/psr/http-message/src/ServerRequestInterface.php', - 'Psr\\Http\\Message\\StreamFactoryInterface' => $vendorDir . '/psr/http-factory/src/StreamFactoryInterface.php', - 'Psr\\Http\\Message\\StreamInterface' => $vendorDir . '/psr/http-message/src/StreamInterface.php', - 'Psr\\Http\\Message\\UploadedFileFactoryInterface' => $vendorDir . '/psr/http-factory/src/UploadedFileFactoryInterface.php', - 'Psr\\Http\\Message\\UploadedFileInterface' => $vendorDir . '/psr/http-message/src/UploadedFileInterface.php', - 'Psr\\Http\\Message\\UriFactoryInterface' => $vendorDir . '/psr/http-factory/src/UriFactoryInterface.php', - 'Psr\\Http\\Message\\UriInterface' => $vendorDir . '/psr/http-message/src/UriInterface.php', - 'Psr\\Http\\Server\\MiddlewareInterface' => $vendorDir . '/psr/http-server-middleware/src/MiddlewareInterface.php', - 'Psr\\Http\\Server\\RequestHandlerInterface' => $vendorDir . '/psr/http-server-handler/src/RequestHandlerInterface.php', - 'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/src/AbstractLogger.php', - 'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/src/InvalidArgumentException.php', - 'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/src/LogLevel.php', - 'Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/src/LoggerAwareInterface.php', - 'Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/src/LoggerAwareTrait.php', - 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/src/LoggerInterface.php', - 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/src/LoggerTrait.php', - 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/src/NullLogger.php', 'QRcode' => $vendorDir . '/tecnickcom/tcpdf/include/barcodes/qrcode.php', - 'ReCaptcha\\ReCaptcha' => $vendorDir . '/google/recaptcha/src/ReCaptcha/ReCaptcha.php', - 'ReCaptcha\\RequestMethod' => $vendorDir . '/google/recaptcha/src/ReCaptcha/RequestMethod.php', - 'ReCaptcha\\RequestMethod\\Curl' => $vendorDir . '/google/recaptcha/src/ReCaptcha/RequestMethod/Curl.php', - 'ReCaptcha\\RequestMethod\\CurlPost' => $vendorDir . '/google/recaptcha/src/ReCaptcha/RequestMethod/CurlPost.php', - 'ReCaptcha\\RequestMethod\\Post' => $vendorDir . '/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php', - 'ReCaptcha\\RequestMethod\\Socket' => $vendorDir . '/google/recaptcha/src/ReCaptcha/RequestMethod/Socket.php', - 'ReCaptcha\\RequestMethod\\SocketPost' => $vendorDir . '/google/recaptcha/src/ReCaptcha/RequestMethod/SocketPost.php', - 'ReCaptcha\\RequestParameters' => $vendorDir . '/google/recaptcha/src/ReCaptcha/RequestParameters.php', - 'ReCaptcha\\Response' => $vendorDir . '/google/recaptcha/src/ReCaptcha/Response.php', - 'Slim\\App' => $vendorDir . '/slim/slim/Slim/App.php', - 'Slim\\CallableResolver' => $vendorDir . '/slim/slim/Slim/CallableResolver.php', - 'Slim\\Csrf\\Guard' => $vendorDir . '/slim/csrf/src/Guard.php', - 'Slim\\Error\\AbstractErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/AbstractErrorRenderer.php', - 'Slim\\Error\\Renderers\\HtmlErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php', - 'Slim\\Error\\Renderers\\JsonErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php', - 'Slim\\Error\\Renderers\\PlainTextErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php', - 'Slim\\Error\\Renderers\\XmlErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php', - 'Slim\\Exception\\HttpBadRequestException' => $vendorDir . '/slim/slim/Slim/Exception/HttpBadRequestException.php', - 'Slim\\Exception\\HttpException' => $vendorDir . '/slim/slim/Slim/Exception/HttpException.php', - 'Slim\\Exception\\HttpForbiddenException' => $vendorDir . '/slim/slim/Slim/Exception/HttpForbiddenException.php', - 'Slim\\Exception\\HttpGoneException' => $vendorDir . '/slim/slim/Slim/Exception/HttpGoneException.php', - 'Slim\\Exception\\HttpInternalServerErrorException' => $vendorDir . '/slim/slim/Slim/Exception/HttpInternalServerErrorException.php', - 'Slim\\Exception\\HttpMethodNotAllowedException' => $vendorDir . '/slim/slim/Slim/Exception/HttpMethodNotAllowedException.php', - 'Slim\\Exception\\HttpNotFoundException' => $vendorDir . '/slim/slim/Slim/Exception/HttpNotFoundException.php', - 'Slim\\Exception\\HttpNotImplementedException' => $vendorDir . '/slim/slim/Slim/Exception/HttpNotImplementedException.php', - 'Slim\\Exception\\HttpSpecializedException' => $vendorDir . '/slim/slim/Slim/Exception/HttpSpecializedException.php', - 'Slim\\Exception\\HttpTooManyRequestsException' => $vendorDir . '/slim/slim/Slim/Exception/HttpTooManyRequestsException.php', - 'Slim\\Exception\\HttpUnauthorizedException' => $vendorDir . '/slim/slim/Slim/Exception/HttpUnauthorizedException.php', - 'Slim\\Factory\\AppFactory' => $vendorDir . '/slim/slim/Slim/Factory/AppFactory.php', - 'Slim\\Factory\\Psr17\\GuzzlePsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php', - 'Slim\\Factory\\Psr17\\HttpSoftPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/HttpSoftPsr17Factory.php', - 'Slim\\Factory\\Psr17\\LaminasDiactorosPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php', - 'Slim\\Factory\\Psr17\\NyholmPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/NyholmPsr17Factory.php', - 'Slim\\Factory\\Psr17\\Psr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/Psr17Factory.php', - 'Slim\\Factory\\Psr17\\Psr17FactoryProvider' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/Psr17FactoryProvider.php', - 'Slim\\Factory\\Psr17\\ServerRequestCreator' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/ServerRequestCreator.php', - 'Slim\\Factory\\Psr17\\SlimHttpPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php', - 'Slim\\Factory\\Psr17\\SlimHttpServerRequestCreator' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php', - 'Slim\\Factory\\Psr17\\SlimPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php', - 'Slim\\Factory\\ServerRequestCreatorFactory' => $vendorDir . '/slim/slim/Slim/Factory/ServerRequestCreatorFactory.php', - 'Slim\\Handlers\\ErrorHandler' => $vendorDir . '/slim/slim/Slim/Handlers/ErrorHandler.php', - 'Slim\\Handlers\\Strategies\\RequestHandler' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestHandler.php', - 'Slim\\Handlers\\Strategies\\RequestResponse' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestResponse.php', - 'Slim\\Handlers\\Strategies\\RequestResponseArgs' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php', - 'Slim\\Handlers\\Strategies\\RequestResponseNamedArgs' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestResponseNamedArgs.php', - 'Slim\\Interfaces\\AdvancedCallableResolverInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/AdvancedCallableResolverInterface.php', - 'Slim\\Interfaces\\CallableResolverInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/CallableResolverInterface.php', - 'Slim\\Interfaces\\DispatcherInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/DispatcherInterface.php', - 'Slim\\Interfaces\\ErrorHandlerInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/ErrorHandlerInterface.php', - 'Slim\\Interfaces\\ErrorRendererInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/ErrorRendererInterface.php', - 'Slim\\Interfaces\\InvocationStrategyInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php', - 'Slim\\Interfaces\\MiddlewareDispatcherInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/MiddlewareDispatcherInterface.php', - 'Slim\\Interfaces\\Psr17FactoryInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/Psr17FactoryInterface.php', - 'Slim\\Interfaces\\Psr17FactoryProviderInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/Psr17FactoryProviderInterface.php', - 'Slim\\Interfaces\\RequestHandlerInvocationStrategyInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RequestHandlerInvocationStrategyInterface.php', - 'Slim\\Interfaces\\RouteCollectorInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteCollectorInterface.php', - 'Slim\\Interfaces\\RouteCollectorProxyInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteCollectorProxyInterface.php', - 'Slim\\Interfaces\\RouteGroupInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteGroupInterface.php', - 'Slim\\Interfaces\\RouteInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteInterface.php', - 'Slim\\Interfaces\\RouteParserInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteParserInterface.php', - 'Slim\\Interfaces\\RouteResolverInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteResolverInterface.php', - 'Slim\\Interfaces\\ServerRequestCreatorInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php', - 'Slim\\Logger' => $vendorDir . '/slim/slim/Slim/Logger.php', - 'Slim\\MiddlewareDispatcher' => $vendorDir . '/slim/slim/Slim/MiddlewareDispatcher.php', - 'Slim\\Middleware\\BodyParsingMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/BodyParsingMiddleware.php', - 'Slim\\Middleware\\ContentLengthMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/ContentLengthMiddleware.php', - 'Slim\\Middleware\\ErrorMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/ErrorMiddleware.php', - 'Slim\\Middleware\\MethodOverrideMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php', - 'Slim\\Middleware\\OutputBufferingMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php', - 'Slim\\Middleware\\RoutingMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/RoutingMiddleware.php', - 'Slim\\Psr7\\Cookies' => $vendorDir . '/slim/psr7/src/Cookies.php', - 'Slim\\Psr7\\Environment' => $vendorDir . '/slim/psr7/src/Environment.php', - 'Slim\\Psr7\\Factory\\RequestFactory' => $vendorDir . '/slim/psr7/src/Factory/RequestFactory.php', - 'Slim\\Psr7\\Factory\\ResponseFactory' => $vendorDir . '/slim/psr7/src/Factory/ResponseFactory.php', - 'Slim\\Psr7\\Factory\\ServerRequestFactory' => $vendorDir . '/slim/psr7/src/Factory/ServerRequestFactory.php', - 'Slim\\Psr7\\Factory\\StreamFactory' => $vendorDir . '/slim/psr7/src/Factory/StreamFactory.php', - 'Slim\\Psr7\\Factory\\UploadedFileFactory' => $vendorDir . '/slim/psr7/src/Factory/UploadedFileFactory.php', - 'Slim\\Psr7\\Factory\\UriFactory' => $vendorDir . '/slim/psr7/src/Factory/UriFactory.php', - 'Slim\\Psr7\\Header' => $vendorDir . '/slim/psr7/src/Header.php', - 'Slim\\Psr7\\Headers' => $vendorDir . '/slim/psr7/src/Headers.php', - 'Slim\\Psr7\\Interfaces\\HeadersInterface' => $vendorDir . '/slim/psr7/src/Interfaces/HeadersInterface.php', - 'Slim\\Psr7\\Message' => $vendorDir . '/slim/psr7/src/Message.php', - 'Slim\\Psr7\\NonBufferedBody' => $vendorDir . '/slim/psr7/src/NonBufferedBody.php', - 'Slim\\Psr7\\Request' => $vendorDir . '/slim/psr7/src/Request.php', - 'Slim\\Psr7\\Response' => $vendorDir . '/slim/psr7/src/Response.php', - 'Slim\\Psr7\\Stream' => $vendorDir . '/slim/psr7/src/Stream.php', - 'Slim\\Psr7\\UploadedFile' => $vendorDir . '/slim/psr7/src/UploadedFile.php', - 'Slim\\Psr7\\Uri' => $vendorDir . '/slim/psr7/src/Uri.php', - 'Slim\\ResponseEmitter' => $vendorDir . '/slim/slim/Slim/ResponseEmitter.php', - 'Slim\\Routing\\Dispatcher' => $vendorDir . '/slim/slim/Slim/Routing/Dispatcher.php', - 'Slim\\Routing\\FastRouteDispatcher' => $vendorDir . '/slim/slim/Slim/Routing/FastRouteDispatcher.php', - 'Slim\\Routing\\Route' => $vendorDir . '/slim/slim/Slim/Routing/Route.php', - 'Slim\\Routing\\RouteCollector' => $vendorDir . '/slim/slim/Slim/Routing/RouteCollector.php', - 'Slim\\Routing\\RouteCollectorProxy' => $vendorDir . '/slim/slim/Slim/Routing/RouteCollectorProxy.php', - 'Slim\\Routing\\RouteContext' => $vendorDir . '/slim/slim/Slim/Routing/RouteContext.php', - 'Slim\\Routing\\RouteGroup' => $vendorDir . '/slim/slim/Slim/Routing/RouteGroup.php', - 'Slim\\Routing\\RouteParser' => $vendorDir . '/slim/slim/Slim/Routing/RouteParser.php', - 'Slim\\Routing\\RouteResolver' => $vendorDir . '/slim/slim/Slim/Routing/RouteResolver.php', - 'Slim\\Routing\\RouteRunner' => $vendorDir . '/slim/slim/Slim/Routing/RouteRunner.php', - 'Slim\\Routing\\RoutingResults' => $vendorDir . '/slim/slim/Slim/Routing/RoutingResults.php', 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', - 'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php', - 'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php', - 'Symfony\\Polyfill\\Php80\\Php80' => $vendorDir . '/symfony/polyfill-php80/Php80.php', - 'Symfony\\Polyfill\\Php80\\PhpToken' => $vendorDir . '/symfony/polyfill-php80/PhpToken.php', 'TCPDF' => $vendorDir . '/tecnickcom/tcpdf/tcpdf.php', 'TCPDF2DBarcode' => $vendorDir . '/tecnickcom/tcpdf/tcpdf_barcodes_2d.php', 'TCPDFBarcode' => $vendorDir . '/tecnickcom/tcpdf/tcpdf_barcodes_1d.php', @@ -566,21 +22,6 @@ 'TCPDF_FONT_DATA' => $vendorDir . '/tecnickcom/tcpdf/include/tcpdf_font_data.php', 'TCPDF_IMAGES' => $vendorDir . '/tecnickcom/tcpdf/include/tcpdf_images.php', 'TCPDF_STATIC' => $vendorDir . '/tecnickcom/tcpdf/include/tcpdf_static.php', - 'Thepixeldeveloper\\Sitemap\\ChunkedCollection' => $vendorDir . '/thepixeldeveloper/sitemap/src/ChunkedCollection.php', - 'Thepixeldeveloper\\Sitemap\\ChunkedUrlset' => $vendorDir . '/thepixeldeveloper/sitemap/src/ChunkedUrlset.php', - 'Thepixeldeveloper\\Sitemap\\Collection' => $vendorDir . '/thepixeldeveloper/sitemap/src/Collection.php', - 'Thepixeldeveloper\\Sitemap\\Drivers\\XmlWriterDriver' => $vendorDir . '/thepixeldeveloper/sitemap/src/Drivers/XmlWriterDriver.php', - 'Thepixeldeveloper\\Sitemap\\Extensions\\Image' => $vendorDir . '/thepixeldeveloper/sitemap/src/Extensions/Image.php', - 'Thepixeldeveloper\\Sitemap\\Extensions\\Link' => $vendorDir . '/thepixeldeveloper/sitemap/src/Extensions/Link.php', - 'Thepixeldeveloper\\Sitemap\\Extensions\\Mobile' => $vendorDir . '/thepixeldeveloper/sitemap/src/Extensions/Mobile.php', - 'Thepixeldeveloper\\Sitemap\\Extensions\\News' => $vendorDir . '/thepixeldeveloper/sitemap/src/Extensions/News.php', - 'Thepixeldeveloper\\Sitemap\\Extensions\\Video' => $vendorDir . '/thepixeldeveloper/sitemap/src/Extensions/Video.php', - 'Thepixeldeveloper\\Sitemap\\Interfaces\\DriverInterface' => $vendorDir . '/thepixeldeveloper/sitemap/src/Interfaces/DriverInterface.php', - 'Thepixeldeveloper\\Sitemap\\Interfaces\\VisitorInterface' => $vendorDir . '/thepixeldeveloper/sitemap/src/Interfaces/VisitorInterface.php', - 'Thepixeldeveloper\\Sitemap\\Sitemap' => $vendorDir . '/thepixeldeveloper/sitemap/src/Sitemap.php', - 'Thepixeldeveloper\\Sitemap\\SitemapIndex' => $vendorDir . '/thepixeldeveloper/sitemap/src/SitemapIndex.php', - 'Thepixeldeveloper\\Sitemap\\Url' => $vendorDir . '/thepixeldeveloper/sitemap/src/Url.php', - 'Thepixeldeveloper\\Sitemap\\Urlset' => $vendorDir . '/thepixeldeveloper/sitemap/src/Urlset.php', 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', ); diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index cf6abf84..ef4949c7 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -181,557 +181,13 @@ class ComposerStaticInite58358eec498b7b6927cfe671382554c ); public static $classMap = array ( - 'App\\Controllers\\Admin\\CmsAdminController' => __DIR__ . '/../..' . '/app/Controllers/Admin/CmsAdminController.php', - 'App\\Controllers\\Admin\\LanguagesController' => __DIR__ . '/../..' . '/app/Controllers/Admin/LanguagesController.php', - 'App\\Controllers\\Admin\\MessagesController' => __DIR__ . '/../..' . '/app/Controllers/Admin/MessagesController.php', - 'App\\Controllers\\Admin\\NotificationsController' => __DIR__ . '/../..' . '/app/Controllers/Admin/NotificationsController.php', - 'App\\Controllers\\Admin\\RecensioniAdminController' => __DIR__ . '/../..' . '/app/Controllers/Admin/RecensioniAdminController.php', - 'App\\Controllers\\Admin\\StatsController' => __DIR__ . '/../..' . '/app/Controllers/Admin/StatsController.php', - 'App\\Controllers\\AuthController' => __DIR__ . '/../..' . '/app/Controllers/AuthController.php', - 'App\\Controllers\\AutoriApiController' => __DIR__ . '/../..' . '/app/Controllers/AutoriApiController.php', - 'App\\Controllers\\AutoriController' => __DIR__ . '/../..' . '/app/Controllers/AutoriController.php', - 'App\\Controllers\\CmsController' => __DIR__ . '/../..' . '/app/Controllers/CmsController.php', - 'App\\Controllers\\CollaneController' => __DIR__ . '/../..' . '/app/Controllers/CollaneController.php', - 'App\\Controllers\\CollocazioneController' => __DIR__ . '/../..' . '/app/Controllers/CollocazioneController.php', - 'App\\Controllers\\ContactController' => __DIR__ . '/../..' . '/app/Controllers/ContactController.php', - 'App\\Controllers\\CookiesController' => __DIR__ . '/../..' . '/app/Controllers/CookiesController.php', - 'App\\Controllers\\CopyController' => __DIR__ . '/../..' . '/app/Controllers/CopyController.php', - 'App\\Controllers\\CoverController' => __DIR__ . '/../..' . '/app/Controllers/CoverController.php', - 'App\\Controllers\\CsvImportController' => __DIR__ . '/../..' . '/app/Controllers/CsvImportController.php', - 'App\\Controllers\\DashboardController' => __DIR__ . '/../..' . '/app/Controllers/DashboardController.php', - 'App\\Controllers\\DeweyApiController' => __DIR__ . '/../..' . '/app/Controllers/DeweyApiController.php', - 'App\\Controllers\\EditoriApiController' => __DIR__ . '/../..' . '/app/Controllers/EditoriApiController.php', - 'App\\Controllers\\EditorsController' => __DIR__ . '/../..' . '/app/Controllers/EditorsController.php', - 'App\\Controllers\\EventsController' => __DIR__ . '/../..' . '/app/Controllers/EventsController.php', - 'App\\Controllers\\FeedController' => __DIR__ . '/../..' . '/app/Controllers/FeedController.php', - 'App\\Controllers\\FrontendController' => __DIR__ . '/../..' . '/app/Controllers/FrontendController.php', - 'App\\Controllers\\GeneriApiController' => __DIR__ . '/../..' . '/app/Controllers/GeneriApiController.php', - 'App\\Controllers\\GeneriController' => __DIR__ . '/../..' . '/app/Controllers/GeneriController.php', - 'App\\Controllers\\ImportHistoryController' => __DIR__ . '/../..' . '/app/Controllers/ImportHistoryController.php', - 'App\\Controllers\\LanguageController' => __DIR__ . '/../..' . '/app/Controllers/LanguageController.php', - 'App\\Controllers\\LibraryThingImportController' => __DIR__ . '/../..' . '/app/Controllers/LibraryThingImportController.php', - 'App\\Controllers\\LibriApiController' => __DIR__ . '/../..' . '/app/Controllers/LibriApiController.php', - 'App\\Controllers\\LibriController' => __DIR__ . '/../..' . '/app/Controllers/LibriController.php', - 'App\\Controllers\\LoanApprovalController' => __DIR__ . '/../..' . '/app/Controllers/LoanApprovalController.php', - 'App\\Controllers\\MaintenanceController' => __DIR__ . '/../..' . '/app/Controllers/MaintenanceController.php', - 'App\\Controllers\\PasswordController' => __DIR__ . '/../..' . '/app/Controllers/PasswordController.php', - 'App\\Controllers\\PluginController' => __DIR__ . '/../..' . '/app/Controllers/PluginController.php', - 'App\\Controllers\\PrestitiApiController' => __DIR__ . '/../..' . '/app/Controllers/PrestitiApiController.php', - 'App\\Controllers\\PrestitiController' => __DIR__ . '/../..' . '/app/Controllers/PrestitiController.php', - 'App\\Controllers\\PrivacyController' => __DIR__ . '/../..' . '/app/Controllers/PrivacyController.php', - 'App\\Controllers\\ProfileController' => __DIR__ . '/../..' . '/app/Controllers/ProfileController.php', - 'App\\Controllers\\PublicApiController' => __DIR__ . '/../..' . '/app/Controllers/PublicApiController.php', - 'App\\Controllers\\RecensioniController' => __DIR__ . '/../..' . '/app/Controllers/RecensioniController.php', - 'App\\Controllers\\RegistrationController' => __DIR__ . '/../..' . '/app/Controllers/RegistrationController.php', - 'App\\Controllers\\ReservationManager' => __DIR__ . '/../..' . '/app/Controllers/ReservationManager.php', - 'App\\Controllers\\ReservationsAdminController' => __DIR__ . '/../..' . '/app/Controllers/ReservationsAdminController.php', - 'App\\Controllers\\ReservationsController' => __DIR__ . '/../..' . '/app/Controllers/ReservationsController.php', - 'App\\Controllers\\ScrapeController' => __DIR__ . '/../..' . '/app/Controllers/ScrapeController.php', - 'App\\Controllers\\SearchController' => __DIR__ . '/../..' . '/app/Controllers/SearchController.php', - 'App\\Controllers\\SecurityLogsController' => __DIR__ . '/../..' . '/app/Controllers/SecurityLogsController.php', - 'App\\Controllers\\SeoController' => __DIR__ . '/../..' . '/app/Controllers/SeoController.php', - 'App\\Controllers\\SettingsController' => __DIR__ . '/../..' . '/app/Controllers/SettingsController.php', - 'App\\Controllers\\ThemeController' => __DIR__ . '/../..' . '/app/Controllers/ThemeController.php', - 'App\\Controllers\\UpdateController' => __DIR__ . '/../..' . '/app/Controllers/UpdateController.php', - 'App\\Controllers\\UserActionsController' => __DIR__ . '/../..' . '/app/Controllers/UserActionsController.php', - 'App\\Controllers\\UserDashboardController' => __DIR__ . '/../..' . '/app/Controllers/UserDashboardController.php', - 'App\\Controllers\\UserWishlistController' => __DIR__ . '/../..' . '/app/Controllers/UserWishlistController.php', - 'App\\Controllers\\UsersController' => __DIR__ . '/../..' . '/app/Controllers/UsersController.php', - 'App\\Controllers\\UtentiApiController' => __DIR__ . '/../..' . '/app/Controllers/UtentiApiController.php', - 'App\\Middleware\\AdminAuthMiddleware' => __DIR__ . '/../..' . '/app/Middleware/AdminAuthMiddleware.php', - 'App\\Middleware\\ApiKeyMiddleware' => __DIR__ . '/../..' . '/app/Middleware/ApiKeyMiddleware.php', - 'App\\Middleware\\AuthMiddleware' => __DIR__ . '/../..' . '/app/Middleware/AuthMiddleware.php', - 'App\\Middleware\\BasePathMiddleware' => __DIR__ . '/../..' . '/app/Middleware/BasePathMiddleware.php', - 'App\\Middleware\\CsrfMiddleware' => __DIR__ . '/../..' . '/app/Middleware/CsrfMiddleware.php', - 'App\\Middleware\\RateLimitMiddleware' => __DIR__ . '/../..' . '/app/Middleware/RateLimitMiddleware.php', - 'App\\Middleware\\RememberMeMiddleware' => __DIR__ . '/../..' . '/app/Middleware/RememberMeMiddleware.php', - 'App\\Models\\ApiKeyRepository' => __DIR__ . '/../..' . '/app/Models/ApiKeyRepository.php', - 'App\\Models\\AuthorRepository' => __DIR__ . '/../..' . '/app/Models/AuthorRepository.php', - 'App\\Models\\BookRepository' => __DIR__ . '/../..' . '/app/Models/BookRepository.php', - 'App\\Models\\CollocationRepository' => __DIR__ . '/../..' . '/app/Models/CollocationRepository.php', - 'App\\Models\\CopyRepository' => __DIR__ . '/../..' . '/app/Models/CopyRepository.php', - 'App\\Models\\DashboardStats' => __DIR__ . '/../..' . '/app/Models/DashboardStats.php', - 'App\\Models\\GenereRepository' => __DIR__ . '/../..' . '/app/Models/GenereRepository.php', - 'App\\Models\\Language' => __DIR__ . '/../..' . '/app/Models/Language.php', - 'App\\Models\\LoanRepository' => __DIR__ . '/../..' . '/app/Models/LoanRepository.php', - 'App\\Models\\PublisherRepository' => __DIR__ . '/../..' . '/app/Models/PublisherRepository.php', - 'App\\Models\\SettingsRepository' => __DIR__ . '/../..' . '/app/Models/SettingsRepository.php', - 'App\\Models\\TaxonomyRepository' => __DIR__ . '/../..' . '/app/Models/TaxonomyRepository.php', - 'App\\Models\\UserRepository' => __DIR__ . '/../..' . '/app/Models/UserRepository.php', - 'App\\Repositories\\RecensioniRepository' => __DIR__ . '/../..' . '/app/Repositories/RecensioniRepository.php', - 'App\\Services\\ReservationReassignmentService' => __DIR__ . '/../..' . '/app/Services/ReservationReassignmentService.php', - 'App\\Support\\AuthorNormalizer' => __DIR__ . '/../..' . '/app/Support/AuthorNormalizer.php', - 'App\\Support\\AuthorizationHelper' => __DIR__ . '/../..' . '/app/Support/AuthorizationHelper.php', - 'App\\Support\\BookDataMerger' => __DIR__ . '/../..' . '/app/Support/BookDataMerger.php', - 'App\\Support\\Branding' => __DIR__ . '/../..' . '/app/Support/Branding.php', - 'App\\Support\\BundledPlugins' => __DIR__ . '/../..' . '/app/Support/BundledPlugins.php', - 'App\\Support\\CmsHelper' => __DIR__ . '/../..' . '/app/Support/CmsHelper.php', - 'App\\Support\\ConfigStore' => __DIR__ . '/../..' . '/app/Support/ConfigStore.php', - 'App\\Support\\ContentSanitizer' => __DIR__ . '/../..' . '/app/Support/ContentSanitizer.php', - 'App\\Support\\Csrf' => __DIR__ . '/../..' . '/app/Support/Csrf.php', - 'App\\Support\\CsrfHelper' => __DIR__ . '/../..' . '/app/Support/CsrfHelper.php', - 'App\\Support\\DataIntegrity' => __DIR__ . '/../..' . '/app/Support/DataIntegrity.php', - 'App\\Support\\DateHelper' => __DIR__ . '/../..' . '/app/Support/DateHelper.php', - 'App\\Support\\DeweyAutoPopulator' => __DIR__ . '/../..' . '/app/Support/DeweyAutoPopulator.php', - 'App\\Support\\EmailService' => __DIR__ . '/../..' . '/app/Support/EmailService.php', - 'App\\Support\\GenreHelper' => __DIR__ . '/../..' . '/app/Support/GenreHelper.php', - 'App\\Support\\HookManager' => __DIR__ . '/../..' . '/app/Support/HookManager.php', - 'App\\Support\\Hooks' => __DIR__ . '/../..' . '/app/Support/Hooks.php', - 'App\\Support\\HreflangHelper' => __DIR__ . '/../..' . '/app/Support/HreflangHelper.php', - 'App\\Support\\HtmlHelper' => __DIR__ . '/../..' . '/app/Support/HtmlHelper.php', - 'App\\Support\\I18n' => __DIR__ . '/../..' . '/app/Support/I18n.php', - 'App\\Support\\IcsGenerator' => __DIR__ . '/../..' . '/app/Support/IcsGenerator.php', - 'App\\Support\\ImportLogger' => __DIR__ . '/../..' . '/app/Support/ImportLogger.php', - 'App\\Support\\InputValidator' => __DIR__ . '/../..' . '/app/Support/InputValidator.php', - 'App\\Support\\IsbnFormatter' => __DIR__ . '/../..' . '/app/Support/IsbnFormatter.php', - 'App\\Support\\LibraryThingInstaller' => __DIR__ . '/../..' . '/app/Support/LibraryThingInstaller.php', - 'App\\Support\\LoanPdfGenerator' => __DIR__ . '/../..' . '/app/Support/LoanPdfGenerator.php', - 'App\\Support\\Log' => __DIR__ . '/../..' . '/app/Support/Log.php', - 'App\\Support\\Mailer' => __DIR__ . '/../..' . '/app/Support/Mailer.php', - 'App\\Support\\MaintenanceService' => __DIR__ . '/../..' . '/app/Support/MaintenanceService.php', - 'App\\Support\\MediaLabels' => __DIR__ . '/../..' . '/app/Support/MediaLabels.php', - 'App\\Support\\MergeHelper' => __DIR__ . '/../..' . '/app/Support/MergeHelper.php', - 'App\\Support\\NotificationService' => __DIR__ . '/../..' . '/app/Support/NotificationService.php', - 'App\\Support\\PluginManager' => __DIR__ . '/../..' . '/app/Support/PluginManager.php', - 'App\\Support\\QueryCache' => __DIR__ . '/../..' . '/app/Support/QueryCache.php', - 'App\\Support\\RateLimiter' => __DIR__ . '/../..' . '/app/Support/RateLimiter.php', - 'App\\Support\\RememberMeService' => __DIR__ . '/../..' . '/app/Support/RememberMeService.php', - 'App\\Support\\RouteTranslator' => __DIR__ . '/../..' . '/app/Support/RouteTranslator.php', - 'App\\Support\\ScrapingService' => __DIR__ . '/../..' . '/app/Support/ScrapingService.php', - 'App\\Support\\SecureLogger' => __DIR__ . '/../..' . '/app/Support/SecureLogger.php', - 'App\\Support\\SettingsEncryption' => __DIR__ . '/../..' . '/app/Support/SettingsEncryption.php', - 'App\\Support\\SettingsMailTemplates' => __DIR__ . '/../..' . '/app/Support/SettingsMailTemplates.php', - 'App\\Support\\SharingProviders' => __DIR__ . '/../..' . '/app/Support/SharingProviders.php', - 'App\\Support\\SitemapGenerator' => __DIR__ . '/../..' . '/app/Support/SitemapGenerator.php', - 'App\\Support\\ThemeColorizer' => __DIR__ . '/../..' . '/app/Support/ThemeColorizer.php', - 'App\\Support\\ThemeManager' => __DIR__ . '/../..' . '/app/Support/ThemeManager.php', - 'App\\Support\\Updater' => __DIR__ . '/../..' . '/app/Support/Updater.php', 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', - 'DI\\Attribute\\Inject' => __DIR__ . '/..' . '/php-di/php-di/src/Attribute/Inject.php', - 'DI\\Attribute\\Injectable' => __DIR__ . '/..' . '/php-di/php-di/src/Attribute/Injectable.php', - 'DI\\CompiledContainer' => __DIR__ . '/..' . '/php-di/php-di/src/CompiledContainer.php', - 'DI\\Compiler\\Compiler' => __DIR__ . '/..' . '/php-di/php-di/src/Compiler/Compiler.php', - 'DI\\Compiler\\ObjectCreationCompiler' => __DIR__ . '/..' . '/php-di/php-di/src/Compiler/ObjectCreationCompiler.php', - 'DI\\Compiler\\RequestedEntryHolder' => __DIR__ . '/..' . '/php-di/php-di/src/Compiler/RequestedEntryHolder.php', - 'DI\\Container' => __DIR__ . '/..' . '/php-di/php-di/src/Container.php', - 'DI\\ContainerBuilder' => __DIR__ . '/..' . '/php-di/php-di/src/ContainerBuilder.php', - 'DI\\Definition\\ArrayDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/ArrayDefinition.php', - 'DI\\Definition\\ArrayDefinitionExtension' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/ArrayDefinitionExtension.php', - 'DI\\Definition\\AutowireDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/AutowireDefinition.php', - 'DI\\Definition\\DecoratorDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/DecoratorDefinition.php', - 'DI\\Definition\\Definition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Definition.php', - 'DI\\Definition\\Dumper\\ObjectDefinitionDumper' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Dumper/ObjectDefinitionDumper.php', - 'DI\\Definition\\EnvironmentVariableDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/EnvironmentVariableDefinition.php', - 'DI\\Definition\\Exception\\InvalidAttribute' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Exception/InvalidAttribute.php', - 'DI\\Definition\\Exception\\InvalidDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Exception/InvalidDefinition.php', - 'DI\\Definition\\ExtendsPreviousDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/ExtendsPreviousDefinition.php', - 'DI\\Definition\\FactoryDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/FactoryDefinition.php', - 'DI\\Definition\\Helper\\AutowireDefinitionHelper' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Helper/AutowireDefinitionHelper.php', - 'DI\\Definition\\Helper\\CreateDefinitionHelper' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Helper/CreateDefinitionHelper.php', - 'DI\\Definition\\Helper\\DefinitionHelper' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Helper/DefinitionHelper.php', - 'DI\\Definition\\Helper\\FactoryDefinitionHelper' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Helper/FactoryDefinitionHelper.php', - 'DI\\Definition\\InstanceDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/InstanceDefinition.php', - 'DI\\Definition\\ObjectDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/ObjectDefinition.php', - 'DI\\Definition\\ObjectDefinition\\MethodInjection' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/ObjectDefinition/MethodInjection.php', - 'DI\\Definition\\ObjectDefinition\\PropertyInjection' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/ObjectDefinition/PropertyInjection.php', - 'DI\\Definition\\Reference' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Reference.php', - 'DI\\Definition\\Resolver\\ArrayResolver' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/ArrayResolver.php', - 'DI\\Definition\\Resolver\\DecoratorResolver' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/DecoratorResolver.php', - 'DI\\Definition\\Resolver\\DefinitionResolver' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/DefinitionResolver.php', - 'DI\\Definition\\Resolver\\EnvironmentVariableResolver' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/EnvironmentVariableResolver.php', - 'DI\\Definition\\Resolver\\FactoryResolver' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/FactoryResolver.php', - 'DI\\Definition\\Resolver\\InstanceInjector' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/InstanceInjector.php', - 'DI\\Definition\\Resolver\\ObjectCreator' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/ObjectCreator.php', - 'DI\\Definition\\Resolver\\ParameterResolver' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/ParameterResolver.php', - 'DI\\Definition\\Resolver\\ResolverDispatcher' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Resolver/ResolverDispatcher.php', - 'DI\\Definition\\SelfResolvingDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/SelfResolvingDefinition.php', - 'DI\\Definition\\Source\\AttributeBasedAutowiring' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/AttributeBasedAutowiring.php', - 'DI\\Definition\\Source\\Autowiring' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/Autowiring.php', - 'DI\\Definition\\Source\\DefinitionArray' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/DefinitionArray.php', - 'DI\\Definition\\Source\\DefinitionFile' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/DefinitionFile.php', - 'DI\\Definition\\Source\\DefinitionNormalizer' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/DefinitionNormalizer.php', - 'DI\\Definition\\Source\\DefinitionSource' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/DefinitionSource.php', - 'DI\\Definition\\Source\\MutableDefinitionSource' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/MutableDefinitionSource.php', - 'DI\\Definition\\Source\\NoAutowiring' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/NoAutowiring.php', - 'DI\\Definition\\Source\\ReflectionBasedAutowiring' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/ReflectionBasedAutowiring.php', - 'DI\\Definition\\Source\\SourceCache' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/SourceCache.php', - 'DI\\Definition\\Source\\SourceChain' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/Source/SourceChain.php', - 'DI\\Definition\\StringDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/StringDefinition.php', - 'DI\\Definition\\ValueDefinition' => __DIR__ . '/..' . '/php-di/php-di/src/Definition/ValueDefinition.php', - 'DI\\DependencyException' => __DIR__ . '/..' . '/php-di/php-di/src/DependencyException.php', - 'DI\\FactoryInterface' => __DIR__ . '/..' . '/php-di/php-di/src/FactoryInterface.php', - 'DI\\Factory\\RequestedEntry' => __DIR__ . '/..' . '/php-di/php-di/src/Factory/RequestedEntry.php', - 'DI\\Invoker\\DefinitionParameterResolver' => __DIR__ . '/..' . '/php-di/php-di/src/Invoker/DefinitionParameterResolver.php', - 'DI\\Invoker\\FactoryParameterResolver' => __DIR__ . '/..' . '/php-di/php-di/src/Invoker/FactoryParameterResolver.php', - 'DI\\NotFoundException' => __DIR__ . '/..' . '/php-di/php-di/src/NotFoundException.php', - 'DI\\Proxy\\NativeProxyFactory' => __DIR__ . '/..' . '/php-di/php-di/src/Proxy/NativeProxyFactory.php', - 'DI\\Proxy\\ProxyFactory' => __DIR__ . '/..' . '/php-di/php-di/src/Proxy/ProxyFactory.php', - 'DI\\Proxy\\ProxyFactoryInterface' => __DIR__ . '/..' . '/php-di/php-di/src/Proxy/ProxyFactoryInterface.php', 'Datamatrix' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/barcodes/datamatrix.php', - 'Dotenv\\Dotenv' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Dotenv.php', - 'Dotenv\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/ExceptionInterface.php', - 'Dotenv\\Exception\\InvalidEncodingException' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/InvalidEncodingException.php', - 'Dotenv\\Exception\\InvalidFileException' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/InvalidFileException.php', - 'Dotenv\\Exception\\InvalidPathException' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/InvalidPathException.php', - 'Dotenv\\Exception\\ValidationException' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/ValidationException.php', - 'Dotenv\\Loader\\Loader' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/Loader.php', - 'Dotenv\\Loader\\LoaderInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/LoaderInterface.php', - 'Dotenv\\Loader\\Resolver' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/Resolver.php', - 'Dotenv\\Parser\\Entry' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Parser/Entry.php', - 'Dotenv\\Parser\\EntryParser' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Parser/EntryParser.php', - 'Dotenv\\Parser\\Lexer' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Parser/Lexer.php', - 'Dotenv\\Parser\\Lines' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Parser/Lines.php', - 'Dotenv\\Parser\\Parser' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Parser/Parser.php', - 'Dotenv\\Parser\\ParserInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Parser/ParserInterface.php', - 'Dotenv\\Parser\\Value' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Parser/Value.php', - 'Dotenv\\Repository\\AdapterRepository' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/AdapterRepository.php', - 'Dotenv\\Repository\\Adapter\\AdapterInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/AdapterInterface.php', - 'Dotenv\\Repository\\Adapter\\ApacheAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php', - 'Dotenv\\Repository\\Adapter\\ArrayAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php', - 'Dotenv\\Repository\\Adapter\\EnvConstAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php', - 'Dotenv\\Repository\\Adapter\\GuardedWriter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/GuardedWriter.php', - 'Dotenv\\Repository\\Adapter\\ImmutableWriter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ImmutableWriter.php', - 'Dotenv\\Repository\\Adapter\\MultiReader' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/MultiReader.php', - 'Dotenv\\Repository\\Adapter\\MultiWriter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/MultiWriter.php', - 'Dotenv\\Repository\\Adapter\\PutenvAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php', - 'Dotenv\\Repository\\Adapter\\ReaderInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php', - 'Dotenv\\Repository\\Adapter\\ReplacingWriter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php', - 'Dotenv\\Repository\\Adapter\\ServerConstAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php', - 'Dotenv\\Repository\\Adapter\\WriterInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php', - 'Dotenv\\Repository\\RepositoryBuilder' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php', - 'Dotenv\\Repository\\RepositoryInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/RepositoryInterface.php', - 'Dotenv\\Store\\FileStore' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/FileStore.php', - 'Dotenv\\Store\\File\\Paths' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/File/Paths.php', - 'Dotenv\\Store\\File\\Reader' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/File/Reader.php', - 'Dotenv\\Store\\StoreBuilder' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/StoreBuilder.php', - 'Dotenv\\Store\\StoreInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/StoreInterface.php', - 'Dotenv\\Store\\StringStore' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/StringStore.php', - 'Dotenv\\Util\\Regex' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Util/Regex.php', - 'Dotenv\\Util\\Str' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Util/Str.php', - 'Dotenv\\Validator' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Validator.php', - 'Emleons\\SimRating\\Interfaces\\RendererInterface' => __DIR__ . '/..' . '/emleons/sim-rating/src/Interfaces/RendererInterface.php', - 'Emleons\\SimRating\\Rating' => __DIR__ . '/..' . '/emleons/sim-rating/src/Rating.php', - 'Emleons\\SimRating\\Renderer\\HtmlRenderer' => __DIR__ . '/..' . '/emleons/sim-rating/src/Renderer/HtmlRenderer.php', - 'Emleons\\SimRating\\Renderer\\JsonRenderer' => __DIR__ . '/..' . '/emleons/sim-rating/src/Renderer/JsonRenderer.php', - 'Emleons\\SimRating\\Renderer\\SvgRenderer' => __DIR__ . '/..' . '/emleons/sim-rating/src/Renderer/SvgRenderer.php', - 'FastRoute\\BadRouteException' => __DIR__ . '/..' . '/nikic/fast-route/src/BadRouteException.php', - 'FastRoute\\DataGenerator' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator.php', - 'FastRoute\\DataGenerator\\CharCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/CharCountBased.php', - 'FastRoute\\DataGenerator\\GroupCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/GroupCountBased.php', - 'FastRoute\\DataGenerator\\GroupPosBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/GroupPosBased.php', - 'FastRoute\\DataGenerator\\MarkBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/MarkBased.php', - 'FastRoute\\DataGenerator\\RegexBasedAbstract' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php', - 'FastRoute\\Dispatcher' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher.php', - 'FastRoute\\Dispatcher\\CharCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/CharCountBased.php', - 'FastRoute\\Dispatcher\\GroupCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/GroupCountBased.php', - 'FastRoute\\Dispatcher\\GroupPosBased' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/GroupPosBased.php', - 'FastRoute\\Dispatcher\\MarkBased' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/MarkBased.php', - 'FastRoute\\Dispatcher\\RegexBasedAbstract' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php', - 'FastRoute\\Route' => __DIR__ . '/..' . '/nikic/fast-route/src/Route.php', - 'FastRoute\\RouteCollector' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteCollector.php', - 'FastRoute\\RouteParser' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteParser.php', - 'FastRoute\\RouteParser\\Std' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteParser/Std.php', - 'Fig\\Http\\Message\\RequestMethodInterface' => __DIR__ . '/..' . '/fig/http-message-util/src/RequestMethodInterface.php', - 'Fig\\Http\\Message\\StatusCodeInterface' => __DIR__ . '/..' . '/fig/http-message-util/src/StatusCodeInterface.php', - 'GrahamCampbell\\ResultType\\Error' => __DIR__ . '/..' . '/graham-campbell/result-type/src/Error.php', - 'GrahamCampbell\\ResultType\\Result' => __DIR__ . '/..' . '/graham-campbell/result-type/src/Result.php', - 'GrahamCampbell\\ResultType\\Success' => __DIR__ . '/..' . '/graham-campbell/result-type/src/Success.php', - 'Invoker\\CallableResolver' => __DIR__ . '/..' . '/php-di/invoker/src/CallableResolver.php', - 'Invoker\\Exception\\InvocationException' => __DIR__ . '/..' . '/php-di/invoker/src/Exception/InvocationException.php', - 'Invoker\\Exception\\NotCallableException' => __DIR__ . '/..' . '/php-di/invoker/src/Exception/NotCallableException.php', - 'Invoker\\Exception\\NotEnoughParametersException' => __DIR__ . '/..' . '/php-di/invoker/src/Exception/NotEnoughParametersException.php', - 'Invoker\\Invoker' => __DIR__ . '/..' . '/php-di/invoker/src/Invoker.php', - 'Invoker\\InvokerInterface' => __DIR__ . '/..' . '/php-di/invoker/src/InvokerInterface.php', - 'Invoker\\ParameterResolver\\AssociativeArrayResolver' => __DIR__ . '/..' . '/php-di/invoker/src/ParameterResolver/AssociativeArrayResolver.php', - 'Invoker\\ParameterResolver\\Container\\ParameterNameContainerResolver' => __DIR__ . '/..' . '/php-di/invoker/src/ParameterResolver/Container/ParameterNameContainerResolver.php', - 'Invoker\\ParameterResolver\\Container\\TypeHintContainerResolver' => __DIR__ . '/..' . '/php-di/invoker/src/ParameterResolver/Container/TypeHintContainerResolver.php', - 'Invoker\\ParameterResolver\\DefaultValueResolver' => __DIR__ . '/..' . '/php-di/invoker/src/ParameterResolver/DefaultValueResolver.php', - 'Invoker\\ParameterResolver\\NumericArrayResolver' => __DIR__ . '/..' . '/php-di/invoker/src/ParameterResolver/NumericArrayResolver.php', - 'Invoker\\ParameterResolver\\ParameterResolver' => __DIR__ . '/..' . '/php-di/invoker/src/ParameterResolver/ParameterResolver.php', - 'Invoker\\ParameterResolver\\ResolverChain' => __DIR__ . '/..' . '/php-di/invoker/src/ParameterResolver/ResolverChain.php', - 'Invoker\\ParameterResolver\\TypeHintResolver' => __DIR__ . '/..' . '/php-di/invoker/src/ParameterResolver/TypeHintResolver.php', - 'Invoker\\Reflection\\CallableReflection' => __DIR__ . '/..' . '/php-di/invoker/src/Reflection/CallableReflection.php', - 'Laravel\\SerializableClosure\\Contracts\\Serializable' => __DIR__ . '/..' . '/laravel/serializable-closure/src/Contracts/Serializable.php', - 'Laravel\\SerializableClosure\\Contracts\\Signer' => __DIR__ . '/..' . '/laravel/serializable-closure/src/Contracts/Signer.php', - 'Laravel\\SerializableClosure\\Exceptions\\InvalidSignatureException' => __DIR__ . '/..' . '/laravel/serializable-closure/src/Exceptions/InvalidSignatureException.php', - 'Laravel\\SerializableClosure\\Exceptions\\MissingSecretKeyException' => __DIR__ . '/..' . '/laravel/serializable-closure/src/Exceptions/MissingSecretKeyException.php', - 'Laravel\\SerializableClosure\\Exceptions\\PhpVersionNotSupportedException' => __DIR__ . '/..' . '/laravel/serializable-closure/src/Exceptions/PhpVersionNotSupportedException.php', - 'Laravel\\SerializableClosure\\SerializableClosure' => __DIR__ . '/..' . '/laravel/serializable-closure/src/SerializableClosure.php', - 'Laravel\\SerializableClosure\\Serializers\\Native' => __DIR__ . '/..' . '/laravel/serializable-closure/src/Serializers/Native.php', - 'Laravel\\SerializableClosure\\Serializers\\Signed' => __DIR__ . '/..' . '/laravel/serializable-closure/src/Serializers/Signed.php', - 'Laravel\\SerializableClosure\\Signers\\Hmac' => __DIR__ . '/..' . '/laravel/serializable-closure/src/Signers/Hmac.php', - 'Laravel\\SerializableClosure\\Support\\ClosureScope' => __DIR__ . '/..' . '/laravel/serializable-closure/src/Support/ClosureScope.php', - 'Laravel\\SerializableClosure\\Support\\ClosureStream' => __DIR__ . '/..' . '/laravel/serializable-closure/src/Support/ClosureStream.php', - 'Laravel\\SerializableClosure\\Support\\ReflectionClosure' => __DIR__ . '/..' . '/laravel/serializable-closure/src/Support/ReflectionClosure.php', - 'Laravel\\SerializableClosure\\Support\\SelfReference' => __DIR__ . '/..' . '/laravel/serializable-closure/src/Support/SelfReference.php', - 'Laravel\\SerializableClosure\\UnsignedSerializableClosure' => __DIR__ . '/..' . '/laravel/serializable-closure/src/UnsignedSerializableClosure.php', - 'Monolog\\Attribute\\AsMonologProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php', - 'Monolog\\Attribute\\WithMonologChannel' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Attribute/WithMonologChannel.php', - 'Monolog\\DateTimeImmutable' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/DateTimeImmutable.php', - 'Monolog\\ErrorHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/ErrorHandler.php', - 'Monolog\\Formatter\\ChromePHPFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php', - 'Monolog\\Formatter\\ElasticaFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php', - 'Monolog\\Formatter\\ElasticsearchFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php', - 'Monolog\\Formatter\\FlowdockFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php', - 'Monolog\\Formatter\\FluentdFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php', - 'Monolog\\Formatter\\FormatterInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php', - 'Monolog\\Formatter\\GelfMessageFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php', - 'Monolog\\Formatter\\GoogleCloudLoggingFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php', - 'Monolog\\Formatter\\HtmlFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php', - 'Monolog\\Formatter\\JsonFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php', - 'Monolog\\Formatter\\LineFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LineFormatter.php', - 'Monolog\\Formatter\\LogglyFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php', - 'Monolog\\Formatter\\LogmaticFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php', - 'Monolog\\Formatter\\LogstashFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php', - 'Monolog\\Formatter\\MongoDBFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php', - 'Monolog\\Formatter\\NormalizerFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php', - 'Monolog\\Formatter\\ScalarFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php', - 'Monolog\\Formatter\\SyslogFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/SyslogFormatter.php', - 'Monolog\\Formatter\\WildfireFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php', - 'Monolog\\Handler\\AbstractHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/AbstractHandler.php', - 'Monolog\\Handler\\AbstractProcessingHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php', - 'Monolog\\Handler\\AbstractSyslogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php', - 'Monolog\\Handler\\AmqpHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/AmqpHandler.php', - 'Monolog\\Handler\\BrowserConsoleHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php', - 'Monolog\\Handler\\BufferHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/BufferHandler.php', - 'Monolog\\Handler\\ChromePHPHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php', - 'Monolog\\Handler\\CouchDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php', - 'Monolog\\Handler\\CubeHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/CubeHandler.php', - 'Monolog\\Handler\\Curl\\Util' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/Curl/Util.php', - 'Monolog\\Handler\\DeduplicationHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php', - 'Monolog\\Handler\\DoctrineCouchDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php', - 'Monolog\\Handler\\DynamoDbHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php', - 'Monolog\\Handler\\ElasticaHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php', - 'Monolog\\Handler\\ElasticsearchHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php', - 'Monolog\\Handler\\ErrorLogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php', - 'Monolog\\Handler\\FallbackGroupHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php', - 'Monolog\\Handler\\FilterHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FilterHandler.php', - 'Monolog\\Handler\\FingersCrossedHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php', - 'Monolog\\Handler\\FingersCrossed\\ActivationStrategyInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php', - 'Monolog\\Handler\\FingersCrossed\\ChannelLevelActivationStrategy' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php', - 'Monolog\\Handler\\FingersCrossed\\ErrorLevelActivationStrategy' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php', - 'Monolog\\Handler\\FirePHPHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php', - 'Monolog\\Handler\\FleepHookHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php', - 'Monolog\\Handler\\FlowdockHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php', - 'Monolog\\Handler\\FormattableHandlerInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php', - 'Monolog\\Handler\\FormattableHandlerTrait' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php', - 'Monolog\\Handler\\GelfHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/GelfHandler.php', - 'Monolog\\Handler\\GroupHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/GroupHandler.php', - 'Monolog\\Handler\\Handler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/Handler.php', - 'Monolog\\Handler\\HandlerInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HandlerInterface.php', - 'Monolog\\Handler\\HandlerWrapper' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php', - 'Monolog\\Handler\\IFTTTHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php', - 'Monolog\\Handler\\InsightOpsHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php', - 'Monolog\\Handler\\LogEntriesHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php', - 'Monolog\\Handler\\LogglyHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/LogglyHandler.php', - 'Monolog\\Handler\\LogmaticHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php', - 'Monolog\\Handler\\MailHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MailHandler.php', - 'Monolog\\Handler\\MandrillHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MandrillHandler.php', - 'Monolog\\Handler\\MissingExtensionException' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php', - 'Monolog\\Handler\\MongoDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php', - 'Monolog\\Handler\\NativeMailerHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php', - 'Monolog\\Handler\\NewRelicHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php', - 'Monolog\\Handler\\NoopHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NoopHandler.php', - 'Monolog\\Handler\\NullHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NullHandler.php', - 'Monolog\\Handler\\OverflowHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/OverflowHandler.php', - 'Monolog\\Handler\\PHPConsoleHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php', - 'Monolog\\Handler\\ProcessHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ProcessHandler.php', - 'Monolog\\Handler\\ProcessableHandlerInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php', - 'Monolog\\Handler\\ProcessableHandlerTrait' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php', - 'Monolog\\Handler\\PsrHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PsrHandler.php', - 'Monolog\\Handler\\PushoverHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PushoverHandler.php', - 'Monolog\\Handler\\RedisHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RedisHandler.php', - 'Monolog\\Handler\\RedisPubSubHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php', - 'Monolog\\Handler\\RollbarHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RollbarHandler.php', - 'Monolog\\Handler\\RotatingFileHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php', - 'Monolog\\Handler\\SamplingHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SamplingHandler.php', - 'Monolog\\Handler\\SendGridHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SendGridHandler.php', - 'Monolog\\Handler\\SlackHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackHandler.php', - 'Monolog\\Handler\\SlackWebhookHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php', - 'Monolog\\Handler\\Slack\\SlackRecord' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php', - 'Monolog\\Handler\\SocketHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SocketHandler.php', - 'Monolog\\Handler\\SqsHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SqsHandler.php', - 'Monolog\\Handler\\StreamHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/StreamHandler.php', - 'Monolog\\Handler\\SymfonyMailerHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SymfonyMailerHandler.php', - 'Monolog\\Handler\\SyslogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogHandler.php', - 'Monolog\\Handler\\SyslogUdpHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php', - 'Monolog\\Handler\\SyslogUdp\\UdpSocket' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php', - 'Monolog\\Handler\\TelegramBotHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php', - 'Monolog\\Handler\\TestHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/TestHandler.php', - 'Monolog\\Handler\\WebRequestRecognizerTrait' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php', - 'Monolog\\Handler\\WhatFailureGroupHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php', - 'Monolog\\Handler\\ZendMonitorHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php', - 'Monolog\\JsonSerializableDateTimeImmutable' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/JsonSerializableDateTimeImmutable.php', - 'Monolog\\Level' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Level.php', - 'Monolog\\LogRecord' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/LogRecord.php', - 'Monolog\\Logger' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Logger.php', - 'Monolog\\Processor\\ClosureContextProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/ClosureContextProcessor.php', - 'Monolog\\Processor\\GitProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/GitProcessor.php', - 'Monolog\\Processor\\HostnameProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php', - 'Monolog\\Processor\\IntrospectionProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php', - 'Monolog\\Processor\\LoadAverageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/LoadAverageProcessor.php', - 'Monolog\\Processor\\MemoryPeakUsageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php', - 'Monolog\\Processor\\MemoryProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php', - 'Monolog\\Processor\\MemoryUsageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php', - 'Monolog\\Processor\\MercurialProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php', - 'Monolog\\Processor\\ProcessIdProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php', - 'Monolog\\Processor\\ProcessorInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php', - 'Monolog\\Processor\\PsrLogMessageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php', - 'Monolog\\Processor\\TagProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/TagProcessor.php', - 'Monolog\\Processor\\UidProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/UidProcessor.php', - 'Monolog\\Processor\\WebProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/WebProcessor.php', - 'Monolog\\Registry' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Registry.php', - 'Monolog\\ResettableInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/ResettableInterface.php', - 'Monolog\\SignalHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/SignalHandler.php', - 'Monolog\\Test\\MonologTestCase' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Test/MonologTestCase.php', - 'Monolog\\Test\\TestCase' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Test/TestCase.php', - 'Monolog\\Utils' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Utils.php', 'PDF417' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/barcodes/pdf417.php', - 'PHPMailer\\PHPMailer\\DSNConfigurator' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/DSNConfigurator.php', - 'PHPMailer\\PHPMailer\\Exception' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/Exception.php', - 'PHPMailer\\PHPMailer\\OAuth' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/OAuth.php', - 'PHPMailer\\PHPMailer\\OAuthTokenProvider' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/OAuthTokenProvider.php', - 'PHPMailer\\PHPMailer\\PHPMailer' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/PHPMailer.php', - 'PHPMailer\\PHPMailer\\POP3' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/POP3.php', - 'PHPMailer\\PHPMailer\\SMTP' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/SMTP.php', - 'PhpOption\\LazyOption' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/LazyOption.php', - 'PhpOption\\None' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/None.php', - 'PhpOption\\Option' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/Option.php', - 'PhpOption\\Some' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/Some.php', 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', - 'Psr\\Container\\ContainerExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerExceptionInterface.php', - 'Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php', - 'Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php', - 'Psr\\Http\\Message\\MessageInterface' => __DIR__ . '/..' . '/psr/http-message/src/MessageInterface.php', - 'Psr\\Http\\Message\\RequestFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/RequestFactoryInterface.php', - 'Psr\\Http\\Message\\RequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/RequestInterface.php', - 'Psr\\Http\\Message\\ResponseFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/ResponseFactoryInterface.php', - 'Psr\\Http\\Message\\ResponseInterface' => __DIR__ . '/..' . '/psr/http-message/src/ResponseInterface.php', - 'Psr\\Http\\Message\\ServerRequestFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/ServerRequestFactoryInterface.php', - 'Psr\\Http\\Message\\ServerRequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/ServerRequestInterface.php', - 'Psr\\Http\\Message\\StreamFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/StreamFactoryInterface.php', - 'Psr\\Http\\Message\\StreamInterface' => __DIR__ . '/..' . '/psr/http-message/src/StreamInterface.php', - 'Psr\\Http\\Message\\UploadedFileFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/UploadedFileFactoryInterface.php', - 'Psr\\Http\\Message\\UploadedFileInterface' => __DIR__ . '/..' . '/psr/http-message/src/UploadedFileInterface.php', - 'Psr\\Http\\Message\\UriFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/UriFactoryInterface.php', - 'Psr\\Http\\Message\\UriInterface' => __DIR__ . '/..' . '/psr/http-message/src/UriInterface.php', - 'Psr\\Http\\Server\\MiddlewareInterface' => __DIR__ . '/..' . '/psr/http-server-middleware/src/MiddlewareInterface.php', - 'Psr\\Http\\Server\\RequestHandlerInterface' => __DIR__ . '/..' . '/psr/http-server-handler/src/RequestHandlerInterface.php', - 'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/src/AbstractLogger.php', - 'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/src/InvalidArgumentException.php', - 'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/src/LogLevel.php', - 'Psr\\Log\\LoggerAwareInterface' => __DIR__ . '/..' . '/psr/log/src/LoggerAwareInterface.php', - 'Psr\\Log\\LoggerAwareTrait' => __DIR__ . '/..' . '/psr/log/src/LoggerAwareTrait.php', - 'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/src/LoggerInterface.php', - 'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/src/LoggerTrait.php', - 'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/src/NullLogger.php', 'QRcode' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/barcodes/qrcode.php', - 'ReCaptcha\\ReCaptcha' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/ReCaptcha.php', - 'ReCaptcha\\RequestMethod' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/RequestMethod.php', - 'ReCaptcha\\RequestMethod\\Curl' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/RequestMethod/Curl.php', - 'ReCaptcha\\RequestMethod\\CurlPost' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/RequestMethod/CurlPost.php', - 'ReCaptcha\\RequestMethod\\Post' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php', - 'ReCaptcha\\RequestMethod\\Socket' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/RequestMethod/Socket.php', - 'ReCaptcha\\RequestMethod\\SocketPost' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/RequestMethod/SocketPost.php', - 'ReCaptcha\\RequestParameters' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/RequestParameters.php', - 'ReCaptcha\\Response' => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha/Response.php', - 'Slim\\App' => __DIR__ . '/..' . '/slim/slim/Slim/App.php', - 'Slim\\CallableResolver' => __DIR__ . '/..' . '/slim/slim/Slim/CallableResolver.php', - 'Slim\\Csrf\\Guard' => __DIR__ . '/..' . '/slim/csrf/src/Guard.php', - 'Slim\\Error\\AbstractErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/AbstractErrorRenderer.php', - 'Slim\\Error\\Renderers\\HtmlErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php', - 'Slim\\Error\\Renderers\\JsonErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php', - 'Slim\\Error\\Renderers\\PlainTextErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php', - 'Slim\\Error\\Renderers\\XmlErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php', - 'Slim\\Exception\\HttpBadRequestException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpBadRequestException.php', - 'Slim\\Exception\\HttpException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpException.php', - 'Slim\\Exception\\HttpForbiddenException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpForbiddenException.php', - 'Slim\\Exception\\HttpGoneException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpGoneException.php', - 'Slim\\Exception\\HttpInternalServerErrorException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpInternalServerErrorException.php', - 'Slim\\Exception\\HttpMethodNotAllowedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpMethodNotAllowedException.php', - 'Slim\\Exception\\HttpNotFoundException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpNotFoundException.php', - 'Slim\\Exception\\HttpNotImplementedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpNotImplementedException.php', - 'Slim\\Exception\\HttpSpecializedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpSpecializedException.php', - 'Slim\\Exception\\HttpTooManyRequestsException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpTooManyRequestsException.php', - 'Slim\\Exception\\HttpUnauthorizedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpUnauthorizedException.php', - 'Slim\\Factory\\AppFactory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/AppFactory.php', - 'Slim\\Factory\\Psr17\\GuzzlePsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php', - 'Slim\\Factory\\Psr17\\HttpSoftPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/HttpSoftPsr17Factory.php', - 'Slim\\Factory\\Psr17\\LaminasDiactorosPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php', - 'Slim\\Factory\\Psr17\\NyholmPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/NyholmPsr17Factory.php', - 'Slim\\Factory\\Psr17\\Psr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/Psr17Factory.php', - 'Slim\\Factory\\Psr17\\Psr17FactoryProvider' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/Psr17FactoryProvider.php', - 'Slim\\Factory\\Psr17\\ServerRequestCreator' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/ServerRequestCreator.php', - 'Slim\\Factory\\Psr17\\SlimHttpPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php', - 'Slim\\Factory\\Psr17\\SlimHttpServerRequestCreator' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php', - 'Slim\\Factory\\Psr17\\SlimPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php', - 'Slim\\Factory\\ServerRequestCreatorFactory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/ServerRequestCreatorFactory.php', - 'Slim\\Handlers\\ErrorHandler' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/ErrorHandler.php', - 'Slim\\Handlers\\Strategies\\RequestHandler' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestHandler.php', - 'Slim\\Handlers\\Strategies\\RequestResponse' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestResponse.php', - 'Slim\\Handlers\\Strategies\\RequestResponseArgs' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php', - 'Slim\\Handlers\\Strategies\\RequestResponseNamedArgs' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestResponseNamedArgs.php', - 'Slim\\Interfaces\\AdvancedCallableResolverInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/AdvancedCallableResolverInterface.php', - 'Slim\\Interfaces\\CallableResolverInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/CallableResolverInterface.php', - 'Slim\\Interfaces\\DispatcherInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/DispatcherInterface.php', - 'Slim\\Interfaces\\ErrorHandlerInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/ErrorHandlerInterface.php', - 'Slim\\Interfaces\\ErrorRendererInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/ErrorRendererInterface.php', - 'Slim\\Interfaces\\InvocationStrategyInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php', - 'Slim\\Interfaces\\MiddlewareDispatcherInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/MiddlewareDispatcherInterface.php', - 'Slim\\Interfaces\\Psr17FactoryInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/Psr17FactoryInterface.php', - 'Slim\\Interfaces\\Psr17FactoryProviderInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/Psr17FactoryProviderInterface.php', - 'Slim\\Interfaces\\RequestHandlerInvocationStrategyInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RequestHandlerInvocationStrategyInterface.php', - 'Slim\\Interfaces\\RouteCollectorInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteCollectorInterface.php', - 'Slim\\Interfaces\\RouteCollectorProxyInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteCollectorProxyInterface.php', - 'Slim\\Interfaces\\RouteGroupInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteGroupInterface.php', - 'Slim\\Interfaces\\RouteInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteInterface.php', - 'Slim\\Interfaces\\RouteParserInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteParserInterface.php', - 'Slim\\Interfaces\\RouteResolverInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteResolverInterface.php', - 'Slim\\Interfaces\\ServerRequestCreatorInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php', - 'Slim\\Logger' => __DIR__ . '/..' . '/slim/slim/Slim/Logger.php', - 'Slim\\MiddlewareDispatcher' => __DIR__ . '/..' . '/slim/slim/Slim/MiddlewareDispatcher.php', - 'Slim\\Middleware\\BodyParsingMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/BodyParsingMiddleware.php', - 'Slim\\Middleware\\ContentLengthMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/ContentLengthMiddleware.php', - 'Slim\\Middleware\\ErrorMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/ErrorMiddleware.php', - 'Slim\\Middleware\\MethodOverrideMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php', - 'Slim\\Middleware\\OutputBufferingMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php', - 'Slim\\Middleware\\RoutingMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/RoutingMiddleware.php', - 'Slim\\Psr7\\Cookies' => __DIR__ . '/..' . '/slim/psr7/src/Cookies.php', - 'Slim\\Psr7\\Environment' => __DIR__ . '/..' . '/slim/psr7/src/Environment.php', - 'Slim\\Psr7\\Factory\\RequestFactory' => __DIR__ . '/..' . '/slim/psr7/src/Factory/RequestFactory.php', - 'Slim\\Psr7\\Factory\\ResponseFactory' => __DIR__ . '/..' . '/slim/psr7/src/Factory/ResponseFactory.php', - 'Slim\\Psr7\\Factory\\ServerRequestFactory' => __DIR__ . '/..' . '/slim/psr7/src/Factory/ServerRequestFactory.php', - 'Slim\\Psr7\\Factory\\StreamFactory' => __DIR__ . '/..' . '/slim/psr7/src/Factory/StreamFactory.php', - 'Slim\\Psr7\\Factory\\UploadedFileFactory' => __DIR__ . '/..' . '/slim/psr7/src/Factory/UploadedFileFactory.php', - 'Slim\\Psr7\\Factory\\UriFactory' => __DIR__ . '/..' . '/slim/psr7/src/Factory/UriFactory.php', - 'Slim\\Psr7\\Header' => __DIR__ . '/..' . '/slim/psr7/src/Header.php', - 'Slim\\Psr7\\Headers' => __DIR__ . '/..' . '/slim/psr7/src/Headers.php', - 'Slim\\Psr7\\Interfaces\\HeadersInterface' => __DIR__ . '/..' . '/slim/psr7/src/Interfaces/HeadersInterface.php', - 'Slim\\Psr7\\Message' => __DIR__ . '/..' . '/slim/psr7/src/Message.php', - 'Slim\\Psr7\\NonBufferedBody' => __DIR__ . '/..' . '/slim/psr7/src/NonBufferedBody.php', - 'Slim\\Psr7\\Request' => __DIR__ . '/..' . '/slim/psr7/src/Request.php', - 'Slim\\Psr7\\Response' => __DIR__ . '/..' . '/slim/psr7/src/Response.php', - 'Slim\\Psr7\\Stream' => __DIR__ . '/..' . '/slim/psr7/src/Stream.php', - 'Slim\\Psr7\\UploadedFile' => __DIR__ . '/..' . '/slim/psr7/src/UploadedFile.php', - 'Slim\\Psr7\\Uri' => __DIR__ . '/..' . '/slim/psr7/src/Uri.php', - 'Slim\\ResponseEmitter' => __DIR__ . '/..' . '/slim/slim/Slim/ResponseEmitter.php', - 'Slim\\Routing\\Dispatcher' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/Dispatcher.php', - 'Slim\\Routing\\FastRouteDispatcher' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/FastRouteDispatcher.php', - 'Slim\\Routing\\Route' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/Route.php', - 'Slim\\Routing\\RouteCollector' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteCollector.php', - 'Slim\\Routing\\RouteCollectorProxy' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteCollectorProxy.php', - 'Slim\\Routing\\RouteContext' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteContext.php', - 'Slim\\Routing\\RouteGroup' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteGroup.php', - 'Slim\\Routing\\RouteParser' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteParser.php', - 'Slim\\Routing\\RouteResolver' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteResolver.php', - 'Slim\\Routing\\RouteRunner' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteRunner.php', - 'Slim\\Routing\\RoutingResults' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RoutingResults.php', 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', - 'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php', - 'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php', - 'Symfony\\Polyfill\\Php80\\Php80' => __DIR__ . '/..' . '/symfony/polyfill-php80/Php80.php', - 'Symfony\\Polyfill\\Php80\\PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/PhpToken.php', 'TCPDF' => __DIR__ . '/..' . '/tecnickcom/tcpdf/tcpdf.php', 'TCPDF2DBarcode' => __DIR__ . '/..' . '/tecnickcom/tcpdf/tcpdf_barcodes_2d.php', 'TCPDFBarcode' => __DIR__ . '/..' . '/tecnickcom/tcpdf/tcpdf_barcodes_1d.php', @@ -741,21 +197,6 @@ class ComposerStaticInite58358eec498b7b6927cfe671382554c 'TCPDF_FONT_DATA' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/tcpdf_font_data.php', 'TCPDF_IMAGES' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/tcpdf_images.php', 'TCPDF_STATIC' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/tcpdf_static.php', - 'Thepixeldeveloper\\Sitemap\\ChunkedCollection' => __DIR__ . '/..' . '/thepixeldeveloper/sitemap/src/ChunkedCollection.php', - 'Thepixeldeveloper\\Sitemap\\ChunkedUrlset' => __DIR__ . '/..' . '/thepixeldeveloper/sitemap/src/ChunkedUrlset.php', - 'Thepixeldeveloper\\Sitemap\\Collection' => __DIR__ . '/..' . '/thepixeldeveloper/sitemap/src/Collection.php', - 'Thepixeldeveloper\\Sitemap\\Drivers\\XmlWriterDriver' => __DIR__ . '/..' . '/thepixeldeveloper/sitemap/src/Drivers/XmlWriterDriver.php', - 'Thepixeldeveloper\\Sitemap\\Extensions\\Image' => __DIR__ . '/..' . '/thepixeldeveloper/sitemap/src/Extensions/Image.php', - 'Thepixeldeveloper\\Sitemap\\Extensions\\Link' => __DIR__ . '/..' . '/thepixeldeveloper/sitemap/src/Extensions/Link.php', - 'Thepixeldeveloper\\Sitemap\\Extensions\\Mobile' => __DIR__ . '/..' . '/thepixeldeveloper/sitemap/src/Extensions/Mobile.php', - 'Thepixeldeveloper\\Sitemap\\Extensions\\News' => __DIR__ . '/..' . '/thepixeldeveloper/sitemap/src/Extensions/News.php', - 'Thepixeldeveloper\\Sitemap\\Extensions\\Video' => __DIR__ . '/..' . '/thepixeldeveloper/sitemap/src/Extensions/Video.php', - 'Thepixeldeveloper\\Sitemap\\Interfaces\\DriverInterface' => __DIR__ . '/..' . '/thepixeldeveloper/sitemap/src/Interfaces/DriverInterface.php', - 'Thepixeldeveloper\\Sitemap\\Interfaces\\VisitorInterface' => __DIR__ . '/..' . '/thepixeldeveloper/sitemap/src/Interfaces/VisitorInterface.php', - 'Thepixeldeveloper\\Sitemap\\Sitemap' => __DIR__ . '/..' . '/thepixeldeveloper/sitemap/src/Sitemap.php', - 'Thepixeldeveloper\\Sitemap\\SitemapIndex' => __DIR__ . '/..' . '/thepixeldeveloper/sitemap/src/SitemapIndex.php', - 'Thepixeldeveloper\\Sitemap\\Url' => __DIR__ . '/..' . '/thepixeldeveloper/sitemap/src/Url.php', - 'Thepixeldeveloper\\Sitemap\\Urlset' => __DIR__ . '/..' . '/thepixeldeveloper/sitemap/src/Urlset.php', 'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', 'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', ); diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index ae438b30..ae0d98ad 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1871,6 +1871,6 @@ "install-path": "../vlucas/phpdotenv" } ], - "dev": false, + "dev": true, "dev-package-names": [] } diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 988c2fde..a3033520 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -7,7 +7,7 @@ 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'dev' => false, + 'dev' => true, ), 'versions' => array( 'emleons/sim-rating' => array( From 3a3469ffb845ddff1a03824cc80b94c10770f892 Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Wed, 1 Apr 2026 20:08:42 +0200 Subject: [PATCH 27/28] fix: address 10-agent review findings + add .coderabbit.yaml Security: - Cast releaseId to int (SSRF prevention) - Add CURLOPT_PROTOCOLS, CURLOPT_MAXREDIRS, CURLOPT_CONNECTTIMEOUT, CURLOPT_SSL_VERIFYPEER to all 4 curl call sites - Add curl_error() logging on CoverArt, MusicBrainz, Deezer calls Bug fixes: - inferTipoMedia: exact match for short tokens 'cd'/'lp' to prevent false positives on 'CD-ROM' and words containing 'lp' - formatTracklist: detect pre-formatted
            HTML and return as-is - Schema.org: separate CreativeWork branch (no isbn/numberOfPages) - Migration SQL: replace %cd%/%lp% LIKE with specific patterns Code quality: - Remove dead $discogsToken parameter from searchMusicBrainz() - Make Discogs rate limiter static (consistent with MusicBrainz) - Make Deezer rate limit elapsed-based (not fixed usleep) - Add missing translation key to en_US and de_DE Config: - Full .coderabbit.yaml with 9 path_instructions sections --- .coderabbit.yaml | 158 +++++++++++++++++- app/Support/MediaLabels.php | 13 +- app/Views/frontend/book-detail.php | 15 ++ .../database/migrations/migrate_0.5.4.sql | 10 +- locale/de_DE.json | 1 + locale/en_US.json | 1 + storage/plugins/discogs/DiscogsPlugin.php | 57 +++++-- 7 files changed, 240 insertions(+), 15 deletions(-) diff --git a/.coderabbit.yaml b/.coderabbit.yaml index 5f3e6ba8..e18add25 100644 --- a/.coderabbit.yaml +++ b/.coderabbit.yaml @@ -1,2 +1,158 @@ +# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json +# Pinakes — CodeRabbit Configuration +# PHP/Slim 4 library management system with MySQL + +language: "it-IT" + +tone_instructions: | + Sii conciso e diretto. Concentrati su bug reali, vulnerabilità di sicurezza + e violazioni delle regole del progetto. Evita suggerimenti stilistici minori. + +early_access: true + reviews: - max_files: 200 + profile: "assertive" + request_changes_workflow: false + high_level_summary: true + poem: false + review_status: true + + # ── File Filters ────────────────────────────────────────────────── + path_filters: + exclude: + - "vendor/**" + - "node_modules/**" + - "public/assets/tinymce/**" + - "public/assets/fontawesome/**" + - "public/assets/choices/**" + - "public/assets/flatpickr/**" + - "public/assets/sweetalert2/**" + - "*.min.js" + - "*.min.css" + - "*.map" + - "pinakes-*.zip" + - "pinakes-*.sha256" + - "test-results/**" + + # ── Path-Specific Review Instructions ────────────────────────────── + path_instructions: + # Controllers — input validation, auth, soft-delete + - path: "app/Controllers/**" + instructions: | + - CRITICO: ogni query sulla tabella `libri` DEVE avere `AND deleted_at IS NULL` + - Verifica che `getParsedBody()` non sia usato per JSON — serve `json_decode((string)$request->getBody())` + - Input utente: validare e sanitizzare PRIMA dell'uso + - Sessione: `$_SESSION['user']['id']` (NON `$_SESSION['user_id']`) + - Eccezioni: catturare `\Throwable` non `\Exception` (strict_types TypeError extends \Error) + - Logging: `SecureLogger::error()` non `error_log()` per contesti sensibili + - Route: mai hardcodare percorsi URL, usare `route_path('key')` o `RouteTranslator::route('key')` + - Export CSV: tipo_media deve essere incluso, usare stringa vuota come fallback (non 'libro') + + # Models / Repository — query safety + - path: "app/Models/**" + instructions: | + - CRITICO: ogni SELECT/UPDATE/DELETE sulla tabella `libri` DEVE avere `AND deleted_at IS NULL` + - Soft-delete: nullificare isbn10, isbn13, ean quando si fa soft-delete (prevent unique constraint violations) + - Transaction safety: mai annidare `begin_transaction()` in mysqli (causa commit implicito) + - Pattern: verificare `@@autocommit` per rilevare transazioni in corso + - hasColumn() guard per colonne aggiunte in migrazioni recenti (backward compat) + - tipo_media: usare `array_key_exists` guard, non sovrascrivere il valore se non esplicitamente fornito + + # Views — escaping, XSS prevention + - path: "app/Views/**" + instructions: | + - CRITICO: `htmlspecialchars(url(...), ENT_QUOTES, 'UTF-8')` in TUTTI gli attributi HTML (href, action, src) + - `route_path()` richiede lo stesso escaping negli attributi HTML + - PHP->JS: usare `json_encode(..., JSON_HEX_TAG)` per qualsiasi dato PHP inserito in JavaScript + - TinyMCE: SEMPRE includere `model: 'dom'` e `license_key: 'gpl'` in ogni `tinymce.init({})` + - Mai usare `HtmlHelper::e()` nelle view — usare `htmlspecialchars(..., ENT_QUOTES, 'UTF-8')` + - Schema.org: ogni tipo_media deve avere il proprio branch con proprietà specifiche (non mescolare Book con CreativeWork) + - DataTable: ogni valore da API deve passare per `escapeHtml()` prima del rendering + + # Support classes — helpers, utilities + - path: "app/Support/**" + instructions: | + - MediaLabels: `isMusic()` deve essere autoritativo su tipo_media quando impostato + - `inferTipoMedia()`: attenzione ai false positive su token corti ('cd' matcha 'CD-ROM', 'lp' matcha parole con 'lp') + - `formatTracklist()`: deve rilevare HTML pre-formattato (`
              `) e restituirlo as-is + - PluginManager: usare `\Throwable` non `\Exception`, `BundledPlugins::LIST` centralizzato + - Route translation: mai hardcodare percorsi, usare `RouteTranslator::route('key')` + + # Plugins — API safety, rate limiting + - path: "storage/plugins/**" + instructions: | + - SICUREZZA: ogni chiamata curl DEVE avere CURLOPT_PROTOCOLS (HTTP/HTTPS only), CURLOPT_MAXREDIRS, CURLOPT_CONNECTTIMEOUT, CURLOPT_SSL_VERIFYPEER + - SSRF: validare/castare ID esterni (es. releaseId a int) prima di usarli in URL + - Rate limiting: deve essere elapsed-based (microtime) e static (persistere tra istanze) + - Ogni `curl_exec()` deve avere `curl_error()` check con logging + - Hook registration: transazione + rethrow on failure + - Non enrichire dati di libri con cover musicali (gate su resolveTipoMedia) + + # Migrations — versioning, idempotency + - path: "installer/database/migrations/**" + instructions: | + - CRITICO: il nome del file di migrazione DEVE avere versione <= version.json (altrimenti viene silenziosamente saltata) + - L'updater usa `version_compare($migrationVersion, $toVersion, '<=')` — versioni superiori sono IGNORATE + - Ogni migrazione DEVE essere completamente idempotente (IF NOT EXISTS, IF @col_exists = 0, etc.) + - LIKE patterns: evitare `%cd%` e `%lp%` che matchano false positive ('CD-ROM', parole con 'lp') — usare REGEXP word boundaries + - Se servono più migrazioni per una release: unirle in UN file con la versione della release + + # Translations — completeness + - path: "locale/**" + instructions: | + - Ogni chiave presente in it_IT.json DEVE essere presente anche in en_US.json e de_DE.json + - Le chiavi di traduzione devono corrispondere esattamente (case-sensitive) + - I placeholder (%s, %d) devono essere preservati in tutte le lingue + - Nuove chiavi aggiunte nel codice PHP/JS devono essere aggiunte in TUTTE le lingue + + # Tests — E2E patterns + - path: "tests/**" + instructions: | + - I test E2E richiedono `/tmp/run-e2e.sh` per credenziali DB/admin + - `--workers=1` obbligatorio per esecuzione seriale + - SweetAlert: dopo form submit, verificare e cliccare `.swal2-confirm` + - Choices.js: usare `fill` + `waitForTimeout` + click suggestion + - Flatpickr: interagire via JS evaluate, non click diretto + - Pulizia dati test: FK-safe order (prima tabelle figlie, poi padri) + + # Release scripts + - path: "scripts/**" + instructions: | + - MAI creare ZIP manualmente — SEMPRE usare `create-release.sh` + - Lo script verifica 9 file critici nel ZIP prima del rilascio + - `git archive` usa file COMMITTATI, non la working directory + - Verificare che `public/assets/tinymce/models/dom/model.min.js` sia nel ZIP + + # ── Auto Review Settings ─────────────────────────────────────────── + auto_review: + enabled: true + drafts: false + + # ── Tools ────────────────────────────────────────────────────────── + tools: + phpstan: + enabled: true + config_file: "phpstan.neon" + shellcheck: + enabled: true + semgrep: + enabled: true + gitleaks: + enabled: true + yamllint: + enabled: true + +# ── Chat ────────────────────────────────────────────────────────────── +chat: + auto_reply: true + +# ── Knowledge Base ──────────────────────────────────────────────────── +knowledge_base: + opt_out: false + learnings: + scope: "local" + enabled: true + issues: + scope: "auto" + pull_requests: + scope: "auto" diff --git a/app/Support/MediaLabels.php b/app/Support/MediaLabels.php index 1a232e0e..a489260a 100644 --- a/app/Support/MediaLabels.php +++ b/app/Support/MediaLabels.php @@ -147,6 +147,11 @@ public static function formatTracklist(string $text): string return ''; } + // If already formatted as HTML ordered list, return as-is + if (str_contains($text, '')) { + return $text; + } + // Remove "Tracklist:" prefix if present $text = preg_replace('/^Tracklist\s*:\s*/i', '', $text) ?? $text; @@ -240,11 +245,17 @@ public static function inferTipoMedia(?string $formato): string return 'audiolibro'; } - foreach (['cdaudio', 'compactdisc', 'vinile', 'vinyl', 'lp', 'cd', 'cassetta', 'cassette', 'audiocassetta'] as $musicToken) { + // Long tokens: safe for substring match (unique enough) + foreach (['cdaudio', 'compactdisc', 'vinile', 'vinyl', 'cassetta', 'cassette', 'audiocassetta'] as $musicToken) { if (str_contains($candidate, $musicToken)) { return 'disco'; } } + // Short tokens: exact match only to avoid false positives + // ('cd' would match 'cdrom', 'lp' would match 'help') + if ($candidate === 'cd' || $candidate === 'lp') { + return 'disco'; + } if (str_contains($candidate, 'dvd') || str_contains($candidate, 'bluray') || str_contains($candidate, 'blu_ray')) { return 'dvd'; diff --git a/app/Views/frontend/book-detail.php b/app/Views/frontend/book-detail.php index 97df500a..893f32e3 100644 --- a/app/Views/frontend/book-detail.php +++ b/app/Views/frontend/book-detail.php @@ -293,6 +293,21 @@ if ($bookISBN) { $bookSchema["isbn"] = $bookISBN; } +} elseif ($schemaType === 'CreativeWork') { + // CreativeWork (altro): generic properties only — no Book-specific fields + if (!empty($schemaAuthors)) { + $bookSchema["author"] = count($schemaAuthors) === 1 ? $schemaAuthors[0] : $schemaAuthors; + } + if ($bookPublisher) { + $bookSchema["publisher"] = ["@type" => "Organization", "name" => $bookPublisher]; + } + if (!empty($book['ean'])) { + $bookSchema["identifier"] = [ + "@type" => "PropertyValue", + "propertyID" => "EAN", + "value" => $book['ean'], + ]; + } } else { // Book (default): full book properties if (!empty($schemaAuthors)) { diff --git a/installer/database/migrations/migrate_0.5.4.sql b/installer/database/migrations/migrate_0.5.4.sql index 799da32d..97b19a5c 100644 --- a/installer/database/migrations/migrate_0.5.4.sql +++ b/installer/database/migrations/migrate_0.5.4.sql @@ -69,12 +69,16 @@ PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; --- Auto-populate from existing formato values (LIKE for partial matches) +-- Auto-populate from existing formato values +-- Use specific patterns to avoid false positives (%cd% matches CD-ROM, %lp% matches 'help') UPDATE libri SET tipo_media = 'disco' WHERE tipo_media = 'libro' - AND (LOWER(formato) LIKE '%cd%' OR LOWER(formato) LIKE '%compact disc%' + AND (LOWER(formato) LIKE '%cd audio%' OR LOWER(formato) LIKE '%cd_audio%' + OR LOWER(formato) LIKE '%cd-audio%' OR LOWER(formato) = 'cd' + OR LOWER(formato) LIKE '%compact disc%' OR LOWER(formato) LIKE '%vinyl%' OR LOWER(formato) LIKE '%vinile%' - OR LOWER(formato) LIKE '%lp%' OR LOWER(formato) LIKE '%cassett%' + OR LOWER(formato) = 'lp' OR LOWER(formato) LIKE '%lp %' OR LOWER(formato) LIKE '% lp' + OR LOWER(formato) LIKE '%cassett%' OR LOWER(formato) LIKE '%audio cassetta%' OR LOWER(formato) LIKE '%audio-cassetta%' OR LOWER(formato) LIKE '%audiocassetta%' OR LOWER(formato) REGEXP '[[:<:]]music[[:>:]]' diff --git a/locale/de_DE.json b/locale/de_DE.json index f286cdb1..10f2d90a 100644 --- a/locale/de_DE.json +++ b/locale/de_DE.json @@ -3693,6 +3693,7 @@ "Toggle menu": "Menü umschalten", "Toggle search": "Suche umschalten", "Token CSRF non valido": "Ungültiges CSRF-Token.", + "Token CSRF non valido.": "Ungültiges CSRF-Token.", "Token CSRF non valido. Riprova.": "Ungültiges CSRF-Token. Bitte versuchen Sie es erneut.", "Token configurato": "Token konfiguriert", "Token configurato — lascia vuoto per mantenere": "Token konfiguriert — leer lassen zum Beibehalten", diff --git a/locale/en_US.json b/locale/en_US.json index 3e1c19d6..756e855c 100644 --- a/locale/en_US.json +++ b/locale/en_US.json @@ -2992,6 +2992,7 @@ "Titolo, sottotitolo, descrizione...": "Title, subtitle, description...", "Titolo...": "Title...", "Token CSRF non valido": "Invalid CSRF token.", + "Token CSRF non valido.": "Invalid CSRF token.", "Token CSRF non valido. Riprova.": "Invalid CSRF token. Please try again.", "Token configurato": "Token configured", "Token configurato — lascia vuoto per mantenere": "Token configured — leave empty to keep", diff --git a/storage/plugins/discogs/DiscogsPlugin.php b/storage/plugins/discogs/DiscogsPlugin.php index 95caf01c..ca18a7da 100644 --- a/storage/plugins/discogs/DiscogsPlugin.php +++ b/storage/plugins/discogs/DiscogsPlugin.php @@ -283,7 +283,7 @@ public function fetchFromDiscogs($currentResult, array $sources, string $isbn): } // Discogs found nothing — try MusicBrainz as fallback - $mbResult = $this->searchMusicBrainz($isbn, $token, $isbn); + $mbResult = $this->searchMusicBrainz($isbn, $isbn); if ($mbResult !== null) { return $this->mergeBookData($currentResult, $mbResult); } @@ -361,7 +361,7 @@ private function fetchDiscogsReleaseFromSearchResult(array $searchResult, ?strin return null; } - $releaseUrl = self::API_BASE . '/releases/' . $releaseId; + $releaseUrl = self::API_BASE . '/releases/' . (int) $releaseId; $release = $this->apiRequest($releaseUrl, $token); if (empty($release) || empty($release['title'])) { @@ -757,17 +757,18 @@ private function mapDiscogsFormat(array $formats): string * @return array|null Decoded JSON response or null on failure */ /** @var float Timestamp of last API request for rate limiting */ - private float $lastRequestTime = 0.0; + private static float $lastRequestTime = 0.0; + private static float $lastDeezerRequestTime = 0.0; private function apiRequest(string $url, ?string $token = null): ?array { // Centralized rate limiting: 1s with token (60 req/min), 2.5s without (25 req/min) $minInterval = ($token !== null && $token !== '') ? 1.0 : 2.5; - $elapsed = microtime(true) - $this->lastRequestTime; - if ($this->lastRequestTime > 0 && $elapsed < $minInterval) { + $elapsed = microtime(true) - self::$lastRequestTime; + if (self::$lastRequestTime > 0 && $elapsed < $minInterval) { usleep((int) (($minInterval - $elapsed) * 1_000_000)); } - $this->lastRequestTime = microtime(true); + self::$lastRequestTime = microtime(true); $headers = [ 'Accept: application/vnd.discogs.v2.discogs+json', @@ -783,6 +784,9 @@ private function apiRequest(string $url, ?string $token = null): ?array CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_TIMEOUT => self::TIMEOUT, + CURLOPT_CONNECTTIMEOUT => 5, + CURLOPT_MAXREDIRS => 5, + CURLOPT_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS, CURLOPT_USERAGENT => self::USER_AGENT, CURLOPT_HTTPHEADER => $headers, CURLOPT_SSL_VERIFYPEER => true, @@ -994,11 +998,10 @@ private function mergeBookData(?array $existing, ?array $new): ?array * Search MusicBrainz by barcode as fallback when Discogs finds nothing * * @param string $barcode EAN/UPC barcode - * @param string|null $discogsToken Discogs token (unused, kept for signature consistency) * @param string|null $fallbackBarcode Persist this barcode only when it was validated by the search path * @return array|null Pinakes-formatted data or null if not found */ - private function searchMusicBrainz(string $barcode, ?string $discogsToken, ?string $fallbackBarcode): ?array + private function searchMusicBrainz(string $barcode, ?string $fallbackBarcode): ?array { // Search by barcode $url = 'https://musicbrainz.org/ws/2/release?query=barcode:' . urlencode($barcode) . '&fmt=json&limit=1'; @@ -1209,12 +1212,22 @@ private function fetchCoverArtArchive(string $mbid): ?string CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_TIMEOUT => 10, + CURLOPT_CONNECTTIMEOUT => 5, + CURLOPT_MAXREDIRS => 5, + CURLOPT_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS, CURLOPT_USERAGENT => self::USER_AGENT, + CURLOPT_SSL_VERIFYPEER => true, ]); $resp = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $curlErr = curl_error($ch); curl_close($ch); + if ($curlErr !== '') { + \App\Support\SecureLogger::warning('[CoverArt] cURL error: ' . $curlErr); + return null; + } + if ($code !== 200 || !is_string($resp)) { return null; } @@ -1266,13 +1279,23 @@ private function musicBrainzRequest(string $url): ?array CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_TIMEOUT => self::TIMEOUT, + CURLOPT_CONNECTTIMEOUT => 5, + CURLOPT_MAXREDIRS => 5, + CURLOPT_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS, CURLOPT_USERAGENT => self::USER_AGENT, CURLOPT_HTTPHEADER => ['Accept: application/json'], + CURLOPT_SSL_VERIFYPEER => true, ]); $resp = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $curlErr = curl_error($ch); curl_close($ch); + if ($curlErr !== '') { + \App\Support\SecureLogger::warning('[MusicBrainz] cURL error: ' . $curlErr); + return null; + } + if ($code !== 200 || !is_string($resp)) { return null; } @@ -1303,20 +1326,34 @@ private function enrichFromDeezer(array $data): array $query = $artist !== '' ? $artist . ' ' . $title : $title; $url = 'https://api.deezer.com/search/album?q=' . urlencode($query) . '&limit=1'; - // Simple rate limit — 1 second between Deezer requests - usleep(1_000_000); + // Elapsed-based rate limit — 1 second between Deezer requests + $elapsed = microtime(true) - self::$lastDeezerRequestTime; + if (self::$lastDeezerRequestTime > 0 && $elapsed < 1.0) { + usleep((int) ((1.0 - $elapsed) * 1_000_000)); + } + self::$lastDeezerRequestTime = microtime(true); $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10, + CURLOPT_CONNECTTIMEOUT => 5, + CURLOPT_MAXREDIRS => 5, + CURLOPT_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS, CURLOPT_USERAGENT => self::USER_AGENT, + CURLOPT_SSL_VERIFYPEER => true, ]); $resp = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $curlErr = curl_error($ch); curl_close($ch); + if ($curlErr !== '') { + \App\Support\SecureLogger::warning('[Deezer] cURL error: ' . $curlErr); + return $data; + } + if ($code !== 200 || !is_string($resp)) { return $data; } From fc399cb62fa8681fe876c8f5d98260d0b387d6b4 Mon Sep 17 00:00:00 2001 From: fabiodalez-dev Date: Thu, 2 Apr 2026 00:16:45 +0200 Subject: [PATCH 28/28] fix: address CodeRabbit review #11 on PR #100 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Optional plugins (discogs) now start inactive on first registration via metadata.optional flag in plugin.json + PluginManager check - Add aria-label/role=img on media type icons in DataTable (a11y) - Add aria-label on token visibility toggle button - Use MediaLabels::label() for ISBN-13 label in frontend (was hardcoded) - Fix test identifiers: EAN/ISBN now use RUN_ID to avoid collisions - Fix test teardown: soft-delete instead of hard DELETE - Translation fixes: Disco→Disc, Cartaceo→Print (en_US) - Add Mostra/nascondi token translation key (en_US, de_DE) --- app/Support/PluginManager.php | 24 ++++++++++++++-------- app/Views/frontend/book-detail.php | 2 +- app/Views/libri/index.php | 4 +++- locale/de_DE.json | 1 + locale/en_US.json | 5 +++-- storage/plugins/discogs/plugin.json | 1 + storage/plugins/discogs/views/settings.php | 1 + tests/pr100-media-types.spec.js | 10 +++++---- 8 files changed, 32 insertions(+), 16 deletions(-) diff --git a/app/Support/PluginManager.php b/app/Support/PluginManager.php index cdcfb2ce..880e26b7 100644 --- a/app/Support/PluginManager.php +++ b/app/Support/PluginManager.php @@ -124,12 +124,16 @@ public function autoRegisterBundledPlugins(): int continue; } + // Optional plugins (e.g. network-backed scrapers) start inactive + $isOptional = !empty($pluginMeta['metadata']['optional']); + $isActiveValue = $isOptional ? 0 : 1; + // Insert into database $stmt = $this->db->prepare(" INSERT INTO plugins ( name, display_name, description, version, author, author_url, plugin_url, is_active, path, main_file, requires_php, requires_app, metadata, installed_at - ) VALUES (?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, NOW()) + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW()) "); $metadata = json_encode($pluginMeta['metadata'] ?? []); @@ -146,7 +150,7 @@ public function autoRegisterBundledPlugins(): int $requiresApp = $pluginMeta['requires_app'] ?? ''; $stmt->bind_param( - 'ssssssssssss', + 'ssssssssissss', $name, $displayName, $description, @@ -154,6 +158,7 @@ public function autoRegisterBundledPlugins(): int $author, $authorUrl, $pluginUrl, + $isActiveValue, $path, $mainFile, $requiresPhp, @@ -164,7 +169,8 @@ public function autoRegisterBundledPlugins(): int if ($stmt->execute()) { $pluginId = $this->db->insert_id; $registered++; - error_log("[PluginManager] Auto-registered bundled plugin: $pluginName (ID: $pluginId, active)"); + $activeLabel = $isOptional ? 'inactive (optional)' : 'active'; + error_log("[PluginManager] Auto-registered bundled plugin: $pluginName (ID: $pluginId, $activeLabel)"); // Run onInstall if exists try { @@ -179,11 +185,13 @@ public function autoRegisterBundledPlugins(): int error_log("[PluginManager] Note: onInstall failed for $pluginName: " . $e->getMessage()); } - // Register hooks for active plugin - try { - $this->runPluginMethod($pluginName, 'onActivate'); - } catch (\Throwable $e) { - error_log("[PluginManager] Note: onActivate failed for $pluginName: " . $e->getMessage()); + // Register hooks only for active (non-optional) plugins + if (!$isOptional) { + try { + $this->runPluginMethod($pluginName, 'onActivate'); + } catch (\Throwable $e) { + error_log("[PluginManager] Note: onActivate failed for $pluginName: " . $e->getMessage()); + } } } else { error_log("[PluginManager] Failed to auto-register $pluginName: " . $this->db->error); diff --git a/app/Views/frontend/book-detail.php b/app/Views/frontend/book-detail.php index 893f32e3..67921c0c 100644 --- a/app/Views/frontend/book-detail.php +++ b/app/Views/frontend/book-detail.php @@ -1772,7 +1772,7 @@ class="book-cover-large img-fluid"
              -
              ISBN-13
              +
              diff --git a/app/Views/libri/index.php b/app/Views/libri/index.php index 4a33405f..3c1180bd 100644 --- a/app/Views/libri/index.php +++ b/app/Views/libri/index.php @@ -693,7 +693,9 @@ className: 'text-center align-middle', className: 'text-center align-middle', render: function(data) { const icons = { libro: 'fa-book', disco: 'fa-compact-disc', audiolibro: 'fa-headphones', dvd: 'fa-film', altro: 'fa-box' }; - return ''; + const labels = { libro: , disco: , audiolibro: , dvd: 'DVD', altro: }; + const label = labels[data] || labels.libro; + return ''; } }, { // Cover diff --git a/locale/de_DE.json b/locale/de_DE.json index 10f2d90a..b4160913 100644 --- a/locale/de_DE.json +++ b/locale/de_DE.json @@ -2298,6 +2298,7 @@ "Mondadori": "Mondadori", "Monitora tentativi di login e eventi di sicurezza": "Anmeldeversuche und Sicherheitsereignisse überwachen", "Mostra": "Anzeigen", + "Mostra/nascondi token": "Token anzeigen/verbergen", "Mostra API Key": "API-Schlüssel anzeigen", "Mostra Cookie Analitici": "Analyse-Cookies anzeigen", "Mostra Cookie di Marketing": "Marketing-Cookies anzeigen", diff --git a/locale/en_US.json b/locale/en_US.json index 756e855c..eb971365 100644 --- a/locale/en_US.json +++ b/locale/en_US.json @@ -1812,6 +1812,7 @@ "Mondadori": "Mondadori", "Monitora tentativi di login e eventi di sicurezza": "Monitor login attempts and security events", "Mostra": "Show", + "Mostra/nascondi token": "Show/hide token", "Mostra API Key": "Show API Key", "Mostra Cookie Analitici": "Show Analytics Cookies", "Mostra Cookie di Marketing": "Show Marketing Cookies", @@ -2835,7 +2836,7 @@ "Opera \"%s\" creata con %d volumi": "Work \"%s\" created with %d volumes", "Errore nella creazione dell'opera": "Error creating the work", "Aggiungi volume": "Add volume", - "Cartaceo": "Paperback", + "Cartaceo": "Print", "eBook": "eBook", "Audiolibro": "Audiobook", "CD Audio": "Audio CD", @@ -4192,7 +4193,7 @@ "Rende disponibile /llms.txt e lo aggiunge a robots.txt": "Makes /llms.txt available and adds it to robots.txt", "Disattivato": "Disabled", "Tipo Media": "Media Type", - "Disco": "Record", + "Disco": "Disc", "Tutti i media": "All media", "Impossibile scaricare (senza ISBN/barcode):": "Cannot download (no ISBN/barcode):" } \ No newline at end of file diff --git a/storage/plugins/discogs/plugin.json b/storage/plugins/discogs/plugin.json index ccb0cdc3..dda83454 100644 --- a/storage/plugins/discogs/plugin.json +++ b/storage/plugins/discogs/plugin.json @@ -11,6 +11,7 @@ "requires_app": "0.5.0", "max_app_version": "1.0.0", "metadata": { + "optional": true, "category": "scraping", "tags": [ "api", diff --git a/storage/plugins/discogs/views/settings.php b/storage/plugins/discogs/views/settings.php index 71422521..25072950 100644 --- a/storage/plugins/discogs/views/settings.php +++ b/storage/plugins/discogs/views/settings.php @@ -111,6 +111,7 @@ class="block w-full rounded-xl border-gray-300 focus:border-purple-500 focus:rin placeholder=""> diff --git a/tests/pr100-media-types.spec.js b/tests/pr100-media-types.spec.js index ad3c2b12..07d36784 100644 --- a/tests/pr100-media-types.spec.js +++ b/tests/pr100-media-types.spec.js @@ -47,14 +47,16 @@ test.describe.serial('PR #100: Media Types System', () => { await page.click('button[type="submit"]'); await page.waitForURL(/\/admin\//, { timeout: 15000 }); - // Seed 4 media types + // Seed 4 media types — use RUN_ID in EAN/ISBN to avoid collisions + const eanSuffix = String(RUN_ID).slice(-10).padStart(12, '0'); + const isbnSuffix = '978' + String(RUN_ID).slice(-10).padStart(10, '0'); dbExec( "INSERT INTO libri (titolo, formato, tipo_media, ean, copie_totali, copie_disponibili, created_at, updated_at) " + - "VALUES ('PR100_CD_" + RUN_ID + "', 'cd_audio', 'disco', '9990000000001', 1, 1, NOW(), NOW())" + "VALUES ('PR100_CD_" + RUN_ID + "', 'cd_audio', 'disco', '" + eanSuffix + "1', 1, 1, NOW(), NOW())" ); dbExec( "INSERT INTO libri (titolo, formato, tipo_media, isbn13, copie_totali, copie_disponibili, created_at, updated_at) " + - "VALUES ('PR100_Book_" + RUN_ID + "', 'cartaceo', 'libro', '9789990000002', 1, 1, NOW(), NOW())" + "VALUES ('PR100_Book_" + RUN_ID + "', 'cartaceo', 'libro', '" + isbnSuffix + "', 1, 1, NOW(), NOW())" ); dbExec( "INSERT INTO libri (titolo, formato, tipo_media, copie_totali, copie_disponibili, created_at, updated_at) " + @@ -72,7 +74,7 @@ test.describe.serial('PR #100: Media Types System', () => { }); test.afterAll(async () => { - try { dbExec("DELETE FROM libri WHERE (titolo LIKE 'PR100_%_" + RUN_ID + "' OR ean = '9990000000001' OR isbn13 = '9789990000002') AND deleted_at IS NULL"); } catch {} + try { dbExec("UPDATE libri SET deleted_at = NOW(), ean = NULL, isbn13 = NULL WHERE titolo LIKE 'PR100_%_" + RUN_ID + "' AND deleted_at IS NULL"); } catch {} await context?.close(); });