diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 6c60bfb..cb0988f 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -1,9 +1,23 @@ +import java.util.Properties +import java.io.FileInputStream + plugins { id("com.android.application") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. id("dev.flutter.flutter-gradle-plugin") } +// Release signing is read from android/key.properties (kept out of version +// control). When it is absent we fall back to the debug key so that +// `flutter run --release` keeps working during development — but a build meant +// for distribution must provide a real keystore here. +val keystoreProperties = Properties() +val keystorePropertiesFile = rootProject.file("key.properties") +val hasReleaseKeystore = keystorePropertiesFile.exists() +if (hasReleaseKeystore) { + keystoreProperties.load(FileInputStream(keystorePropertiesFile)) +} + android { namespace = "com.example.ocideck" compileSdk = flutter.compileSdkVersion @@ -25,11 +39,27 @@ android { versionName = flutter.versionName } + signingConfigs { + if (hasReleaseKeystore) { + create("release") { + keyAlias = keystoreProperties["keyAlias"] as String + keyPassword = keystoreProperties["keyPassword"] as String + storeFile = file(keystoreProperties["storeFile"] as String) + storePassword = keystoreProperties["storePassword"] as String + } + } + } + buildTypes { release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.getByName("debug") + // Use the real release keystore when configured; otherwise fall back + // to the debug key so `flutter run --release` still works locally. + // Do NOT distribute a build signed with the debug key. + signingConfig = if (hasReleaseKeystore) { + signingConfigs.getByName("release") + } else { + signingConfigs.getByName("debug") + } } } } diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index aee44d4..e8b0bdd 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -1288,7 +1288,7 @@ const _dutchSourceStrings = { 'Knop': 'Pulsante', 'Profielnaam': 'Nome profilo', 'Stijlprofiel': 'Profilo stile', - 'Lettertype': 'Font', + 'Lettertype': 'Carattere', 'Kleuren': 'Colori', 'Tekst': 'Testo', 'Logo': 'Logo', @@ -1349,15 +1349,20 @@ const _dutchSourceStrings = { 'P publiek · H legenda · S scherm · G overzicht · B/W zwart/wit · R tijd · Esc stop': 'P pubblico · H legenda · S schermo · G panoramica · B/W nero/bianco · R tempo · Esc stop', 'Akkoord gaan': 'Accetto', - 'Alle gegevens die u in OciDeck invoert, blijven op uw lokale systeem en worden niet naar externe servers gestuurd.': 'Tutti i dati che inserisci in OciDeck rimangono sul tuo sistema locale e non vengono inviati a server esterni.', - 'De app verzamelt geen persoonlijke gegevens, geen statistieken en geen gebruiksgegevens. Uw privacy is onze prioriteit.': 'L\'app non raccoglie dati personali, statistiche o dati di utilizzo. La tua privacy è la nostra priorità.', - 'Door op "Akkoord gaan" te klikken, accepteert u deze voorwaarden en gaat u akkoord met het gebruik van OciDeck.': 'Facendo clic su "Accetto", accetti questi termini e accetti l\'uso di OciDeck.', + 'Alle gegevens die u in OciDeck invoert, blijven op uw lokale systeem en worden niet naar externe servers gestuurd.': + 'Tutti i dati che inserisci in OciDeck rimangono sul tuo sistema locale e non vengono inviati a server esterni.', + 'De app verzamelt geen persoonlijke gegevens, geen statistieken en geen gebruiksgegevens. Uw privacy is onze prioriteit.': + 'L\'app non raccoglie dati personali, statistiche o dati di utilizzo. La tua privacy è la nostra priorità.', + 'Door op "Akkoord gaan" te klikken, accepteert u deze voorwaarden en gaat u akkoord met het gebruik van OciDeck.': + 'Facendo clic su "Accetto", accetti questi termini e accetti l\'uso di OciDeck.', 'Licentie (EUPL 1.2)': 'Licenza (EUPL 1.2)', - 'OciDeck is een lokale desktop-applicatie. Uw presentaties en gegevens worden uitsluitend op uw computer opgeslagen.': 'OciDeck è un\'applicazione desktop locale. Le tue presentazioni e i tuoi dati vengono archiviati esclusivamente sul tuo computer.', + 'OciDeck is een lokale desktop-applicatie. Uw presentaties en gegevens worden uitsluitend op uw computer opgeslagen.': + 'OciDeck è un\'applicazione desktop locale. Le tue presentazioni e i tuoi dati vengono archiviati esclusivamente sul tuo computer.', 'Privacy en gebruik': 'Privacy e utilizzo', 'Toestemming ingetrokken': 'Consenso revocato', 'Toestemming intrekken': 'Revoca consenso', - 'U moet eerst de privacy- en gebruiksvoorwaarden accepteren voordat u OciDeck kunt gebruiken.': 'Devi accettare i termini di privacy e utilizzo prima di poter utilizzare OciDeck.', + 'U moet eerst de privacy- en gebruiksvoorwaarden accepteren voordat u OciDeck kunt gebruiken.': + 'Devi accettare i termini di privacy e utilizzo prima di poter utilizzare OciDeck.', 'Volledige licentie online': 'Licenza completa online', 'Welkom bij OciDeck': 'Benvenuto in OciDeck', }, @@ -1516,7 +1521,7 @@ const _dutchSourceStrings = { 'Zoom resetten': 'Zoom zurücksetzen', 'Vorige slide': 'Vorherige Folie', 'Volgende slide': 'Nächste Folie', - 'Thema': 'Theme', + 'Thema': 'Design', 'Afbeelding kiezen': 'Bild auswählen', 'Afbeeldingen laden…': 'Bilder werden geladen…', 'Sluiten (Esc)': 'Schließen (Esc)', @@ -1556,15 +1561,20 @@ const _dutchSourceStrings = { 'P publiek · H legenda · S scherm · G overzicht · B/W zwart/wit · R tijd · Esc stop': 'P Publikum · H Legende · S Bildschirm · G Übersicht · B/W schwarz/weiß · R Zeit · Esc Stopp', 'Akkoord gaan': 'Akzeptieren', - 'Alle gegevens die u in OciDeck invoert, blijven op uw lokale systeem en worden niet naar externe servers gestuurd.': 'Alle Daten, die Sie in OciDeck eingeben, bleiben auf Ihrem lokalen System und werden nicht an externe Server gesendet.', - 'De app verzamelt geen persoonlijke gegevens, geen statistieken en geen gebruiksgegevens. Uw privacy is onze prioriteit.': 'Die App sammelt keine persönlichen Daten, Statistiken oder Nutzungsdaten. Ihre Privatsphäre ist unsere Priorität.', - 'Door op "Akkoord gaan" te klikken, accepteert u deze voorwaarden en gaat u akkoord met het gebruik van OciDeck.': 'Indem Sie auf "Akzeptieren" klicken, akzeptieren Sie diese Bedingungen und stimmen der Verwendung von OciDeck zu.', + 'Alle gegevens die u in OciDeck invoert, blijven op uw lokale systeem en worden niet naar externe servers gestuurd.': + 'Alle Daten, die Sie in OciDeck eingeben, bleiben auf Ihrem lokalen System und werden nicht an externe Server gesendet.', + 'De app verzamelt geen persoonlijke gegevens, geen statistieken en geen gebruiksgegevens. Uw privacy is onze prioriteit.': + 'Die App sammelt keine persönlichen Daten, Statistiken oder Nutzungsdaten. Ihre Privatsphäre ist unsere Priorität.', + 'Door op "Akkoord gaan" te klikken, accepteert u deze voorwaarden en gaat u akkoord met het gebruik van OciDeck.': + 'Indem Sie auf "Akzeptieren" klicken, akzeptieren Sie diese Bedingungen und stimmen der Verwendung von OciDeck zu.', 'Licentie (EUPL 1.2)': 'Lizenz (EUPL 1.2)', - 'OciDeck is een lokale desktop-applicatie. Uw presentaties en gegevens worden uitsluitend op uw computer opgeslagen.': 'OciDeck ist eine lokale Desktop-Anwendung. Ihre Präsentationen und Daten werden ausschließlich auf Ihrem Computer gespeichert.', + 'OciDeck is een lokale desktop-applicatie. Uw presentaties en gegevens worden uitsluitend op uw computer opgeslagen.': + 'OciDeck ist eine lokale Desktop-Anwendung. Ihre Präsentationen und Daten werden ausschließlich auf Ihrem Computer gespeichert.', 'Privacy en gebruik': 'Datenschutz und Verwendung', 'Toestemming ingetrokken': 'Zustimmung widerrufen', 'Toestemming intrekken': 'Zustimmung widerrufen', - 'U moet eerst de privacy- en gebruiksvoorwaarden accepteren voordat u OciDeck kunt gebruiken.': 'Sie müssen die Datenschutz- und Nutzungsbedingungen akzeptieren, bevor Sie OciDeck verwenden können.', + 'U moet eerst de privacy- en gebruiksvoorwaarden accepteren voordat u OciDeck kunt gebruiken.': + 'Sie müssen die Datenschutz- und Nutzungsbedingungen akzeptieren, bevor Sie OciDeck verwenden können.', 'Volledige licentie online': 'Vollständige Lizenz online', 'Welkom bij OciDeck': 'Willkommen bei OciDeck', }, @@ -1762,15 +1772,20 @@ const _dutchSourceStrings = { 'P publiek · H legenda · S scherm · G overzicht · B/W zwart/wit · R tijd · Esc stop': 'P public · H legende · S ecran · G vue d’ensemble · B/W noir/blanc · R temps · Esc arret', 'Akkoord gaan': 'Accepter', - 'Alle gegevens die u in OciDeck invoert, blijven op uw lokale systeem en worden niet naar externe servers gestuurd.': 'Toutes les données que vous saisissez dans OciDeck restent sur votre système local et ne sont pas envoyées à des serveurs externes.', - 'De app verzamelt geen persoonlijke gegevens, geen statistieken en geen gebruiksgegevens. Uw privacy is onze prioriteit.': 'L\'application ne collecte aucune donnée personnelle, statistique ou d\'utilisation. Votre confidentialité est notre priorité.', - 'Door op "Akkoord gaan" te klikken, accepteert u deze voorwaarden en gaat u akkoord met het gebruik van OciDeck.': 'En cliquant sur "Accepter", vous acceptez ces conditions et acceptez l\'utilisation d\'OciDeck.', + 'Alle gegevens die u in OciDeck invoert, blijven op uw lokale systeem en worden niet naar externe servers gestuurd.': + 'Toutes les données que vous saisissez dans OciDeck restent sur votre système local et ne sont pas envoyées à des serveurs externes.', + 'De app verzamelt geen persoonlijke gegevens, geen statistieken en geen gebruiksgegevens. Uw privacy is onze prioriteit.': + 'L\'application ne collecte aucune donnée personnelle, statistique ou d\'utilisation. Votre confidentialité est notre priorité.', + 'Door op "Akkoord gaan" te klikken, accepteert u deze voorwaarden en gaat u akkoord met het gebruik van OciDeck.': + 'En cliquant sur "Accepter", vous acceptez ces conditions et acceptez l\'utilisation d\'OciDeck.', 'Licentie (EUPL 1.2)': 'Licence (EUPL 1.2)', - 'OciDeck is een lokale desktop-applicatie. Uw presentaties en gegevens worden uitsluitend op uw computer opgeslagen.': 'OciDeck est une application de bureau locale. Vos présentations et vos données sont stockées exclusivement sur votre ordinateur.', + 'OciDeck is een lokale desktop-applicatie. Uw presentaties en gegevens worden uitsluitend op uw computer opgeslagen.': + 'OciDeck est une application de bureau locale. Vos présentations et vos données sont stockées exclusivement sur votre ordinateur.', 'Privacy en gebruik': 'Confidentialité et utilisation', 'Toestemming ingetrokken': 'Consentement révoqué', 'Toestemming intrekken': 'Révoquer le consentement', - 'U moet eerst de privacy- en gebruiksvoorwaarden accepteren voordat u OciDeck kunt gebruiken.': 'Vous devez accepter les conditions de confidentialité et d\'utilisation avant de pouvoir utiliser OciDeck.', + 'U moet eerst de privacy- en gebruiksvoorwaarden accepteren voordat u OciDeck kunt gebruiken.': + 'Vous devez accepter les conditions de confidentialité et d\'utilisation avant de pouvoir utiliser OciDeck.', 'Volledige licentie online': 'Licence complète en ligne', 'Welkom bij OciDeck': 'Bienvenue dans OciDeck', }, @@ -1969,15 +1984,20 @@ const _dutchSourceStrings = { 'P publiek · H legenda · S scherm · G overzicht · B/W zwart/wit · R tijd · Esc stop': 'P público · H leyenda · S pantalla · G vista general · B/W negro/blanco · R tiempo · Esc detener', 'Akkoord gaan': 'Aceptar', - 'Alle gegevens die u in OciDeck invoert, blijven op uw lokale systeem en worden niet naar externe servers gestuurd.': 'Todos los datos que ingresa en OciDeck permanecen en su sistema local y no se envían a servidores externos.', - 'De app verzamelt geen persoonlijke gegevens, geen statistieken en geen gebruiksgegevens. Uw privacy is onze prioriteit.': 'La aplicación no recopila datos personales, estadísticas ni datos de uso. Su privacidad es nuestra prioridad.', - 'Door op "Akkoord gaan" te klikken, accepteert u deze voorwaarden en gaat u akkoord met het gebruik van OciDeck.': 'Al hacer clic en "Aceptar", acepta estos términos y acepta el uso de OciDeck.', + 'Alle gegevens die u in OciDeck invoert, blijven op uw lokale systeem en worden niet naar externe servers gestuurd.': + 'Todos los datos que ingresa en OciDeck permanecen en su sistema local y no se envían a servidores externos.', + 'De app verzamelt geen persoonlijke gegevens, geen statistieken en geen gebruiksgegevens. Uw privacy is onze prioriteit.': + 'La aplicación no recopila datos personales, estadísticas ni datos de uso. Su privacidad es nuestra prioridad.', + 'Door op "Akkoord gaan" te klikken, accepteert u deze voorwaarden en gaat u akkoord met het gebruik van OciDeck.': + 'Al hacer clic en "Aceptar", acepta estos términos y acepta el uso de OciDeck.', 'Licentie (EUPL 1.2)': 'Licencia (EUPL 1.2)', - 'OciDeck is een lokale desktop-applicatie. Uw presentaties en gegevens worden uitsluitend op uw computer opgeslagen.': 'OciDeck es una aplicación de escritorio local. Sus presentaciones y datos se almacenan exclusivamente en su ordenador.', + 'OciDeck is een lokale desktop-applicatie. Uw presentaties en gegevens worden uitsluitend op uw computer opgeslagen.': + 'OciDeck es una aplicación de escritorio local. Sus presentaciones y datos se almacenan exclusivamente en su ordenador.', 'Privacy en gebruik': 'Privacidad y uso', 'Toestemming ingetrokken': 'Consentimiento revocado', 'Toestemming intrekken': 'Revocar consentimiento', - 'U moet eerst de privacy- en gebruiksvoorwaarden accepteren voordat u OciDeck kunt gebruiken.': 'Debe aceptar los términos de privacidad y uso antes de poder usar OciDeck.', + 'U moet eerst de privacy- en gebruiksvoorwaarden accepteren voordat u OciDeck kunt gebruiken.': + 'Debe aceptar los términos de privacidad y uso antes de poder usar OciDeck.', 'Volledige licentie online': 'Licencia completa en línea', 'Welkom bij OciDeck': 'Bienvenido a OciDeck', }, @@ -2176,15 +2196,20 @@ const _dutchSourceStrings = { 'P publiek · H legenda · S scherm · G overzicht · B/W zwart/wit · R tijd · Esc stop': 'P publyk · H leginda · S skerm · G oersjoch · B/W swart/wyt · R tiid · Esc stop', 'Akkoord gaan': 'Akseptyf gean', - 'Alle gegevens die u in OciDeck invoert, blijven op uw lokale systeem en worden niet naar externe servers gestuurd.': 'Alle gegevens dy\'t jo yn OciDeck ynfiere, bliuwe op jo lokale systeem en wurde net stjoerd nei eksterne servers.', - 'De app verzamelt geen persoonlijke gegevens, geen statistieken en geen gebruiksgegevens. Uw privacy is onze prioriteit.': 'De app sammelt gjin persoanlike gegevens, statistiken of gebrûksgegevens. Jo privacy is ús prioriteit.', - 'Door op "Akkoord gaan" te klikken, accepteert u deze voorwaarden en gaat u akkoord met het gebruik van OciDeck.': 'Troch op "Akseptyf gean" te klikken, akseptearje jo dizze betingsten en akseptyf jo it brûken fan OciDeck.', + 'Alle gegevens die u in OciDeck invoert, blijven op uw lokale systeem en worden niet naar externe servers gestuurd.': + 'Alle gegevens dy\'t jo yn OciDeck ynfiere, bliuwe op jo lokale systeem en wurde net stjoerd nei eksterne servers.', + 'De app verzamelt geen persoonlijke gegevens, geen statistieken en geen gebruiksgegevens. Uw privacy is onze prioriteit.': + 'De app sammelt gjin persoanlike gegevens, statistiken of gebrûksgegevens. Jo privacy is ús prioriteit.', + 'Door op "Akkoord gaan" te klikken, accepteert u deze voorwaarden en gaat u akkoord met het gebruik van OciDeck.': + 'Troch op "Akseptyf gean" te klikken, akseptearje jo dizze betingsten en akseptyf jo it brûken fan OciDeck.', 'Licentie (EUPL 1.2)': 'Lisintse (EUPL 1.2)', - 'OciDeck is een lokale desktop-applicatie. Uw presentaties en gegevens worden uitsluitend op uw computer opgeslagen.': 'OciDeck is in lokaal bureauprogram. Jo presintatoarjes en gegevens wurde allinnich op jo kompjûter opslein.', + 'OciDeck is een lokale desktop-applicatie. Uw presentaties en gegevens worden uitsluitend op uw computer opgeslagen.': + 'OciDeck is in lokaal bureauprogram. Jo presintatoarjes en gegevens wurde allinnich op jo kompjûter opslein.', 'Privacy en gebruik': 'Privacy en brûk', 'Toestemming ingetrokken': 'Tastimming yntrokken', 'Toestemming intrekken': 'Tastimming yntrekke', - 'U moet eerst de privacy- en gebruiksvoorwaarden accepteren voordat u OciDeck kunt gebruiken.': 'Jo moatte de privacy- en brûksbetingsten akseptyf gean foardat jo OciDeck brûke kûnne.', + 'U moet eerst de privacy- en gebruiksvoorwaarden accepteren voordat u OciDeck kunt gebruiken.': + 'Jo moatte de privacy- en brûksbetingsten akseptyf gean foardat jo OciDeck brûke kûnne.', 'Volledige licentie online': 'Folsleine lisintse online', 'Welkom bij OciDeck': 'Wolkom by OciDeck', }, @@ -2320,7 +2345,7 @@ const _dutchSourceStrings = { 'Knop': 'Boton', 'Profielnaam': 'Nòmber di perfil', 'Stijlprofiel': 'Perfil di estilo', - 'Lettertype': 'Font', + 'Lettertype': 'Tipo di lèter', 'Kleuren': 'Kolónan', 'Tekst': 'Teksto', 'Logo': 'Logo', @@ -2335,18 +2360,18 @@ const _dutchSourceStrings = { 'Links': 'Robes', 'Midden': 'Meimei', 'Rechts': 'Drechi', - 'Voorvertoning': 'Preview', - 'Preview': 'Preview', - 'Uitzoomen': 'Zoom out', - 'Inzoomen': 'Zoom in', - 'Zoom resetten': 'Reset zoom', + 'Voorvertoning': 'Bista previa', + 'Preview': 'Bista previa', + 'Uitzoomen': 'Zoom afó', + 'Inzoomen': 'Zoom paden', + 'Zoom resetten': 'Resetá zoom', 'Vorige slide': 'Slide anterior', 'Volgende slide': 'Siguiente slide', 'Thema': 'Tema', 'Afbeelding kiezen': 'Skohe imágen', 'Afbeeldingen laden…': 'Kargando imágennan…', 'Sluiten (Esc)': 'Sera (Esc)', - 'Raster': 'Grid', + 'Raster': 'Kuadrikula', 'Geen afbeeldingen gevonden': 'No a haña imágen', 'Gekopieerd': 'Kopiá', 'Afbeelding verwijderen?': 'Kita imágen?', @@ -2382,15 +2407,20 @@ const _dutchSourceStrings = { 'P publiek · H legenda · S scherm · G overzicht · B/W zwart/wit · R tijd · Esc stop': 'P públiko · H legenda · S pantalla · G resumen · B/W pretu/blanku · R tempu · Esc stop', 'Akkoord gaan': 'Akuerdo', - 'Alle gegevens die u in OciDeck invoert, blijven op uw lokale systeem en worden niet naar externe servers gestuurd.': 'Tur datos ku bo ta entrá den OciDeck ta keda riba bo sistema lokal i no ta mandá pa servidor eksterno.', - 'De app verzamelt geen persoonlijke gegevens, geen statistieken en geen gebruiksgegevens. Uw privacy is onze prioriteit.': 'E aplikashon no ta kolektá datos personal, estadístika o datos di uso. Bo privacidad ta nos prioridad.', - 'Door op "Akkoord gaan" te klikken, accepteert u deze voorwaarden en gaat u akkoord met het gebruik van OciDeck.': 'Dor ku bo ta klikí "Akuerdo", bo ta akseptá e termino aki i bo ta akuerdo ku e uso di OciDeck.', + 'Alle gegevens die u in OciDeck invoert, blijven op uw lokale systeem en worden niet naar externe servers gestuurd.': + 'Tur datos ku bo ta entrá den OciDeck ta keda riba bo sistema lokal i no ta mandá pa servidor eksterno.', + 'De app verzamelt geen persoonlijke gegevens, geen statistieken en geen gebruiksgegevens. Uw privacy is onze prioriteit.': + 'E aplikashon no ta kolektá datos personal, estadístika o datos di uso. Bo privacidad ta nos prioridad.', + 'Door op "Akkoord gaan" te klikken, accepteert u deze voorwaarden en gaat u akkoord met het gebruik van OciDeck.': + 'Dor ku bo ta klikí "Akuerdo", bo ta akseptá e termino aki i bo ta akuerdo ku e uso di OciDeck.', 'Licentie (EUPL 1.2)': 'Lisencia (EUPL 1.2)', - 'OciDeck is een lokale desktop-applicatie. Uw presentaties en gegevens worden uitsluitend op uw computer opgeslagen.': 'OciDeck ta un programa di buró lokal. Bo presentashon i datos ta almasená solamente riba bo komputer.', + 'OciDeck is een lokale desktop-applicatie. Uw presentaties en gegevens worden uitsluitend op uw computer opgeslagen.': + 'OciDeck ta un programa di buró lokal. Bo presentashon i datos ta almasená solamente riba bo komputer.', 'Privacy en gebruik': 'Privacidad i Uso', 'Toestemming ingetrokken': 'Aprobashon retirá', 'Toestemming intrekken': 'Retirá Aprobashon', - 'U moet eerst de privacy- en gebruiksvoorwaarden accepteren voordat u OciDeck kunt gebruiken.': 'Bo mester akseptá e termino di privacidad i uso antes bo por usa OciDeck.', + 'U moet eerst de privacy- en gebruiksvoorwaarden accepteren voordat u OciDeck kunt gebruiken.': + 'Bo mester akseptá e termino di privacidad i uso antes bo por usa OciDeck.', 'Volledige licentie online': 'Lisencia kompleto online', 'Welkom bij OciDeck': 'Bienvenido na OciDeck', }, @@ -2627,203 +2657,208 @@ const _dutchSourceStringAdditions = { 'Aflopend sorteren': 'Ordina in modo decrescente', 'Bij een cirkel worden maximaal de eerste twee reeksen getoond; de labels vormen de segmenten.': 'I grafici a torta mostrano al massimo le prime due serie; le etichette formano i segmenti.', - '# Slide\n\nInhoud hier...': '# Slide\n\nContent here...', - '1 slide geïmporteerd.': '1 slide imported.', - '1 slide kopiëren naar…': 'Copy 1 slide to…', - '1 slide overgeslagen': '1 slide skipped', + '# Slide\n\nInhoud hier...': '# Diapositiva\n\nContenuto qui...', + '1 slide geïmporteerd.': '1 diapositiva importata.', + '1 slide kopiëren naar…': 'Copia 1 diapositiva in…', + '1 slide overgeslagen': '1 diapositiva saltata', 'Accent / bullets': 'Accent / bullets', - 'Achtergrond slides': 'Slide background', + 'Achtergrond slides': 'Sfondo diapositive', 'Afbeelding': 'Immagine', - 'Afbeelding gekopieerd naar klembord.': 'Image copied to clipboard.', - 'Afbeelding plakken': 'Paste image', - 'Afbeelding plakken uit klembord': 'Paste image from clipboard', + 'Afbeelding gekopieerd naar klembord.': 'Immagine copiata negli appunti.', + 'Afbeelding plakken': 'Incolla immagine', + 'Afbeelding plakken uit klembord': 'Incolla immagine dagli appunti', 'Afbeeldingen → nieuwe slides · .md / .ocideck → openen': - 'Images → new slides · .md / .ocideck → open', - 'Afsluiten (Escape)': 'Exit (Escape)', + 'Immagini → nuove diapositive · .md / .ocideck → apri', + 'Afsluiten (Escape)': 'Esci (Esc)', 'Alle slides zijn overgeslagen — niets om te exporteren.': - 'All slides are skipped, so there is nothing to export.', + 'Tutte le diapositive sono state saltate: non c\'è nulla da esportare.', 'Alle slides zijn overgeslagen — niets om te tonen.': - 'All slides are skipped, so there is nothing to show.', - 'Alles tonen': 'Show all', - 'Audio verwijderen': 'Remove audio', - 'Automatisch doorgaan na': 'Advance automatically after', - 'Bijv. Kwartaalupdate Q4': 'E.g. Q4 update', + 'Tutte le diapositive sono state saltate: non c\'è nulla da mostrare.', + 'Alles tonen': 'Mostra tutto', + 'Audio verwijderen': 'Rimuovi audio', + 'Automatisch doorgaan na': 'Avanza automaticamente dopo', + 'Bijv. Kwartaalupdate Q4': 'Es. Aggiornamento Q4', 'Bullet': 'Punto elenco', 'Caption / bronvermelding (bijv. © Naam Fotograaf)': - 'Caption / credit (e.g. © Photographer Name)', + 'Didascalia / crediti (es. © Nome del fotografo)', 'Coverflow': 'Coverflow', 'De afbeelding wordt schermvullend als achtergrond getoond met verminderde opaciteit zodat de tekst leesbaar blijft.': - 'The image is shown fullscreen as a background with reduced opacity so the text remains readable.', + 'L\'immagine viene mostrata a schermo intero come sfondo con opacità ridotta affinché il testo resti leggibile.', 'De snelle bruine vos springt over de luie hond.': - 'The quick brown fox jumps over the lazy dog.', + 'Ma la volpe, col suo balzo, ha raggiunto il quieto Fido.', 'Deze gegevens worden in de markdown opgeslagen en zijn doorzoekbaar bij het openen.': - 'These details are stored in the Markdown and searchable when opening.', + 'Questi dati vengono salvati nel Markdown e sono ricercabili all\'apertura.', 'Deze presentatie heeft niet-opgeslagen wijzigingen. Sla de presentatie op voordat het tabblad sluit.': - 'This presentation has unsaved changes. Save it before closing the tab.', + 'Questa presentazione ha modifiche non salvate. Salvala prima di chiudere la scheda.', 'Deze slide kan geen afbeelding ontvangen. Kies eerst een afbeeldingsslide.': - 'This slide cannot receive an image. Choose an image slide first.', - 'Eerste': 'First', - 'Einde van de presentatie': 'End of presentation', + 'Questa diapositiva non può ricevere un\'immagine. Scegli prima una diapositiva immagine.', + 'Eerste': 'Prima', + 'Einde van de presentatie': 'Fine della presentazione', 'Er is een presentatie met niet-opgeslagen wijzigingen gevonden van een vorige sessie:': - 'A presentation with unsaved changes was found from a previous session:', - 'Er zijn': 'There are', + 'È stata trovata una presentazione con modifiche non salvate di una sessione precedente:', + 'Er zijn': 'Ci sono', 'Er zijn presentaties met niet-opgeslagen wijzigingen. Sla ze op voordat de app sluit.': - 'There are presentations with unsaved changes. Save them before closing the app.', - 'Export mislukt:': 'Export failed:', - 'Footer tonen op deze slide': 'Show footer on this slide', + 'Ci sono presentazioni con modifiche non salvate. Salvale prima di chiudere l\'app.', + 'Export mislukt:': 'Esportazione non riuscita:', + 'Footer tonen op deze slide': + 'Mostra il piè di pagina su questa diapositiva', 'Gebruik "Bladeren" om afbeeldingen van elke locatie te kiezen.': - 'Use “Browse” to choose images from any location.', + 'Usa "Sfoglia" per scegliere immagini da qualsiasi posizione.', 'Geen afbeelding op het klembord gevonden.': - 'No image found on the clipboard.', + 'Nessuna immagine trovata negli appunti.', 'Geen ander deck open. Open eerst een ander tabblad.': - 'No other deck is open. Open another tab first.', + 'Nessun altro deck aperto. Apri prima un\'altra scheda.', 'Geen andere presentaties (.md) in deze map gevonden.': - 'No other presentations (.md) found in this folder.', - 'Geen notities voor deze slide.': 'No notes for this slide.', + 'Nessun\'altra presentazione (.md) trovata in questa cartella.', + 'Geen notities voor deze slide.': 'Nessuna nota per questa diapositiva.', 'Geen presentaties (.md) in deze map gevonden.': - 'No presentations (.md) found in this folder.', - 'Geen presentaties gevonden voor': 'No presentations found for', - 'Geen resultaten': 'No results', - 'Geen resultaten voor': 'No results for', - 'Geen slides gevonden voor': 'No slides found for', - 'Geen slides met': 'No slides with', - 'Geselecteerd': 'Selected', + 'Nessuna presentazione (.md) trovata in questa cartella.', + 'Geen presentaties gevonden voor': 'Nessuna presentazione trovata per', + 'Geen resultaten': 'Nessun risultato', + 'Geen resultaten voor': 'Nessun risultato per', + 'Geen slides gevonden voor': 'Nessuna diapositiva trovata per', + 'Geen slides met': 'Nessuna diapositiva con', + 'Geselecteerd': 'Selezionata', 'HTML opent in elke browser zonder internet en rendert codeblokken, wiskunde en mermaid-diagrammen.': 'L’HTML si apre in qualsiasi browser senza internet e renderizza blocchi di codice, matematica e diagrammi Mermaid.', 'Het bestand wordt permanent van schijf verwijderd. Deze actie kan niet ongedaan worden gemaakt.': - 'The file will be permanently deleted from disk. This action cannot be undone.', - 'Ingezoomd': 'Zoomed in', + 'Il file verrà eliminato definitivamente dal disco. Questa azione non può essere annullata.', + 'Ingezoomd': 'Ingrandita', 'Inzoomen (minder van de foto zichtbaar)': - 'Zoom in (less of the photo visible)', - 'Kies een afbeelding': 'Choose an image', + 'Ingrandisci (meno foto visibile)', + 'Kies een afbeelding': 'Scegli un\'immagine', 'Kies een map met presentaties om te beginnen.': - 'Choose a folder with presentations to begin.', - 'Kon dit pakket niet importeren.': 'Could not import this package.', - 'Kon niet van scherm wisselen.': 'Could not switch screens.', + 'Scegli una cartella con presentazioni per iniziare.', + 'Kon dit pakket niet importeren.': + 'Impossibile importare questo pacchetto.', + 'Kon niet van scherm wisselen.': 'Impossibile cambiare schermo.', 'Kon van deze URL geen presentatie ophalen.': - 'Could not fetch a presentation from this URL.', - 'Kopieer afbeelding naar klembord': 'Copy image to clipboard', - 'Kopiëren mislukt.': 'Copy failed.', - 'Kopiëren naar ander deck': 'Copy to another deck', - 'Kopiëren naar klembord mislukt.': 'Copying to clipboard failed.', - 'Koprij verwijderen': 'Remove header row', - 'Laat los om toe te voegen': 'Release to add', + 'Impossibile recuperare una presentazione da questo URL.', + 'Kopieer afbeelding naar klembord': 'Copia immagine negli appunti', + 'Kopiëren mislukt.': 'Copia non riuscita.', + 'Kopiëren naar ander deck': 'Copia in un altro deck', + 'Kopiëren naar klembord mislukt.': 'Copia negli appunti non riuscita.', + 'Koprij verwijderen': 'Rimuovi riga di intestazione', + 'Laat los om toe te voegen': 'Rilascia per aggiungere', 'Laatste slide': 'Slide finale', 'Let op: deze afbeelding wordt nog gebruikt in': - 'Warning: this image is still used in', - 'Logo kiezen': 'Choose logo', + 'Attenzione: questa immagine è ancora usata in', + 'Logo kiezen': 'Scegli logo', 'Logo px': 'Logo px', - 'Logo tonen op deze slide': 'Show logo on this slide', - 'Map met presentaties kiezen': 'Choose presentation folder', - 'Map voor exports': 'Export folder', + 'Logo tonen op deze slide': 'Mostra il logo su questa diapositiva', + 'Map met presentaties kiezen': 'Scegli la cartella delle presentazioni', + 'Map voor exports': 'Cartella per le esportazioni', 'Markdown kon niet worden verwerkt. Controleer de syntax.': - 'Markdown could not be processed. Check the syntax.', + 'Impossibile elaborare il Markdown. Controlla la sintassi.', 'Markdown modus — bewerk de volledige presentatie als Marp Markdown': - 'Markdown mode — edit the full presentation as Marp Markdown', + 'Modalità Markdown: modifica l\'intera presentazione come Marp Markdown', 'Markdown voor laatste slide': 'Markdown per la slide finale', - 'Naam van het stijlprofiel': 'Name of the style profile', - 'Niet-opgeslagen werk herstellen?': 'Restore unsaved work?', - 'Niet-opgeslagen wijzigingen': 'Unsaved changes', - 'Niets vervangen': 'Nothing replaced', - 'Nieuw profiel': 'New profile', + 'Naam van het stijlprofiel': 'Nome del profilo di stile', + 'Niet-opgeslagen werk herstellen?': 'Ripristinare il lavoro non salvato?', + 'Niet-opgeslagen wijzigingen': 'Modifiche non salvate', + 'Niets vervangen': 'Nulla sostituito', + 'Nieuw profiel': 'Nuovo profilo', 'Open eerst een presentatie om afbeeldingen toe te voegen.': - 'Open a presentation before adding images.', - 'Overslaan bij presenteren/exporteren': 'Skip when presenting/exporting', + 'Apri prima una presentazione per aggiungere immagini.', + 'Overslaan bij presenteren/exporteren': + 'Salta durante presentazione/esportazione', 'PREVIEW': 'ANTEPRIMA', - 'Paginanummers tonen (rechtsonder)': 'Show page numbers (bottom right)', - 'Pakket geëxporteerd naar:': 'Package exported to:', + 'Paginanummers tonen (rechtsonder)': + 'Mostra i numeri di pagina (in basso a destra)', + 'Pakket geëxporteerd naar:': 'Pacchetto esportato in:', 'Pas je zoekterm aan of voeg een beschrijving toe.': - 'Adjust your search term or add a description.', + 'Modifica il termine di ricerca o aggiungi una descrizione.', 'Plak de link naar een .ocideck-pakket of een Marp-markdownbestand.': - 'Paste the link to an .ocideck package or a Marp Markdown file.', - 'Preview inklappen': 'Collapse preview', - 'Preview uitklappen': 'Expand preview', - 'Profiel verwijderen': 'Delete profile', - 'Rij verwijderen': 'Remove row', + 'Incolla il link a un pacchetto .ocideck o a un file Markdown Marp.', + 'Preview inklappen': 'Comprimi anteprima', + 'Preview uitklappen': 'Espandi anteprima', + 'Profiel verwijderen': 'Elimina profilo', + 'Rij verwijderen': 'Rimuovi riga', 'SLIDES': 'SLIDES', - 'Sectieachtergrond': 'Section background', - 'Selecteer een\nafbeelding': 'Select an\nimage', - 'Selectie opheffen': 'Clear selection', + 'Sectieachtergrond': 'Sfondo della sezione', + 'Selecteer een\nafbeelding': 'Seleziona\nun\'immagine', + 'Selectie opheffen': 'Annulla selezione', 'Sleep om de slide-preview breder of smaller te maken': - 'Drag to make the slide preview wider or narrower', + 'Trascina per allargare o restringere l\'anteprima della diapositiva', 'Slide': 'Slide', - 'Slide gekopieerd naar klembord.': 'Slide copied to clipboard.', - 'Slide plakken': 'Paste slide', - 'Slide renderen…': 'Rendering slide…', - 'Slide toevoegen': 'Add slide', + 'Slide gekopieerd naar klembord.': 'Diapositiva copiata negli appunti.', + 'Slide plakken': 'Incolla diapositiva', + 'Slide renderen…': 'Rendering diapositiva…', + 'Slide toevoegen': 'Aggiungi diapositiva', 'Slides gerenderd.': 'Slide renderizzate.', - 'Sluiten (G of Esc)': 'Close (G or Esc)', - 'Sprekersnotities...': 'Speaker notes...', + 'Sluiten (G of Esc)': 'Chiudi (G o Esc)', + 'Sprekersnotities...': 'Note del relatore...', 'Standaard laatste slide gebruiken': 'Usa slide finale predefinita', - 'Standaard map voor presentaties': 'Default presentation folder', - 'Standaardprofiel laden': 'Load default profile', + 'Standaard map voor presentaties': + 'Cartella predefinita per le presentazioni', + 'Standaardprofiel laden': 'Carica profilo predefinito', 'TLP-classificatie (Traffic Light Protocol)': - 'TLP classification (Traffic Light Protocol)', - 'Tabel koptekst': 'Table header text', - 'Tabeltekst': 'Table text', - 'Terug naar standaardstijl': 'Back to default style', + 'Classificazione TLP (Traffic Light Protocol)', + 'Tabel koptekst': 'Testo intestazione tabella', + 'Tabeltekst': 'Testo tabella', + 'Terug naar standaardstijl': 'Torna allo stile predefinito', 'Terugzetten (volledige afbeelding zichtbaar)': - 'Reset (full image visible)', - 'Tijd resetten (R)': 'Reset timer (R)', + 'Ripristina (immagine intera visibile)', + 'Tijd resetten (R)': 'Reimposta tempo (R)', 'Tip: druk op Enter binnen een cel voor een nieuwe regel.': - 'Tip: press Enter inside a cell for a new line.', - 'Titelachtergrond': 'Title background', - 'Titeltekst': 'Title text', - 'Toepassen': 'Apply', + 'Suggerimento: premi Invio all\'interno di una cella per andare a capo.', + 'Titelachtergrond': 'Sfondo del titolo', + 'Titeltekst': 'Testo del titolo', + 'Toepassen': 'Applica', 'Tokens: {page}, {total}, {date}, {title}. Footer verschijnt op alle slides behalve titel- en sectieslides, tenzij je hem per slide uitzet.': - 'Tokens: {page}, {total}, {date}, {title}. The footer appears on all slides except title and section slides, unless you disable it per slide.', + 'Token: {page}, {total}, {date}, {title}. Il piè di pagina appare su tutte le diapositive tranne quelle titolo e sezione, a meno che non lo disattivi per singola diapositiva.', 'Typ zoektermen om slides uit al je presentaties te vinden.': - 'Type search terms to find slides across your presentations.', - 'Uitgezoomd': 'Zoomed out', + 'Digita i termini di ricerca per trovare diapositive in tutte le tue presentazioni.', + 'Uitgezoomd': 'Rimpicciolita', 'Uitzoomen (meer van de foto zichtbaar)': - 'Zoom out (more of the photo visible)', - 'Verwijder afbeelding': 'Remove image', - 'Verwijder logo': 'Remove logo', + 'Rimpicciolisci (più foto visibile)', + 'Verwijder afbeelding': 'Rimuovi immagine', + 'Verwijder logo': 'Rimuovi logo', 'Verwijderen maakt die slides leeg. Dit kan niet ongedaan worden gemaakt.': - 'Deleting will clear those slides. This cannot be undone.', - 'Volledig zichtbaar (100%)': 'Fully visible (100%)', - 'Vul een titel in': 'Enter a title', - 'Weer tonen': 'Show again', + 'L\'eliminazione svuota quelle diapositive. Questa operazione non può essere annullata.', + 'Volledig zichtbaar (100%)': 'Completamente visibile (100%)', + 'Vul een titel in': 'Inserisci un titolo', + 'Weer tonen': 'Mostra di nuovo', 'Weer tonen bij presenteren/exporteren': - 'Show again when presenting/exporting', + 'Mostra di nuovo durante presentazione/esportazione', 'Wordt automatisch toegevoegd bij presenteren en exporteren.': 'Aggiunta automaticamente durante la presentazione e l’esportazione.', - 'Zoek in slides…': 'Search in slides…', + 'Zoek in slides…': 'Cerca nelle diapositive…', 'Zoek op bestandsnaam, titel of tekst in de slides…': - 'Search by file name, title or slide text…', - 'Zoek op naam of beschrijving…': 'Search by name or description…', + 'Cerca per nome file, titolo o testo nelle diapositive…', + 'Zoek op naam of beschrijving…': 'Cerca per nome o descrizione…', 'Zoek op presentatie, titel of tekst…': - 'Search by presentation, title or text…', + 'Cerca per presentazione, titolo o testo…', 'Zoek slides op tekst, titel, onderschrift, pad…': - 'Search slides by text, title, caption, path…', + 'Cerca diapositive per testo, titolo, didascalia, percorso…', 'bijv. Vertrouwelijk · {title} · {date}': - 'e.g. Confidential · {title} · {date}', + 'es. Riservato · {title} · {date}', 'gerenderd.': 'renderizzata.', - 'geselecteerd': 'selected', - 'meer treffer(s)': 'more match(es)', - 'paginering aan': 'pagination on', + 'geselecteerd': 'selezionata', + 'meer treffer(s)': 'altri risultati', + 'paginering aan': 'impaginazione attiva', 'pijltjes + Enter of klik om te springen': - 'arrows + Enter or click to jump', + 'frecce + Invio o clic per saltare', 'presentaties met niet-opgeslagen wijzigingen gevonden van een vorige sessie:': - 'presentations with unsaved changes from a previous session:', + 'presentazioni con modifiche non salvate trovate da una sessione precedente:', 'renderen…': 'renderizzazione…', - 'resultaat': 'result', - 'resultaten': 'results', + 'resultaat': 'risultato', + 'resultaten': 'risultati', 'slide': 'slide', - 'slide(s) gekopieerd naar': 'slide(s) copied to', - 'slides geïmporteerd.': 'slides imported.', - 'slides kopiëren naar…': 'slides to copy to…', - 'slides overgeslagen': 'slides skipped', - 'toegevoegd': 'added', - 'treffer(s)': 'match(es)', - 'treffers — verfijn je zoekopdracht': 'matches, refine your search', - 'van de foto zichtbaar': 'of the photo visible', - 'vervangen': 'replaced', - 'verwijderen': 'remove', - 'volledig deck': 'full deck', + 'slide(s) gekopieerd naar': 'diapositiva/e copiata/e in', + 'slides geïmporteerd.': 'diapositive importate.', + 'slides kopiëren naar…': 'diapositive da copiare in…', + 'slides overgeslagen': 'diapositive saltate', + 'toegevoegd': 'aggiunta', + 'treffer(s)': 'risultato/i', + 'treffers — verfijn je zoekopdracht': 'risultati: affina la ricerca', + 'van de foto zichtbaar': 'della foto visibile', + 'vervangen': 'sostituito', + 'verwijderen': 'rimuovi', + 'volledig deck': 'deck completo', 'voorbereiden…': 'preparazione…', '↑↓←→ navigeren · Enter kiezen · Dubbelklik selecteert': - '↑↓←→ navigate · Enter chooses · Double-click selects', + '↑↓←→ naviga · Invio sceglie · Doppio clic seleziona', 'Duplicaten opruimen': 'Rimuovi duplicati', 'Zoek byte-identieke afbeeldingen (md5), voeg tags en opmerkingen samen en verwijder de kopieën': 'Trova immagini identiche byte per byte (md5), unisci tag e note ed elimina le copie', @@ -2838,8 +2873,7 @@ const _dutchSourceStringAdditions = { 'niet geopend': 'non aperto', '1 dubbele afbeelding verwijderd.': '1 immagine duplicata eliminata.', 'dubbele afbeeldingen verwijderd.': 'immagini duplicate eliminate.', - 'Alleen afbeeldingen zonder tags tonen': - 'Mostra solo immagini senza tag', + 'Alleen afbeeldingen zonder tags tonen': 'Mostra solo immagini senza tag', 'Alle afbeeldingen hebben tags.': 'Tutte le immagini hanno tag.', 'Zet het filter uit om alles weer te zien.': 'Disattiva il filtro per rivedere tutto.', @@ -2916,7 +2950,7 @@ const _dutchSourceStringAdditions = { 'Kop (optioneel)': 'Überschrift (optional)', 'Subkop (optioneel)': 'Unterüberschrift (optional)', 'Subkop': 'Unterüberschrift', - 'Systeem (monospace)': 'System (monospace)', + 'Systeem (monospace)': 'System (Monospace)', 'Kleur van reeks': 'Reihenfarbe', 'Kleur van rij': 'Zeilenfarbe', 'Hexkleur': 'Hex-Farbe', @@ -2925,204 +2959,210 @@ const _dutchSourceStringAdditions = { 'Aflopend sorteren': 'Absteigend sortieren', 'Bij een cirkel worden maximaal de eerste twee reeksen getoond; de labels vormen de segmenten.': 'Kreisdiagramme zeigen höchstens die ersten zwei Reihen; die Beschriftungen bilden die Segmente.', - '# Slide\n\nInhoud hier...': '# Slide\n\nContent here...', - '1 slide geïmporteerd.': '1 slide imported.', - '1 slide kopiëren naar…': 'Copy 1 slide to…', - '1 slide overgeslagen': '1 slide skipped', + '# Slide\n\nInhoud hier...': '# Folie\n\nInhalt hier...', + '1 slide geïmporteerd.': '1 Folie importiert.', + '1 slide kopiëren naar…': '1 Folie kopieren nach…', + '1 slide overgeslagen': '1 Folie übersprungen', 'Accent / bullets': 'Accent / bullets', - 'Achtergrond slides': 'Slide background', + 'Achtergrond slides': 'Folienhintergrund', 'Afbeelding': 'Bild', - 'Afbeelding gekopieerd naar klembord.': 'Image copied to clipboard.', - 'Afbeelding plakken': 'Paste image', - 'Afbeelding plakken uit klembord': 'Paste image from clipboard', + 'Afbeelding gekopieerd naar klembord.': + 'Bild in die Zwischenablage kopiert.', + 'Afbeelding plakken': 'Bild einfügen', + 'Afbeelding plakken uit klembord': 'Bild aus der Zwischenablage einfügen', 'Afbeeldingen → nieuwe slides · .md / .ocideck → openen': - 'Images → new slides · .md / .ocideck → open', - 'Afsluiten (Escape)': 'Exit (Escape)', + 'Bilder → neue Folien · .md / .ocideck → öffnen', + 'Afsluiten (Escape)': 'Beenden (Escape)', 'Alle slides zijn overgeslagen — niets om te exporteren.': - 'All slides are skipped, so there is nothing to export.', + 'Alle Folien sind übersprungen — nichts zu exportieren.', 'Alle slides zijn overgeslagen — niets om te tonen.': - 'All slides are skipped, so there is nothing to show.', - 'Alles tonen': 'Show all', - 'Audio verwijderen': 'Remove audio', - 'Automatisch doorgaan na': 'Advance automatically after', - 'Bijv. Kwartaalupdate Q4': 'E.g. Q4 update', + 'Alle Folien sind übersprungen — nichts anzuzeigen.', + 'Alles tonen': 'Alle anzeigen', + 'Audio verwijderen': 'Audio entfernen', + 'Automatisch doorgaan na': 'Automatisch weiter nach', + 'Bijv. Kwartaalupdate Q4': 'Z. B. Quartalsupdate Q4', 'Bullet': 'Stichpunkt', 'Caption / bronvermelding (bijv. © Naam Fotograaf)': - 'Caption / credit (e.g. © Photographer Name)', + 'Bildunterschrift / Quellenangabe (z. B. © Name des Fotografen)', 'Coverflow': 'Coverflow', 'De afbeelding wordt schermvullend als achtergrond getoond met verminderde opaciteit zodat de tekst leesbaar blijft.': - 'The image is shown fullscreen as a background with reduced opacity so the text remains readable.', + 'Das Bild wird bildschirmfüllend als Hintergrund mit reduzierter Deckkraft angezeigt, damit der Text lesbar bleibt.', 'De snelle bruine vos springt over de luie hond.': - 'The quick brown fox jumps over the lazy dog.', + 'Der schnelle braune Fuchs springt über den faulen Hund.', 'Deze gegevens worden in de markdown opgeslagen en zijn doorzoekbaar bij het openen.': - 'These details are stored in the Markdown and searchable when opening.', + 'Diese Daten werden im Markdown gespeichert und sind beim Öffnen durchsuchbar.', 'Deze presentatie heeft niet-opgeslagen wijzigingen. Sla de presentatie op voordat het tabblad sluit.': - 'This presentation has unsaved changes. Save it before closing the tab.', + 'Diese Präsentation hat nicht gespeicherte Änderungen. Speichern Sie sie, bevor der Tab geschlossen wird.', 'Deze slide kan geen afbeelding ontvangen. Kies eerst een afbeeldingsslide.': - 'This slide cannot receive an image. Choose an image slide first.', - 'Eerste': 'First', - 'Einde van de presentatie': 'End of presentation', + 'Diese Folie kann kein Bild aufnehmen. Wählen Sie zuerst eine Bildfolie.', + 'Eerste': 'Erste', + 'Einde van de presentatie': 'Ende der Präsentation', 'Er is een presentatie met niet-opgeslagen wijzigingen gevonden van een vorige sessie:': - 'A presentation with unsaved changes was found from a previous session:', - 'Er zijn': 'There are', + 'Es wurde eine Präsentation mit nicht gespeicherten Änderungen aus einer früheren Sitzung gefunden:', + 'Er zijn': 'Es gibt', 'Er zijn presentaties met niet-opgeslagen wijzigingen. Sla ze op voordat de app sluit.': - 'There are presentations with unsaved changes. Save them before closing the app.', - 'Export mislukt:': 'Export failed:', - 'Footer tonen op deze slide': 'Show footer on this slide', + 'Es gibt Präsentationen mit nicht gespeicherten Änderungen. Speichern Sie sie, bevor die App geschlossen wird.', + 'Export mislukt:': 'Export fehlgeschlagen:', + 'Footer tonen op deze slide': 'Fußzeile auf dieser Folie anzeigen', 'Gebruik "Bladeren" om afbeeldingen van elke locatie te kiezen.': - 'Use “Browse” to choose images from any location.', + 'Verwenden Sie "Durchsuchen", um Bilder von einem beliebigen Ort auszuwählen.', 'Geen afbeelding op het klembord gevonden.': - 'No image found on the clipboard.', + 'Kein Bild in der Zwischenablage gefunden.', 'Geen ander deck open. Open eerst een ander tabblad.': - 'No other deck is open. Open another tab first.', + 'Kein anderes Deck geöffnet. Öffnen Sie zuerst einen anderen Tab.', 'Geen andere presentaties (.md) in deze map gevonden.': - 'No other presentations (.md) found in this folder.', - 'Geen notities voor deze slide.': 'No notes for this slide.', + 'Keine anderen Präsentationen (.md) in diesem Ordner gefunden.', + 'Geen notities voor deze slide.': 'Keine Notizen für diese Folie.', 'Geen presentaties (.md) in deze map gevonden.': - 'No presentations (.md) found in this folder.', - 'Geen presentaties gevonden voor': 'No presentations found for', - 'Geen resultaten': 'No results', - 'Geen resultaten voor': 'No results for', - 'Geen slides gevonden voor': 'No slides found for', - 'Geen slides met': 'No slides with', - 'Geselecteerd': 'Selected', + 'Keine Präsentationen (.md) in diesem Ordner gefunden.', + 'Geen presentaties gevonden voor': 'Keine Präsentationen gefunden für', + 'Geen resultaten': 'Keine Ergebnisse', + 'Geen resultaten voor': 'Keine Ergebnisse für', + 'Geen slides gevonden voor': 'Keine Folien gefunden für', + 'Geen slides met': 'Keine Folien mit', + 'Geselecteerd': 'Ausgewählt', 'HTML opent in elke browser zonder internet en rendert codeblokken, wiskunde en mermaid-diagrammen.': 'HTML öffnet sich in jedem Browser ohne Internet und rendert Codeblöcke, Mathematik und Mermaid-Diagramme.', 'Het bestand wordt permanent van schijf verwijderd. Deze actie kan niet ongedaan worden gemaakt.': - 'The file will be permanently deleted from disk. This action cannot be undone.', - 'Ingezoomd': 'Zoomed in', + 'Die Datei wird dauerhaft von der Festplatte gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.', + 'Ingezoomd': 'Vergrößert', 'Inzoomen (minder van de foto zichtbaar)': - 'Zoom in (less of the photo visible)', - 'Kies een afbeelding': 'Choose an image', + 'Vergrößern (weniger vom Foto sichtbar)', + 'Kies een afbeelding': 'Bild auswählen', 'Kies een map met presentaties om te beginnen.': - 'Choose a folder with presentations to begin.', - 'Kon dit pakket niet importeren.': 'Could not import this package.', - 'Kon niet van scherm wisselen.': 'Could not switch screens.', + 'Wählen Sie einen Ordner mit Präsentationen, um zu beginnen.', + 'Kon dit pakket niet importeren.': + 'Dieses Paket konnte nicht importiert werden.', + 'Kon niet van scherm wisselen.': + 'Bildschirm konnte nicht gewechselt werden.', 'Kon van deze URL geen presentatie ophalen.': - 'Could not fetch a presentation from this URL.', - 'Kopieer afbeelding naar klembord': 'Copy image to clipboard', - 'Kopiëren mislukt.': 'Copy failed.', - 'Kopiëren naar ander deck': 'Copy to another deck', - 'Kopiëren naar klembord mislukt.': 'Copying to clipboard failed.', - 'Koprij verwijderen': 'Remove header row', - 'Laat los om toe te voegen': 'Release to add', + 'Von dieser URL konnte keine Präsentation abgerufen werden.', + 'Kopieer afbeelding naar klembord': 'Bild in die Zwischenablage kopieren', + 'Kopiëren mislukt.': 'Kopieren fehlgeschlagen.', + 'Kopiëren naar ander deck': 'In anderes Deck kopieren', + 'Kopiëren naar klembord mislukt.': + 'Kopieren in die Zwischenablage fehlgeschlagen.', + 'Koprij verwijderen': 'Kopfzeile entfernen', + 'Laat los om toe te voegen': 'Loslassen zum Hinzufügen', 'Laatste slide': 'Letzte Folie', 'Let op: deze afbeelding wordt nog gebruikt in': - 'Warning: this image is still used in', - 'Logo kiezen': 'Choose logo', + 'Achtung: Dieses Bild wird noch verwendet in', + 'Logo kiezen': 'Logo auswählen', 'Logo px': 'Logo px', - 'Logo tonen op deze slide': 'Show logo on this slide', - 'Map met presentaties kiezen': 'Choose presentation folder', - 'Map voor exports': 'Export folder', + 'Logo tonen op deze slide': 'Logo auf dieser Folie anzeigen', + 'Map met presentaties kiezen': 'Präsentationsordner auswählen', + 'Map voor exports': 'Ordner für Exporte', 'Markdown kon niet worden verwerkt. Controleer de syntax.': - 'Markdown could not be processed. Check the syntax.', + 'Markdown konnte nicht verarbeitet werden. Überprüfen Sie die Syntax.', 'Markdown modus — bewerk de volledige presentatie als Marp Markdown': - 'Markdown mode — edit the full presentation as Marp Markdown', + 'Markdown-Modus — bearbeiten Sie die gesamte Präsentation als Marp-Markdown', 'Markdown voor laatste slide': 'Markdown für die letzte Folie', - 'Naam van het stijlprofiel': 'Name of the style profile', - 'Niet-opgeslagen werk herstellen?': 'Restore unsaved work?', - 'Niet-opgeslagen wijzigingen': 'Unsaved changes', - 'Niets vervangen': 'Nothing replaced', - 'Nieuw profiel': 'New profile', + 'Naam van het stijlprofiel': 'Name des Stilprofils', + 'Niet-opgeslagen werk herstellen?': + 'Nicht gespeicherte Arbeit wiederherstellen?', + 'Niet-opgeslagen wijzigingen': 'Nicht gespeicherte Änderungen', + 'Niets vervangen': 'Nichts ersetzt', + 'Nieuw profiel': 'Neues Profil', 'Open eerst een presentatie om afbeeldingen toe te voegen.': - 'Open a presentation before adding images.', - 'Overslaan bij presenteren/exporteren': 'Skip when presenting/exporting', + 'Öffnen Sie zuerst eine Präsentation, um Bilder hinzuzufügen.', + 'Overslaan bij presenteren/exporteren': + 'Beim Präsentieren/Exportieren überspringen', 'PREVIEW': 'VORSCHAU', - 'Paginanummers tonen (rechtsonder)': 'Show page numbers (bottom right)', - 'Pakket geëxporteerd naar:': 'Package exported to:', + 'Paginanummers tonen (rechtsonder)': 'Seitenzahlen anzeigen (unten rechts)', + 'Pakket geëxporteerd naar:': 'Paket exportiert nach:', 'Pas je zoekterm aan of voeg een beschrijving toe.': - 'Adjust your search term or add a description.', + 'Passen Sie Ihren Suchbegriff an oder fügen Sie eine Beschreibung hinzu.', 'Plak de link naar een .ocideck-pakket of een Marp-markdownbestand.': - 'Paste the link to an .ocideck package or a Marp Markdown file.', - 'Preview inklappen': 'Collapse preview', - 'Preview uitklappen': 'Expand preview', - 'Profiel verwijderen': 'Delete profile', - 'Rij verwijderen': 'Remove row', + 'Fügen Sie den Link zu einem .ocideck-Paket oder einer Marp-Markdown-Datei ein.', + 'Preview inklappen': 'Vorschau einklappen', + 'Preview uitklappen': 'Vorschau ausklappen', + 'Profiel verwijderen': 'Profil löschen', + 'Rij verwijderen': 'Zeile entfernen', 'SLIDES': 'SLIDES', - 'Sectieachtergrond': 'Section background', - 'Selecteer een\nafbeelding': 'Select an\nimage', - 'Selectie opheffen': 'Clear selection', + 'Sectieachtergrond': 'Abschnittshintergrund', + 'Selecteer een\nafbeelding': 'Wählen Sie ein\nBild', + 'Selectie opheffen': 'Auswahl aufheben', 'Sleep om de slide-preview breder of smaller te maken': - 'Drag to make the slide preview wider or narrower', + 'Ziehen, um die Folienvorschau breiter oder schmaler zu machen', 'Slide': 'Slide', - 'Slide gekopieerd naar klembord.': 'Slide copied to clipboard.', - 'Slide plakken': 'Paste slide', - 'Slide renderen…': 'Rendering slide…', - 'Slide toevoegen': 'Add slide', + 'Slide gekopieerd naar klembord.': 'Folie in die Zwischenablage kopiert.', + 'Slide plakken': 'Folie einfügen', + 'Slide renderen…': 'Folie wird gerendert…', + 'Slide toevoegen': 'Folie hinzufügen', 'Slides gerenderd.': 'Folien gerendert.', - 'Sluiten (G of Esc)': 'Close (G or Esc)', - 'Sprekersnotities...': 'Speaker notes...', + 'Sluiten (G of Esc)': 'Schließen (G oder Esc)', + 'Sprekersnotities...': 'Sprechernotizen...', 'Standaard laatste slide gebruiken': 'Standardmäßige letzte Folie verwenden', - 'Standaard map voor presentaties': 'Default presentation folder', - 'Standaardprofiel laden': 'Load default profile', + 'Standaard map voor presentaties': 'Standardordner für Präsentationen', + 'Standaardprofiel laden': 'Standardprofil laden', 'TLP-classificatie (Traffic Light Protocol)': - 'TLP classification (Traffic Light Protocol)', - 'Tabel koptekst': 'Table header text', - 'Tabeltekst': 'Table text', - 'Terug naar standaardstijl': 'Back to default style', + 'TLP-Klassifizierung (Traffic Light Protocol)', + 'Tabel koptekst': 'Tabellenkopf', + 'Tabeltekst': 'Tabellentext', + 'Terug naar standaardstijl': 'Zurück zum Standardstil', 'Terugzetten (volledige afbeelding zichtbaar)': - 'Reset (full image visible)', - 'Tijd resetten (R)': 'Reset timer (R)', + 'Zurücksetzen (vollständiges Bild sichtbar)', + 'Tijd resetten (R)': 'Zeit zurücksetzen (R)', 'Tip: druk op Enter binnen een cel voor een nieuwe regel.': - 'Tip: press Enter inside a cell for a new line.', - 'Titelachtergrond': 'Title background', - 'Titeltekst': 'Title text', - 'Toepassen': 'Apply', + 'Tipp: Drücken Sie Enter in einer Zelle für eine neue Zeile.', + 'Titelachtergrond': 'Titelhintergrund', + 'Titeltekst': 'Titeltext', + 'Toepassen': 'Anwenden', 'Tokens: {page}, {total}, {date}, {title}. Footer verschijnt op alle slides behalve titel- en sectieslides, tenzij je hem per slide uitzet.': - 'Tokens: {page}, {total}, {date}, {title}. The footer appears on all slides except title and section slides, unless you disable it per slide.', + 'Tokens: {page}, {total}, {date}, {title}. Die Fußzeile erscheint auf allen Folien außer Titel- und Abschnittsfolien, sofern Sie sie nicht pro Folie deaktivieren.', 'Typ zoektermen om slides uit al je presentaties te vinden.': - 'Type search terms to find slides across your presentations.', - 'Uitgezoomd': 'Zoomed out', + 'Geben Sie Suchbegriffe ein, um Folien aus allen Präsentationen zu finden.', + 'Uitgezoomd': 'Verkleinert', 'Uitzoomen (meer van de foto zichtbaar)': - 'Zoom out (more of the photo visible)', - 'Verwijder afbeelding': 'Remove image', - 'Verwijder logo': 'Remove logo', + 'Verkleinern (mehr vom Foto sichtbar)', + 'Verwijder afbeelding': 'Bild entfernen', + 'Verwijder logo': 'Logo entfernen', 'Verwijderen maakt die slides leeg. Dit kan niet ongedaan worden gemaakt.': - 'Deleting will clear those slides. This cannot be undone.', - 'Volledig zichtbaar (100%)': 'Fully visible (100%)', - 'Vul een titel in': 'Enter a title', - 'Weer tonen': 'Show again', + 'Durch das Löschen werden diese Folien geleert. Dies kann nicht rückgängig gemacht werden.', + 'Volledig zichtbaar (100%)': 'Vollständig sichtbar (100%)', + 'Vul een titel in': 'Geben Sie einen Titel ein', + 'Weer tonen': 'Wieder anzeigen', 'Weer tonen bij presenteren/exporteren': - 'Show again when presenting/exporting', + 'Beim Präsentieren/Exportieren wieder anzeigen', 'Wordt automatisch toegevoegd bij presenteren en exporteren.': 'Wird beim Präsentieren und Exportieren automatisch hinzugefügt.', - 'Zoek in slides…': 'Search in slides…', + 'Zoek in slides…': 'In Folien suchen…', 'Zoek op bestandsnaam, titel of tekst in de slides…': - 'Search by file name, title or slide text…', - 'Zoek op naam of beschrijving…': 'Search by name or description…', + 'Nach Dateiname, Titel oder Text in den Folien suchen…', + 'Zoek op naam of beschrijving…': 'Nach Name oder Beschreibung suchen…', 'Zoek op presentatie, titel of tekst…': - 'Search by presentation, title or text…', + 'Nach Präsentation, Titel oder Text suchen…', 'Zoek slides op tekst, titel, onderschrift, pad…': - 'Search slides by text, title, caption, path…', + 'Folien nach Text, Titel, Bildunterschrift, Pfad suchen…', 'bijv. Vertrouwelijk · {title} · {date}': - 'e.g. Confidential · {title} · {date}', + 'z. B. Vertraulich · {title} · {date}', 'gerenderd.': 'gerendert.', - 'geselecteerd': 'selected', - 'meer treffer(s)': 'more match(es)', - 'paginering aan': 'pagination on', + 'geselecteerd': 'ausgewählt', + 'meer treffer(s)': 'weitere Treffer', + 'paginering aan': 'Seitennummerierung an', 'pijltjes + Enter of klik om te springen': - 'arrows + Enter or click to jump', + 'Pfeiltasten + Enter oder Klick zum Springen', 'presentaties met niet-opgeslagen wijzigingen gevonden van een vorige sessie:': - 'presentations with unsaved changes from a previous session:', + 'Präsentationen mit nicht gespeicherten Änderungen aus einer früheren Sitzung gefunden:', 'renderen…': 'rendern…', - 'resultaat': 'result', - 'resultaten': 'results', + 'resultaat': 'Ergebnis', + 'resultaten': 'Ergebnisse', 'slide': 'slide', - 'slide(s) gekopieerd naar': 'slide(s) copied to', - 'slides geïmporteerd.': 'slides imported.', - 'slides kopiëren naar…': 'slides to copy to…', - 'slides overgeslagen': 'slides skipped', - 'toegevoegd': 'added', - 'treffer(s)': 'match(es)', - 'treffers — verfijn je zoekopdracht': 'matches, refine your search', - 'van de foto zichtbaar': 'of the photo visible', - 'vervangen': 'replaced', - 'verwijderen': 'remove', - 'volledig deck': 'full deck', + 'slide(s) gekopieerd naar': 'Folie(n) kopiert nach', + 'slides geïmporteerd.': 'Folien importiert.', + 'slides kopiëren naar…': 'Folien kopieren nach…', + 'slides overgeslagen': 'Folien übersprungen', + 'toegevoegd': 'hinzugefügt', + 'treffer(s)': 'Treffer', + 'treffers — verfijn je zoekopdracht': 'Treffer — verfeinern Sie Ihre Suche', + 'van de foto zichtbaar': 'vom Foto sichtbar', + 'vervangen': 'ersetzt', + 'verwijderen': 'entfernen', + 'volledig deck': 'vollständiges Deck', 'voorbereiden…': 'vorbereiten…', '↑↓←→ navigeren · Enter kiezen · Dubbelklik selecteert': - '↑↓←→ navigate · Enter chooses · Double-click selects', + '↑↓←→ navigieren · Enter wählen · Doppelklick wählt aus', 'Duplicaten opruimen': 'Duplikate aufräumen', 'Zoek byte-identieke afbeeldingen (md5), voeg tags en opmerkingen samen en verwijder de kopieën': 'Byte-identische Bilder (md5) finden, Tags und Anmerkungen zusammenführen und die Kopien löschen', @@ -3223,217 +3263,222 @@ const _dutchSourceStringAdditions = { 'Aflopend sorteren': 'Trier par ordre décroissant', 'Bij een cirkel worden maximaal de eerste twee reeksen getoond; de labels vormen de segmenten.': 'Les graphiques en secteurs affichent au maximum les deux premières séries ; les libellés forment les segments.', - '# Slide\n\nInhoud hier...': '# Slide\n\nContent here...', - '1 slide geïmporteerd.': '1 slide imported.', - '1 slide kopiëren naar…': 'Copy 1 slide to…', - '1 slide overgeslagen': '1 slide skipped', + '# Slide\n\nInhoud hier...': '# Diapositive\n\nContenu ici...', + '1 slide geïmporteerd.': '1 diapositive importée.', + '1 slide kopiëren naar…': 'Copier 1 diapositive vers…', + '1 slide overgeslagen': '1 diapositive ignorée', 'Accent / bullets': 'Accent / bullets', - 'Achtergrond slides': 'Slide background', + 'Achtergrond slides': 'Arrière-plan des diapositives', 'Afbeelding': 'Image', - 'Afbeelding gekopieerd naar klembord.': 'Image copied to clipboard.', - 'Afbeelding plakken': 'Paste image', - 'Afbeelding plakken uit klembord': 'Paste image from clipboard', + 'Afbeelding gekopieerd naar klembord.': + 'Image copiée dans le presse-papiers.', + 'Afbeelding plakken': 'Coller l\'image', + 'Afbeelding plakken uit klembord': + 'Coller l\'image depuis le presse-papiers', 'Afbeeldingen → nieuwe slides · .md / .ocideck → openen': - 'Images → new slides · .md / .ocideck → open', - 'Afsluiten (Escape)': 'Exit (Escape)', + 'Images → nouvelles diapositives · .md / .ocideck → ouvrir', + 'Afsluiten (Escape)': 'Quitter (Échap)', 'Alle slides zijn overgeslagen — niets om te exporteren.': - 'All slides are skipped, so there is nothing to export.', + 'Toutes les diapositives sont ignorées — rien à exporter.', 'Alle slides zijn overgeslagen — niets om te tonen.': - 'All slides are skipped, so there is nothing to show.', - 'Alles tonen': 'Show all', - 'Audio verwijderen': 'Remove audio', - 'Automatisch doorgaan na': 'Advance automatically after', - 'Bijv. Kwartaalupdate Q4': 'E.g. Q4 update', + 'Toutes les diapositives sont ignorées — rien à afficher.', + 'Alles tonen': 'Tout afficher', + 'Audio verwijderen': 'Supprimer l\'audio', + 'Automatisch doorgaan na': 'Avancer automatiquement après', + 'Bijv. Kwartaalupdate Q4': 'Ex. Mise à jour T4', 'Bullet': 'Puce', 'Caption / bronvermelding (bijv. © Naam Fotograaf)': - 'Caption / credit (e.g. © Photographer Name)', + 'Légende / crédit (ex. © Nom du photographe)', 'Coverflow': 'Coverflow', 'De afbeelding wordt schermvullend als achtergrond getoond met verminderde opaciteit zodat de tekst leesbaar blijft.': - 'The image is shown fullscreen as a background with reduced opacity so the text remains readable.', + 'L\'image est affichée en plein écran comme arrière-plan avec une opacité réduite afin que le texte reste lisible.', 'De snelle bruine vos springt over de luie hond.': - 'The quick brown fox jumps over the lazy dog.', + 'Portez ce vieux whisky au juge blond qui fume.', 'Deze gegevens worden in de markdown opgeslagen en zijn doorzoekbaar bij het openen.': - 'These details are stored in the Markdown and searchable when opening.', + 'Ces données sont enregistrées dans le Markdown et consultables à l\'ouverture.', 'Deze presentatie heeft niet-opgeslagen wijzigingen. Sla de presentatie op voordat het tabblad sluit.': - 'This presentation has unsaved changes. Save it before closing the tab.', + 'Cette présentation comporte des modifications non enregistrées. Enregistrez-la avant de fermer l\'onglet.', 'Deze slide kan geen afbeelding ontvangen. Kies eerst een afbeeldingsslide.': - 'This slide cannot receive an image. Choose an image slide first.', - 'Eerste': 'First', - 'Einde van de presentatie': 'End of presentation', + 'Cette diapositive ne peut pas recevoir d\'image. Choisissez d\'abord une diapositive d\'image.', + 'Eerste': 'Première', + 'Einde van de presentatie': 'Fin de la présentation', 'Er is een presentatie met niet-opgeslagen wijzigingen gevonden van een vorige sessie:': - 'A presentation with unsaved changes was found from a previous session:', - 'Er zijn': 'There are', + 'Une présentation comportant des modifications non enregistrées a été trouvée depuis une session précédente :', + 'Er zijn': 'Il y a', 'Er zijn presentaties met niet-opgeslagen wijzigingen. Sla ze op voordat de app sluit.': - 'There are presentations with unsaved changes. Save them before closing the app.', - 'Export mislukt:': 'Export failed:', - 'Footer tonen op deze slide': 'Show footer on this slide', + 'Des présentations comportent des modifications non enregistrées. Enregistrez-les avant de fermer l\'application.', + 'Export mislukt:': 'Échec de l\'exportation :', + 'Footer tonen op deze slide': + 'Afficher le pied de page sur cette diapositive', 'Gebruik "Bladeren" om afbeeldingen van elke locatie te kiezen.': - 'Use “Browse” to choose images from any location.', + 'Utilisez « Parcourir » pour choisir des images de n\'importe quel emplacement.', 'Geen afbeelding op het klembord gevonden.': - 'No image found on the clipboard.', + 'Aucune image trouvée dans le presse-papiers.', 'Geen ander deck open. Open eerst een ander tabblad.': - 'No other deck is open. Open another tab first.', + 'Aucun autre deck ouvert. Ouvrez d\'abord un autre onglet.', 'Geen andere presentaties (.md) in deze map gevonden.': - 'No other presentations (.md) found in this folder.', - 'Geen notities voor deze slide.': 'No notes for this slide.', + 'Aucune autre présentation (.md) trouvée dans ce dossier.', + 'Geen notities voor deze slide.': 'Aucune note pour cette diapositive.', 'Geen presentaties (.md) in deze map gevonden.': - 'No presentations (.md) found in this folder.', - 'Geen presentaties gevonden voor': 'No presentations found for', - 'Geen resultaten': 'No results', - 'Geen resultaten voor': 'No results for', - 'Geen slides gevonden voor': 'No slides found for', - 'Geen slides met': 'No slides with', - 'Geselecteerd': 'Selected', + 'Aucune présentation (.md) trouvée dans ce dossier.', + 'Geen presentaties gevonden voor': 'Aucune présentation trouvée pour', + 'Geen resultaten': 'Aucun résultat', + 'Geen resultaten voor': 'Aucun résultat pour', + 'Geen slides gevonden voor': 'Aucune diapositive trouvée pour', + 'Geen slides met': 'Aucune diapositive avec', + 'Geselecteerd': 'Sélectionné', 'HTML opent in elke browser zonder internet en rendert codeblokken, wiskunde en mermaid-diagrammen.': 'Le HTML s’ouvre dans n’importe quel navigateur sans internet et rend les blocs de code, les mathématiques et les diagrammes Mermaid.', 'Het bestand wordt permanent van schijf verwijderd. Deze actie kan niet ongedaan worden gemaakt.': - 'The file will be permanently deleted from disk. This action cannot be undone.', - 'Ingezoomd': 'Zoomed in', + 'Le fichier sera définitivement supprimé du disque. Cette action est irréversible.', + 'Ingezoomd': 'Zoom avant', 'Inzoomen (minder van de foto zichtbaar)': - 'Zoom in (less of the photo visible)', - 'Kies een afbeelding': 'Choose an image', + 'Zoom avant (moins de la photo visible)', + 'Kies een afbeelding': 'Choisir une image', 'Kies een map met presentaties om te beginnen.': - 'Choose a folder with presentations to begin.', - 'Kon dit pakket niet importeren.': 'Could not import this package.', - 'Kon niet van scherm wisselen.': 'Could not switch screens.', + 'Choisissez un dossier de présentations pour commencer.', + 'Kon dit pakket niet importeren.': 'Impossible d\'importer ce paquet.', + 'Kon niet van scherm wisselen.': 'Impossible de changer d\'écran.', 'Kon van deze URL geen presentatie ophalen.': - 'Could not fetch a presentation from this URL.', - 'Kopieer afbeelding naar klembord': 'Copy image to clipboard', - 'Kopiëren mislukt.': 'Copy failed.', - 'Kopiëren naar ander deck': 'Copy to another deck', - 'Kopiëren naar klembord mislukt.': 'Copying to clipboard failed.', - 'Koprij verwijderen': 'Remove header row', - 'Laat los om toe te voegen': 'Release to add', + 'Impossible de récupérer une présentation depuis cette URL.', + 'Kopieer afbeelding naar klembord': + 'Copier l\'image dans le presse-papiers', + 'Kopiëren mislukt.': 'Échec de la copie.', + 'Kopiëren naar ander deck': 'Copier vers un autre deck', + 'Kopiëren naar klembord mislukt.': + 'Échec de la copie dans le presse-papiers.', + 'Koprij verwijderen': 'Supprimer la ligne d\'en-tête', + 'Laat los om toe te voegen': 'Relâchez pour ajouter', 'Laatste slide': 'Diapositive finale', 'Let op: deze afbeelding wordt nog gebruikt in': - 'Warning: this image is still used in', - 'Logo kiezen': 'Choose logo', + 'Attention : cette image est encore utilisée dans', + 'Logo kiezen': 'Choisir un logo', 'Logo px': 'Logo px', - 'Logo tonen op deze slide': 'Show logo on this slide', - 'Map met presentaties kiezen': 'Choose presentation folder', - 'Map voor exports': 'Export folder', + 'Logo tonen op deze slide': 'Afficher le logo sur cette diapositive', + 'Map met presentaties kiezen': 'Choisir le dossier des présentations', + 'Map voor exports': 'Dossier des exports', 'Markdown kon niet worden verwerkt. Controleer de syntax.': - 'Markdown could not be processed. Check the syntax.', + 'Le Markdown n\'a pas pu être traité. Vérifiez la syntaxe.', 'Markdown modus — bewerk de volledige presentatie als Marp Markdown': - 'Markdown mode — edit the full presentation as Marp Markdown', + 'Mode Markdown — modifiez la présentation entière en Markdown Marp', 'Markdown voor laatste slide': 'Markdown pour la diapositive finale', - 'Naam van het stijlprofiel': 'Name of the style profile', - 'Niet-opgeslagen werk herstellen?': 'Restore unsaved work?', - 'Niet-opgeslagen wijzigingen': 'Unsaved changes', - 'Niets vervangen': 'Nothing replaced', - 'Nieuw profiel': 'New profile', + 'Naam van het stijlprofiel': 'Nom du profil de style', + 'Niet-opgeslagen werk herstellen?': 'Restaurer le travail non enregistré ?', + 'Niet-opgeslagen wijzigingen': 'Modifications non enregistrées', + 'Niets vervangen': 'Rien remplacé', + 'Nieuw profiel': 'Nouveau profil', 'Open eerst een presentatie om afbeeldingen toe te voegen.': - 'Open a presentation before adding images.', - 'Overslaan bij presenteren/exporteren': 'Skip when presenting/exporting', + 'Ouvrez d\'abord une présentation pour ajouter des images.', + 'Overslaan bij presenteren/exporteren': + 'Ignorer lors de la présentation/l\'exportation', 'PREVIEW': 'APERÇU', - 'Paginanummers tonen (rechtsonder)': 'Show page numbers (bottom right)', - 'Pakket geëxporteerd naar:': 'Package exported to:', + 'Paginanummers tonen (rechtsonder)': + 'Afficher les numéros de page (en bas à droite)', + 'Pakket geëxporteerd naar:': 'Paquet exporté vers :', 'Pas je zoekterm aan of voeg een beschrijving toe.': - 'Adjust your search term or add a description.', + 'Ajustez votre terme de recherche ou ajoutez une description.', 'Plak de link naar een .ocideck-pakket of een Marp-markdownbestand.': - 'Paste the link to an .ocideck package or a Marp Markdown file.', - 'Preview inklappen': 'Collapse preview', - 'Preview uitklappen': 'Expand preview', - 'Profiel verwijderen': 'Delete profile', - 'Rij verwijderen': 'Remove row', + 'Collez le lien vers un paquet .ocideck ou un fichier Markdown Marp.', + 'Preview inklappen': 'Réduire l\'aperçu', + 'Preview uitklappen': 'Développer l\'aperçu', + 'Profiel verwijderen': 'Supprimer le profil', + 'Rij verwijderen': 'Supprimer la ligne', 'SLIDES': 'SLIDES', - 'Sectieachtergrond': 'Section background', - 'Selecteer een\nafbeelding': 'Select an\nimage', - 'Selectie opheffen': 'Clear selection', + 'Sectieachtergrond': 'Arrière-plan de section', + 'Selecteer een\nafbeelding': 'Sélectionnez une\nimage', + 'Selectie opheffen': 'Effacer la sélection', 'Sleep om de slide-preview breder of smaller te maken': - 'Drag to make the slide preview wider or narrower', + 'Faites glisser pour élargir ou rétrécir l\'aperçu de la diapositive', 'Slide': 'Slide', - 'Slide gekopieerd naar klembord.': 'Slide copied to clipboard.', - 'Slide plakken': 'Paste slide', - 'Slide renderen…': 'Rendering slide…', - 'Slide toevoegen': 'Add slide', + 'Slide gekopieerd naar klembord.': + 'Diapositive copiée dans le presse-papiers.', + 'Slide plakken': 'Coller la diapositive', + 'Slide renderen…': 'Rendu de la diapositive…', + 'Slide toevoegen': 'Ajouter une diapositive', 'Slides gerenderd.': 'Diapositives rendues.', - 'Sluiten (G of Esc)': 'Close (G or Esc)', - 'Sprekersnotities...': 'Speaker notes...', + 'Sluiten (G of Esc)': 'Fermer (G ou Échap)', + 'Sprekersnotities...': 'Notes de l\'orateur...', 'Standaard laatste slide gebruiken': 'Utiliser la diapositive finale par défaut', - 'Standaard map voor presentaties': 'Default presentation folder', - 'Standaardprofiel laden': 'Load default profile', + 'Standaard map voor presentaties': 'Dossier par défaut des présentations', + 'Standaardprofiel laden': 'Charger le profil par défaut', 'TLP-classificatie (Traffic Light Protocol)': - 'TLP classification (Traffic Light Protocol)', - 'Tabel koptekst': 'Table header text', - 'Tabeltekst': 'Table text', - 'Terug naar standaardstijl': 'Back to default style', + 'Classification TLP (Traffic Light Protocol)', + 'Tabel koptekst': 'En-tête du tableau', + 'Tabeltekst': 'Texte du tableau', + 'Terug naar standaardstijl': 'Revenir au style par défaut', 'Terugzetten (volledige afbeelding zichtbaar)': - 'Reset (full image visible)', - 'Tijd resetten (R)': 'Reset timer (R)', + 'Réinitialiser (image entière visible)', + 'Tijd resetten (R)': 'Réinitialiser le minuteur (R)', 'Tip: druk op Enter binnen een cel voor een nieuwe regel.': - 'Tip: press Enter inside a cell for a new line.', - 'Titelachtergrond': 'Title background', - 'Titeltekst': 'Title text', - 'Toepassen': 'Apply', + 'Astuce : appuyez sur Entrée dans une cellule pour une nouvelle ligne.', + 'Titelachtergrond': 'Arrière-plan du titre', + 'Titeltekst': 'Texte du titre', + 'Toepassen': 'Appliquer', 'Tokens: {page}, {total}, {date}, {title}. Footer verschijnt op alle slides behalve titel- en sectieslides, tenzij je hem per slide uitzet.': - 'Tokens: {page}, {total}, {date}, {title}. The footer appears on all slides except title and section slides, unless you disable it per slide.', + 'Jetons : {page}, {total}, {date}, {title}. Le pied de page apparaît sur toutes les diapositives sauf les diapositives de titre et de section, sauf si vous le désactivez par diapositive.', 'Typ zoektermen om slides uit al je presentaties te vinden.': - 'Type search terms to find slides across your presentations.', - 'Uitgezoomd': 'Zoomed out', + 'Saisissez des termes de recherche pour trouver des diapositives dans toutes vos présentations.', + 'Uitgezoomd': 'Zoom arrière', 'Uitzoomen (meer van de foto zichtbaar)': - 'Zoom out (more of the photo visible)', - 'Verwijder afbeelding': 'Remove image', - 'Verwijder logo': 'Remove logo', + 'Zoom arrière (plus de la photo visible)', + 'Verwijder afbeelding': 'Supprimer l\'image', + 'Verwijder logo': 'Supprimer le logo', 'Verwijderen maakt die slides leeg. Dit kan niet ongedaan worden gemaakt.': - 'Deleting will clear those slides. This cannot be undone.', - 'Volledig zichtbaar (100%)': 'Fully visible (100%)', - 'Vul een titel in': 'Enter a title', - 'Weer tonen': 'Show again', + 'La suppression videra ces diapositives. Cette action est irréversible.', + 'Volledig zichtbaar (100%)': 'Entièrement visible (100%)', + 'Vul een titel in': 'Saisissez un titre', + 'Weer tonen': 'Afficher à nouveau', 'Weer tonen bij presenteren/exporteren': - 'Show again when presenting/exporting', + 'Afficher à nouveau lors de la présentation/l\'exportation', 'Wordt automatisch toegevoegd bij presenteren en exporteren.': 'Ajoutée automatiquement lors de la présentation et de l’exportation.', - 'Zoek in slides…': 'Search in slides…', + 'Zoek in slides…': 'Rechercher dans les diapositives…', 'Zoek op bestandsnaam, titel of tekst in de slides…': - 'Search by file name, title or slide text…', - 'Zoek op naam of beschrijving…': 'Search by name or description…', + 'Rechercher par nom de fichier, titre ou texte dans les diapositives…', + 'Zoek op naam of beschrijving…': 'Rechercher par nom ou description…', 'Zoek op presentatie, titel of tekst…': - 'Search by presentation, title or text…', + 'Rechercher par présentation, titre ou texte…', 'Zoek slides op tekst, titel, onderschrift, pad…': - 'Search slides by text, title, caption, path…', + 'Rechercher des diapositives par texte, titre, légende, chemin…', 'bijv. Vertrouwelijk · {title} · {date}': - 'e.g. Confidential · {title} · {date}', + 'ex. Confidentiel · {title} · {date}', 'gerenderd.': 'rendue.', - 'geselecteerd': 'selected', - 'meer treffer(s)': 'more match(es)', - 'paginering aan': 'pagination on', + 'geselecteerd': 'sélectionné', + 'meer treffer(s)': 'résultat(s) de plus', + 'paginering aan': 'pagination activée', 'pijltjes + Enter of klik om te springen': - 'arrows + Enter or click to jump', + 'flèches + Entrée ou clic pour aller à', 'presentaties met niet-opgeslagen wijzigingen gevonden van een vorige sessie:': - 'presentations with unsaved changes from a previous session:', + 'présentations comportant des modifications non enregistrées trouvées depuis une session précédente :', 'renderen…': 'rendu…', - 'resultaat': 'result', - 'resultaten': 'results', + 'resultaat': 'résultat', + 'resultaten': 'résultats', 'slide': 'slide', - 'slide(s) gekopieerd naar': 'slide(s) copied to', - 'slides geïmporteerd.': 'slides imported.', - 'slides kopiëren naar…': 'slides to copy to…', - 'slides overgeslagen': 'slides skipped', - 'toegevoegd': 'added', - 'treffer(s)': 'match(es)', - 'treffers — verfijn je zoekopdracht': 'matches, refine your search', - 'van de foto zichtbaar': 'of the photo visible', - 'vervangen': 'replaced', - 'verwijderen': 'remove', - 'volledig deck': 'full deck', + 'slide(s) gekopieerd naar': 'diapositive(s) copiée(s) vers', + 'slides geïmporteerd.': 'diapositives importées.', + 'slides kopiëren naar…': 'diapositives à copier vers…', + 'slides overgeslagen': 'diapositives ignorées', + 'toegevoegd': 'ajouté', + 'treffer(s)': 'résultat(s)', + 'treffers — verfijn je zoekopdracht': 'résultats — affinez votre recherche', + 'van de foto zichtbaar': 'de la photo visible', + 'vervangen': 'remplacé', + 'verwijderen': 'supprimer', + 'volledig deck': 'deck complet', 'voorbereiden…': 'préparation…', '↑↓←→ navigeren · Enter kiezen · Dubbelklik selecteert': - '↑↓←→ navigate · Enter chooses · Double-click selects', + '↑↓←→ naviguer · Entrée choisir · Double-clic sélectionne', 'Duplicaten opruimen': 'Nettoyer les doublons', 'Zoek byte-identieke afbeeldingen (md5), voeg tags en opmerkingen samen en verwijder de kopieën': 'Trouver les images identiques octet par octet (md5), fusionner tags et remarques et supprimer les copies', - 'Geen dubbele afbeeldingen gevonden.': - 'Aucune image en double trouvée.', + 'Geen dubbele afbeeldingen gevonden.': 'Aucune image en double trouvée.', 'Dubbele afbeeldingen opruimen?': 'Nettoyer les images en double ?', 'Van elke groep blijft één bestand staan. Tags en opmerkingen worden samengevoegd en slides die een kopie gebruiken verwijzen daarna naar het behouden bestand — ook in presentaties die nu niet geopend zijn.': 'Un seul fichier par groupe est conservé. Les tags et remarques sont fusionnés et les diapositives utilisant une copie pointeront ensuite vers le fichier conservé — y compris dans les présentations qui ne sont pas ouvertes actuellement.', 'Opruimen': 'Nettoyer', - '1 presentatiebestand bijgewerkt.': - '1 fichier de présentation mis à jour.', - 'presentatiebestanden bijgewerkt.': - 'fichiers de présentation mis à jour.', + '1 presentatiebestand bijgewerkt.': '1 fichier de présentation mis à jour.', + 'presentatiebestanden bijgewerkt.': 'fichiers de présentation mis à jour.', 'niet geopend': 'non ouvert', '1 dubbele afbeelding verwijderd.': '1 image en double supprimée.', 'dubbele afbeeldingen verwijderd.': 'images en double supprimées.', @@ -3526,204 +3571,205 @@ const _dutchSourceStringAdditions = { 'Aflopend sorteren': 'Ordenar descendente', 'Bij een cirkel worden maximaal de eerste twee reeksen getoond; de labels vormen de segmenten.': 'Los gráficos circulares muestran como máximo las dos primeras series; las etiquetas forman los segmentos.', - '# Slide\n\nInhoud hier...': '# Slide\n\nContent here...', - '1 slide geïmporteerd.': '1 slide imported.', - '1 slide kopiëren naar…': 'Copy 1 slide to…', - '1 slide overgeslagen': '1 slide skipped', + '# Slide\n\nInhoud hier...': '# Diapositiva\n\nContenido aquí...', + '1 slide geïmporteerd.': '1 diapositiva importada.', + '1 slide kopiëren naar…': 'Copiar 1 diapositiva a…', + '1 slide overgeslagen': '1 diapositiva omitida', 'Accent / bullets': 'Accent / bullets', - 'Achtergrond slides': 'Slide background', + 'Achtergrond slides': 'Fondo de diapositivas', 'Afbeelding': 'Imagen', - 'Afbeelding gekopieerd naar klembord.': 'Image copied to clipboard.', - 'Afbeelding plakken': 'Paste image', - 'Afbeelding plakken uit klembord': 'Paste image from clipboard', + 'Afbeelding gekopieerd naar klembord.': 'Imagen copiada al portapapeles.', + 'Afbeelding plakken': 'Pegar imagen', + 'Afbeelding plakken uit klembord': 'Pegar imagen desde el portapapeles', 'Afbeeldingen → nieuwe slides · .md / .ocideck → openen': - 'Images → new slides · .md / .ocideck → open', - 'Afsluiten (Escape)': 'Exit (Escape)', + 'Imágenes → diapositivas nuevas · .md / .ocideck → abrir', + 'Afsluiten (Escape)': 'Salir (Escape)', 'Alle slides zijn overgeslagen — niets om te exporteren.': - 'All slides are skipped, so there is nothing to export.', + 'Se han omitido todas las diapositivas: no hay nada que exportar.', 'Alle slides zijn overgeslagen — niets om te tonen.': - 'All slides are skipped, so there is nothing to show.', - 'Alles tonen': 'Show all', - 'Audio verwijderen': 'Remove audio', - 'Automatisch doorgaan na': 'Advance automatically after', - 'Bijv. Kwartaalupdate Q4': 'E.g. Q4 update', + 'Se han omitido todas las diapositivas: no hay nada que mostrar.', + 'Alles tonen': 'Mostrar todo', + 'Audio verwijderen': 'Quitar audio', + 'Automatisch doorgaan na': 'Avanzar automáticamente tras', + 'Bijv. Kwartaalupdate Q4': 'P. ej. Actualización del Q4', 'Bullet': 'Viñeta', 'Caption / bronvermelding (bijv. © Naam Fotograaf)': - 'Caption / credit (e.g. © Photographer Name)', + 'Pie de foto / crédito (p. ej. © Nombre del fotógrafo)', 'Coverflow': 'Coverflow', 'De afbeelding wordt schermvullend als achtergrond getoond met verminderde opaciteit zodat de tekst leesbaar blijft.': - 'The image is shown fullscreen as a background with reduced opacity so the text remains readable.', + 'La imagen se muestra a pantalla completa como fondo con opacidad reducida para que el texto siga siendo legible.', 'De snelle bruine vos springt over de luie hond.': - 'The quick brown fox jumps over the lazy dog.', + 'El veloz murciélago hindú comía feliz cardillo y kiwi.', 'Deze gegevens worden in de markdown opgeslagen en zijn doorzoekbaar bij het openen.': - 'These details are stored in the Markdown and searchable when opening.', + 'Estos datos se guardan en el Markdown y se pueden buscar al abrir.', 'Deze presentatie heeft niet-opgeslagen wijzigingen. Sla de presentatie op voordat het tabblad sluit.': - 'This presentation has unsaved changes. Save it before closing the tab.', + 'Esta presentación tiene cambios sin guardar. Guárdala antes de cerrar la pestaña.', 'Deze slide kan geen afbeelding ontvangen. Kies eerst een afbeeldingsslide.': - 'This slide cannot receive an image. Choose an image slide first.', - 'Eerste': 'First', - 'Einde van de presentatie': 'End of presentation', + 'Esta diapositiva no puede recibir una imagen. Elige primero una diapositiva de imagen.', + 'Eerste': 'Primera', + 'Einde van de presentatie': 'Fin de la presentación', 'Er is een presentatie met niet-opgeslagen wijzigingen gevonden van een vorige sessie:': - 'A presentation with unsaved changes was found from a previous session:', - 'Er zijn': 'There are', + 'Se encontró una presentación con cambios sin guardar de una sesión anterior:', + 'Er zijn': 'Hay', 'Er zijn presentaties met niet-opgeslagen wijzigingen. Sla ze op voordat de app sluit.': - 'There are presentations with unsaved changes. Save them before closing the app.', - 'Export mislukt:': 'Export failed:', - 'Footer tonen op deze slide': 'Show footer on this slide', + 'Hay presentaciones con cambios sin guardar. Guárdalas antes de cerrar la aplicación.', + 'Export mislukt:': 'Error al exportar:', + 'Footer tonen op deze slide': 'Mostrar pie de página en esta diapositiva', 'Gebruik "Bladeren" om afbeeldingen van elke locatie te kiezen.': - 'Use “Browse” to choose images from any location.', + 'Usa "Examinar" para elegir imágenes de cualquier ubicación.', 'Geen afbeelding op het klembord gevonden.': - 'No image found on the clipboard.', + 'No se encontró ninguna imagen en el portapapeles.', 'Geen ander deck open. Open eerst een ander tabblad.': - 'No other deck is open. Open another tab first.', + 'No hay otra presentación abierta. Abre primero otra pestaña.', 'Geen andere presentaties (.md) in deze map gevonden.': - 'No other presentations (.md) found in this folder.', - 'Geen notities voor deze slide.': 'No notes for this slide.', + 'No se encontraron otras presentaciones (.md) en esta carpeta.', + 'Geen notities voor deze slide.': 'No hay notas para esta diapositiva.', 'Geen presentaties (.md) in deze map gevonden.': - 'No presentations (.md) found in this folder.', - 'Geen presentaties gevonden voor': 'No presentations found for', - 'Geen resultaten': 'No results', - 'Geen resultaten voor': 'No results for', - 'Geen slides gevonden voor': 'No slides found for', - 'Geen slides met': 'No slides with', - 'Geselecteerd': 'Selected', + 'No se encontraron presentaciones (.md) en esta carpeta.', + 'Geen presentaties gevonden voor': 'No se encontraron presentaciones para', + 'Geen resultaten': 'Sin resultados', + 'Geen resultaten voor': 'Sin resultados para', + 'Geen slides gevonden voor': 'No se encontraron diapositivas para', + 'Geen slides met': 'No hay diapositivas con', + 'Geselecteerd': 'Seleccionado', 'HTML opent in elke browser zonder internet en rendert codeblokken, wiskunde en mermaid-diagrammen.': 'El HTML se abre en cualquier navegador sin internet y renderiza bloques de código, matemáticas y diagramas Mermaid.', 'Het bestand wordt permanent van schijf verwijderd. Deze actie kan niet ongedaan worden gemaakt.': - 'The file will be permanently deleted from disk. This action cannot be undone.', - 'Ingezoomd': 'Zoomed in', + 'El archivo se eliminará permanentemente del disco. Esta acción no se puede deshacer.', + 'Ingezoomd': 'Ampliado', 'Inzoomen (minder van de foto zichtbaar)': - 'Zoom in (less of the photo visible)', - 'Kies een afbeelding': 'Choose an image', + 'Acercar (se ve menos de la foto)', + 'Kies een afbeelding': 'Elige una imagen', 'Kies een map met presentaties om te beginnen.': - 'Choose a folder with presentations to begin.', - 'Kon dit pakket niet importeren.': 'Could not import this package.', - 'Kon niet van scherm wisselen.': 'Could not switch screens.', + 'Elige una carpeta con presentaciones para empezar.', + 'Kon dit pakket niet importeren.': 'No se pudo importar este paquete.', + 'Kon niet van scherm wisselen.': 'No se pudo cambiar de pantalla.', 'Kon van deze URL geen presentatie ophalen.': - 'Could not fetch a presentation from this URL.', - 'Kopieer afbeelding naar klembord': 'Copy image to clipboard', - 'Kopiëren mislukt.': 'Copy failed.', - 'Kopiëren naar ander deck': 'Copy to another deck', - 'Kopiëren naar klembord mislukt.': 'Copying to clipboard failed.', - 'Koprij verwijderen': 'Remove header row', - 'Laat los om toe te voegen': 'Release to add', + 'No se pudo obtener ninguna presentación desde esta URL.', + 'Kopieer afbeelding naar klembord': 'Copiar imagen al portapapeles', + 'Kopiëren mislukt.': 'Error al copiar.', + 'Kopiëren naar ander deck': 'Copiar a otra presentación', + 'Kopiëren naar klembord mislukt.': 'Error al copiar al portapapeles.', + 'Koprij verwijderen': 'Quitar fila de encabezado', + 'Laat los om toe te voegen': 'Suelta para añadir', 'Laatste slide': 'Diapositiva final', 'Let op: deze afbeelding wordt nog gebruikt in': - 'Warning: this image is still used in', - 'Logo kiezen': 'Choose logo', + 'Atención: esta imagen aún se usa en', + 'Logo kiezen': 'Elegir logotipo', 'Logo px': 'Logo px', - 'Logo tonen op deze slide': 'Show logo on this slide', - 'Map met presentaties kiezen': 'Choose presentation folder', - 'Map voor exports': 'Export folder', + 'Logo tonen op deze slide': 'Mostrar logotipo en esta diapositiva', + 'Map met presentaties kiezen': 'Elegir carpeta de presentaciones', + 'Map voor exports': 'Carpeta de exportaciones', 'Markdown kon niet worden verwerkt. Controleer de syntax.': - 'Markdown could not be processed. Check the syntax.', + 'No se pudo procesar el Markdown. Comprueba la sintaxis.', 'Markdown modus — bewerk de volledige presentatie als Marp Markdown': - 'Markdown mode — edit the full presentation as Marp Markdown', + 'Modo Markdown: edita toda la presentación como Marp Markdown', 'Markdown voor laatste slide': 'Markdown para la diapositiva final', - 'Naam van het stijlprofiel': 'Name of the style profile', - 'Niet-opgeslagen werk herstellen?': 'Restore unsaved work?', - 'Niet-opgeslagen wijzigingen': 'Unsaved changes', - 'Niets vervangen': 'Nothing replaced', - 'Nieuw profiel': 'New profile', + 'Naam van het stijlprofiel': 'Nombre del perfil de estilo', + 'Niet-opgeslagen werk herstellen?': '¿Restaurar el trabajo sin guardar?', + 'Niet-opgeslagen wijzigingen': 'Cambios sin guardar', + 'Niets vervangen': 'No se reemplazó nada', + 'Nieuw profiel': 'Nuevo perfil', 'Open eerst een presentatie om afbeeldingen toe te voegen.': - 'Open a presentation before adding images.', - 'Overslaan bij presenteren/exporteren': 'Skip when presenting/exporting', + 'Abre primero una presentación para añadir imágenes.', + 'Overslaan bij presenteren/exporteren': 'Omitir al presentar/exportar', 'PREVIEW': 'VISTA PREVIA', - 'Paginanummers tonen (rechtsonder)': 'Show page numbers (bottom right)', - 'Pakket geëxporteerd naar:': 'Package exported to:', + 'Paginanummers tonen (rechtsonder)': + 'Mostrar números de página (abajo a la derecha)', + 'Pakket geëxporteerd naar:': 'Paquete exportado a:', 'Pas je zoekterm aan of voeg een beschrijving toe.': - 'Adjust your search term or add a description.', + 'Ajusta el término de búsqueda o añade una descripción.', 'Plak de link naar een .ocideck-pakket of een Marp-markdownbestand.': - 'Paste the link to an .ocideck package or a Marp Markdown file.', - 'Preview inklappen': 'Collapse preview', - 'Preview uitklappen': 'Expand preview', - 'Profiel verwijderen': 'Delete profile', - 'Rij verwijderen': 'Remove row', + 'Pega el enlace a un paquete .ocideck o a un archivo Markdown de Marp.', + 'Preview inklappen': 'Contraer vista previa', + 'Preview uitklappen': 'Expandir vista previa', + 'Profiel verwijderen': 'Eliminar perfil', + 'Rij verwijderen': 'Quitar fila', 'SLIDES': 'SLIDES', - 'Sectieachtergrond': 'Section background', - 'Selecteer een\nafbeelding': 'Select an\nimage', - 'Selectie opheffen': 'Clear selection', + 'Sectieachtergrond': 'Fondo de sección', + 'Selecteer een\nafbeelding': 'Selecciona una\nimagen', + 'Selectie opheffen': 'Borrar selección', 'Sleep om de slide-preview breder of smaller te maken': - 'Drag to make the slide preview wider or narrower', + 'Arrastra para ensanchar o estrechar la vista previa de la diapositiva', 'Slide': 'Slide', - 'Slide gekopieerd naar klembord.': 'Slide copied to clipboard.', - 'Slide plakken': 'Paste slide', - 'Slide renderen…': 'Rendering slide…', - 'Slide toevoegen': 'Add slide', + 'Slide gekopieerd naar klembord.': 'Diapositiva copiada al portapapeles.', + 'Slide plakken': 'Pegar diapositiva', + 'Slide renderen…': 'Renderizando diapositiva…', + 'Slide toevoegen': 'Añadir diapositiva', 'Slides gerenderd.': 'Diapositivas renderizadas.', - 'Sluiten (G of Esc)': 'Close (G or Esc)', - 'Sprekersnotities...': 'Speaker notes...', + 'Sluiten (G of Esc)': 'Cerrar (G o Esc)', + 'Sprekersnotities...': 'Notas del orador...', 'Standaard laatste slide gebruiken': 'Usar diapositiva final predeterminada', - 'Standaard map voor presentaties': 'Default presentation folder', - 'Standaardprofiel laden': 'Load default profile', + 'Standaard map voor presentaties': + 'Carpeta predeterminada de presentaciones', + 'Standaardprofiel laden': 'Cargar perfil predeterminado', 'TLP-classificatie (Traffic Light Protocol)': - 'TLP classification (Traffic Light Protocol)', - 'Tabel koptekst': 'Table header text', - 'Tabeltekst': 'Table text', - 'Terug naar standaardstijl': 'Back to default style', + 'Clasificación TLP (Traffic Light Protocol)', + 'Tabel koptekst': 'Texto del encabezado de tabla', + 'Tabeltekst': 'Texto de tabla', + 'Terug naar standaardstijl': 'Volver al estilo predeterminado', 'Terugzetten (volledige afbeelding zichtbaar)': - 'Reset (full image visible)', - 'Tijd resetten (R)': 'Reset timer (R)', + 'Restablecer (imagen completa visible)', + 'Tijd resetten (R)': 'Restablecer tiempo (R)', 'Tip: druk op Enter binnen een cel voor een nieuwe regel.': - 'Tip: press Enter inside a cell for a new line.', - 'Titelachtergrond': 'Title background', - 'Titeltekst': 'Title text', - 'Toepassen': 'Apply', + 'Consejo: pulsa Enter dentro de una celda para una nueva línea.', + 'Titelachtergrond': 'Fondo de título', + 'Titeltekst': 'Texto del título', + 'Toepassen': 'Aplicar', 'Tokens: {page}, {total}, {date}, {title}. Footer verschijnt op alle slides behalve titel- en sectieslides, tenzij je hem per slide uitzet.': - 'Tokens: {page}, {total}, {date}, {title}. The footer appears on all slides except title and section slides, unless you disable it per slide.', + 'Tokens: {page}, {total}, {date}, {title}. El pie de página aparece en todas las diapositivas salvo las de título y de sección, a menos que lo desactives por diapositiva.', 'Typ zoektermen om slides uit al je presentaties te vinden.': - 'Type search terms to find slides across your presentations.', - 'Uitgezoomd': 'Zoomed out', - 'Uitzoomen (meer van de foto zichtbaar)': - 'Zoom out (more of the photo visible)', - 'Verwijder afbeelding': 'Remove image', - 'Verwijder logo': 'Remove logo', + 'Escribe términos de búsqueda para encontrar diapositivas en todas tus presentaciones.', + 'Uitgezoomd': 'Reducido', + 'Uitzoomen (meer van de foto zichtbaar)': 'Alejar (se ve más de la foto)', + 'Verwijder afbeelding': 'Quitar imagen', + 'Verwijder logo': 'Quitar logotipo', 'Verwijderen maakt die slides leeg. Dit kan niet ongedaan worden gemaakt.': - 'Deleting will clear those slides. This cannot be undone.', - 'Volledig zichtbaar (100%)': 'Fully visible (100%)', - 'Vul een titel in': 'Enter a title', - 'Weer tonen': 'Show again', + 'Al eliminar se vaciarán esas diapositivas. Esto no se puede deshacer.', + 'Volledig zichtbaar (100%)': 'Totalmente visible (100%)', + 'Vul een titel in': 'Introduce un título', + 'Weer tonen': 'Volver a mostrar', 'Weer tonen bij presenteren/exporteren': - 'Show again when presenting/exporting', + 'Volver a mostrar al presentar/exportar', 'Wordt automatisch toegevoegd bij presenteren en exporteren.': 'Se añade automáticamente al presentar y exportar.', - 'Zoek in slides…': 'Search in slides…', + 'Zoek in slides…': 'Buscar en diapositivas…', 'Zoek op bestandsnaam, titel of tekst in de slides…': - 'Search by file name, title or slide text…', - 'Zoek op naam of beschrijving…': 'Search by name or description…', + 'Buscar por nombre de archivo, título o texto en las diapositivas…', + 'Zoek op naam of beschrijving…': 'Buscar por nombre o descripción…', 'Zoek op presentatie, titel of tekst…': - 'Search by presentation, title or text…', + 'Buscar por presentación, título o texto…', 'Zoek slides op tekst, titel, onderschrift, pad…': - 'Search slides by text, title, caption, path…', + 'Buscar diapositivas por texto, título, pie de foto, ruta…', 'bijv. Vertrouwelijk · {title} · {date}': - 'e.g. Confidential · {title} · {date}', + 'p. ej. Confidencial · {title} · {date}', 'gerenderd.': 'renderizada.', - 'geselecteerd': 'selected', - 'meer treffer(s)': 'more match(es)', - 'paginering aan': 'pagination on', + 'geselecteerd': 'seleccionado', + 'meer treffer(s)': 'coincidencia(s) más', + 'paginering aan': 'paginación activada', 'pijltjes + Enter of klik om te springen': - 'arrows + Enter or click to jump', + 'flechas + Enter o clic para saltar', 'presentaties met niet-opgeslagen wijzigingen gevonden van een vorige sessie:': - 'presentations with unsaved changes from a previous session:', + 'presentaciones con cambios sin guardar encontradas de una sesión anterior:', 'renderen…': 'renderizando…', - 'resultaat': 'result', - 'resultaten': 'results', + 'resultaat': 'resultado', + 'resultaten': 'resultados', 'slide': 'slide', - 'slide(s) gekopieerd naar': 'slide(s) copied to', - 'slides geïmporteerd.': 'slides imported.', - 'slides kopiëren naar…': 'slides to copy to…', - 'slides overgeslagen': 'slides skipped', - 'toegevoegd': 'added', - 'treffer(s)': 'match(es)', - 'treffers — verfijn je zoekopdracht': 'matches, refine your search', - 'van de foto zichtbaar': 'of the photo visible', - 'vervangen': 'replaced', - 'verwijderen': 'remove', - 'volledig deck': 'full deck', + 'slide(s) gekopieerd naar': 'diapositiva(s) copiada(s) a', + 'slides geïmporteerd.': 'diapositivas importadas.', + 'slides kopiëren naar…': 'diapositivas a copiar a…', + 'slides overgeslagen': 'diapositivas omitidas', + 'toegevoegd': 'añadido', + 'treffer(s)': 'coincidencia(s)', + 'treffers — verfijn je zoekopdracht': 'coincidencias: afina tu búsqueda', + 'van de foto zichtbaar': 'de la foto visible', + 'vervangen': 'reemplazado', + 'verwijderen': 'quitar', + 'volledig deck': 'presentación completa', 'voorbereiden…': 'preparando…', '↑↓←→ navigeren · Enter kiezen · Dubbelklik selecteert': - '↑↓←→ navigate · Enter chooses · Double-click selects', + '↑↓←→ navegar · Enter elegir · Doble clic selecciona', 'Duplicaten opruimen': 'Limpiar duplicados', 'Zoek byte-identieke afbeeldingen (md5), voeg tags en opmerkingen samen en verwijder de kopieën': 'Buscar imágenes idénticas byte a byte (md5), combinar etiquetas y notas y eliminar las copias', @@ -3827,201 +3873,203 @@ const _dutchSourceStringAdditions = { 'Aflopend sorteren': 'Ôfrinnend sortearje', 'Bij een cirkel worden maximaal de eerste twee reeksen getoond; de labels vormen de segmenten.': 'Sirkeldiagrammen litte maksimaal de earste twa rigen sjen; de labels foarmje de segminten.', - '# Slide\n\nInhoud hier...': '# Slide\n\nContent here...', - '1 slide geïmporteerd.': '1 slide imported.', - '1 slide kopiëren naar…': 'Copy 1 slide to…', - '1 slide overgeslagen': '1 slide skipped', + '# Slide\n\nInhoud hier...': '# Dia\n\nYnhâld hjir...', + '1 slide geïmporteerd.': '1 dia ymportearre.', + '1 slide kopiëren naar…': '1 dia kopiearje nei…', + '1 slide overgeslagen': '1 dia oerslein', 'Accent / bullets': 'Accent / bullets', - 'Achtergrond slides': 'Slide background', + 'Achtergrond slides': 'Eftergrûn dia\'s', 'Afbeelding': 'Ofbylding', - 'Afbeelding gekopieerd naar klembord.': 'Image copied to clipboard.', - 'Afbeelding plakken': 'Paste image', - 'Afbeelding plakken uit klembord': 'Paste image from clipboard', + 'Afbeelding gekopieerd naar klembord.': + 'Ôfbylding kopiearre nei klamboerd.', + 'Afbeelding plakken': 'Ôfbylding plakke', + 'Afbeelding plakken uit klembord': 'Ôfbylding plakke út klamboerd', 'Afbeeldingen → nieuwe slides · .md / .ocideck → openen': - 'Images → new slides · .md / .ocideck → open', - 'Afsluiten (Escape)': 'Exit (Escape)', + 'Ôfbyldingen → nije dia\'s · .md / .ocideck → iepenje', + 'Afsluiten (Escape)': 'Ôfslute (Escape)', 'Alle slides zijn overgeslagen — niets om te exporteren.': - 'All slides are skipped, so there is nothing to export.', + 'Alle dia\'s binne oerslein — neat om te eksportearjen.', 'Alle slides zijn overgeslagen — niets om te tonen.': - 'All slides are skipped, so there is nothing to show.', - 'Alles tonen': 'Show all', - 'Audio verwijderen': 'Remove audio', - 'Automatisch doorgaan na': 'Advance automatically after', - 'Bijv. Kwartaalupdate Q4': 'E.g. Q4 update', + 'Alle dia\'s binne oerslein — neat om sjen te litten.', + 'Alles tonen': 'Alles sjen litte', + 'Audio verwijderen': 'Audio fuortsmite', + 'Automatisch doorgaan na': 'Automatysk fierder nei', + 'Bijv. Kwartaalupdate Q4': 'Bgl. Kwartaalupdate Q4', 'Bullet': 'Puntsje', 'Caption / bronvermelding (bijv. © Naam Fotograaf)': - 'Caption / credit (e.g. © Photographer Name)', + 'Ûnderskrift / boarne (bgl. © Namme Fotograaf)', 'Coverflow': 'Coverflow', 'De afbeelding wordt schermvullend als achtergrond getoond met verminderde opaciteit zodat de tekst leesbaar blijft.': - 'The image is shown fullscreen as a background with reduced opacity so the text remains readable.', + 'De ôfbylding wurdt skermfoljend as eftergrûn toand mei mindere ûntrochsichtigens sadat de tekst lêsber bliuwt.', 'De snelle bruine vos springt over de luie hond.': - 'The quick brown fox jumps over the lazy dog.', + 'De flugge brune foks springt oer de loaie hûn.', 'Deze gegevens worden in de markdown opgeslagen en zijn doorzoekbaar bij het openen.': - 'These details are stored in the Markdown and searchable when opening.', + 'Dizze gegevens wurde yn de markdown opslein en binne trochsykber by it iepenjen.', 'Deze presentatie heeft niet-opgeslagen wijzigingen. Sla de presentatie op voordat het tabblad sluit.': - 'This presentation has unsaved changes. Save it before closing the tab.', + 'Dizze presintaasje hat net-opsleine wizigingen. Bewarje de presintaasje foardat it ljepblêd slút.', 'Deze slide kan geen afbeelding ontvangen. Kies eerst een afbeeldingsslide.': - 'This slide cannot receive an image. Choose an image slide first.', - 'Eerste': 'First', - 'Einde van de presentatie': 'End of presentation', + 'Dizze dia kin gjin ôfbylding ûntfange. Kies earst in ôfbyldingsdia.', + 'Eerste': 'Earste', + 'Einde van de presentatie': 'Ein fan de presintaasje', 'Er is een presentatie met niet-opgeslagen wijzigingen gevonden van een vorige sessie:': - 'A presentation with unsaved changes was found from a previous session:', - 'Er zijn': 'There are', + 'Der is in presintaasje mei net-opsleine wizigingen fûn fan in foarige sesje:', + 'Er zijn': 'Der binne', 'Er zijn presentaties met niet-opgeslagen wijzigingen. Sla ze op voordat de app sluit.': - 'There are presentations with unsaved changes. Save them before closing the app.', - 'Export mislukt:': 'Export failed:', - 'Footer tonen op deze slide': 'Show footer on this slide', + 'Der binne presintaasjes mei net-opsleine wizigingen. Bewarje se foardat de app slút.', + 'Export mislukt:': 'Eksport mislearre:', + 'Footer tonen op deze slide': 'Foettekst sjen litte op dizze dia', 'Gebruik "Bladeren" om afbeeldingen van elke locatie te kiezen.': - 'Use “Browse” to choose images from any location.', + 'Brûk "Blêdzje" om ôfbyldingen fan elke lokaasje te kiezen.', 'Geen afbeelding op het klembord gevonden.': - 'No image found on the clipboard.', + 'Gjin ôfbylding op it klamboerd fûn.', 'Geen ander deck open. Open eerst een ander tabblad.': - 'No other deck is open. Open another tab first.', + 'Gjin oar deck iepen. Iepenje earst in oar ljepblêd.', 'Geen andere presentaties (.md) in deze map gevonden.': - 'No other presentations (.md) found in this folder.', + 'Gjin oare presintaasjes (.md) yn dizze map fûn.', 'Geen presentaties (.md) in deze map gevonden.': - 'No presentations (.md) found in this folder.', - 'Geen presentaties gevonden voor': 'No presentations found for', - 'Geen resultaten': 'No results', - 'Geen resultaten voor': 'No results for', - 'Geen slides gevonden voor': 'No slides found for', - 'Geen slides met': 'No slides with', - 'Geselecteerd': 'Selected', + 'Gjin presintaasjes (.md) yn dizze map fûn.', + 'Geen presentaties gevonden voor': 'Gjin presintaasjes fûn foar', + 'Geen resultaten': 'Gjin resultaten', + 'Geen resultaten voor': 'Gjin resultaten foar', + 'Geen slides gevonden voor': 'Gjin dia\'s fûn foar', + 'Geen slides met': 'Gjin dia\'s mei', + 'Geselecteerd': 'Selektearre', 'HTML opent in elke browser zonder internet en rendert codeblokken, wiskunde en mermaid-diagrammen.': 'HTML iepenet yn elke browser sûnder ynternet en rendert koadeblokken, wiskunde en Mermaid-diagrammen.', 'Het bestand wordt permanent van schijf verwijderd. Deze actie kan niet ongedaan worden gemaakt.': - 'The file will be permanently deleted from disk. This action cannot be undone.', - 'Ingezoomd': 'Zoomed in', + 'It bestân wurdt permanint fan skiif fuortsmiten. Dizze aksje kin net ûngedien makke wurde.', + 'Ingezoomd': 'Ynzoomd', 'Inzoomen (minder van de foto zichtbaar)': - 'Zoom in (less of the photo visible)', - 'Kies een afbeelding': 'Choose an image', + 'Ynzoome (minder fan de foto sichtber)', + 'Kies een afbeelding': 'Kies in ôfbylding', 'Kies een map met presentaties om te beginnen.': - 'Choose a folder with presentations to begin.', - 'Kon dit pakket niet importeren.': 'Could not import this package.', + 'Kies in map mei presintaasjes om te begjinnen.', + 'Kon dit pakket niet importeren.': 'Koe dit pakket net ymportearje.', 'Kon van deze URL geen presentatie ophalen.': - 'Could not fetch a presentation from this URL.', - 'Kopieer afbeelding naar klembord': 'Copy image to clipboard', - 'Kopiëren mislukt.': 'Copy failed.', - 'Kopiëren naar ander deck': 'Copy to another deck', - 'Kopiëren naar klembord mislukt.': 'Copying to clipboard failed.', - 'Koprij verwijderen': 'Remove header row', - 'Laat los om toe te voegen': 'Release to add', + 'Koe fan dizze URL gjin presintaasje ophelje.', + 'Kopieer afbeelding naar klembord': 'Kopiearje ôfbylding nei klamboerd', + 'Kopiëren mislukt.': 'Kopiearjen mislearre.', + 'Kopiëren naar ander deck': 'Kopiearje nei oar deck', + 'Kopiëren naar klembord mislukt.': 'Kopiearjen nei klamboerd mislearre.', + 'Koprij verwijderen': 'Koprige fuortsmite', + 'Laat los om toe te voegen': 'Lit los om ta te foegjen', 'Laatste slide': 'Lêste slide', 'Let op: deze afbeelding wordt nog gebruikt in': - 'Warning: this image is still used in', - 'Logo kiezen': 'Choose logo', + 'Tink derom: dizze ôfbylding wurdt noch brûkt yn', + 'Logo kiezen': 'Logo kieze', 'Logo px': 'Logo px', - 'Logo tonen op deze slide': 'Show logo on this slide', - 'Map met presentaties kiezen': 'Choose presentation folder', - 'Map voor exports': 'Export folder', + 'Logo tonen op deze slide': 'Logo sjen litte op dizze dia', + 'Map met presentaties kiezen': 'Map mei presintaasjes kieze', + 'Map voor exports': 'Map foar eksports', 'Markdown kon niet worden verwerkt. Controleer de syntax.': - 'Markdown could not be processed. Check the syntax.', + 'Markdown koe net ferwurke wurde. Kontrolearje de syntaks.', 'Markdown modus — bewerk de volledige presentatie als Marp Markdown': - 'Markdown mode — edit the full presentation as Marp Markdown', + 'Markdown-modus — bewurkje de folsleine presintaasje as Marp Markdown', 'Markdown voor laatste slide': 'Markdown foar de lêste slide', - 'Naam van het stijlprofiel': 'Name of the style profile', - 'Niet-opgeslagen werk herstellen?': 'Restore unsaved work?', - 'Niet-opgeslagen wijzigingen': 'Unsaved changes', - 'Niets vervangen': 'Nothing replaced', - 'Nieuw profiel': 'New profile', + 'Naam van het stijlprofiel': 'Namme fan it stylprofyl', + 'Niet-opgeslagen werk herstellen?': 'Net-opslein wurk werstelle?', + 'Niet-opgeslagen wijzigingen': 'Net-opsleine wizigingen', + 'Niets vervangen': 'Neat ferfongen', + 'Nieuw profiel': 'Nij profyl', 'Open eerst een presentatie om afbeeldingen toe te voegen.': - 'Open a presentation before adding images.', - 'Overslaan bij presenteren/exporteren': 'Skip when presenting/exporting', + 'Iepenje earst in presintaasje om ôfbyldingen ta te foegjen.', + 'Overslaan bij presenteren/exporteren': + 'Oerslaan by presintearjen/eksportearjen', 'PREVIEW': 'FOARBYLD', - 'Paginanummers tonen (rechtsonder)': 'Show page numbers (bottom right)', - 'Pakket geëxporteerd naar:': 'Package exported to:', + 'Paginanummers tonen (rechtsonder)': 'Sidenûmers sjen litte (rjochtsûnder)', + 'Pakket geëxporteerd naar:': 'Pakket eksportearre nei:', 'Pas je zoekterm aan of voeg een beschrijving toe.': - 'Adjust your search term or add a description.', + 'Pas dyn sykterm oan of foegje in beskriuwing ta.', 'Plak de link naar een .ocideck-pakket of een Marp-markdownbestand.': - 'Paste the link to an .ocideck package or a Marp Markdown file.', - 'Preview inklappen': 'Collapse preview', - 'Preview uitklappen': 'Expand preview', - 'Profiel verwijderen': 'Delete profile', - 'Rij verwijderen': 'Remove row', + 'Plak de keppeling nei in .ocideck-pakket of in Marp-markdownbestân.', + 'Preview inklappen': 'Foarbyld ynklappe', + 'Preview uitklappen': 'Foarbyld útklappe', + 'Profiel verwijderen': 'Profyl fuortsmite', + 'Rij verwijderen': 'Rige fuortsmite', 'SLIDES': 'SLIDES', - 'Sectieachtergrond': 'Section background', - 'Selecteer een\nafbeelding': 'Select an\nimage', - 'Selectie opheffen': 'Clear selection', + 'Sectieachtergrond': 'Seksje-eftergrûn', + 'Selecteer een\nafbeelding': 'Selektearje in\nôfbylding', + 'Selectie opheffen': 'Seleksje opheffe', 'Sleep om de slide-preview breder of smaller te maken': - 'Drag to make the slide preview wider or narrower', + 'Sleep om it dia-foarbyld breder of smeller te meitsjen', 'Slide': 'Slide', - 'Slide gekopieerd naar klembord.': 'Slide copied to clipboard.', - 'Slide plakken': 'Paste slide', - 'Slide renderen…': 'Rendering slide…', - 'Slide toevoegen': 'Add slide', + 'Slide gekopieerd naar klembord.': 'Dia kopiearre nei klamboerd.', + 'Slide plakken': 'Dia plakke', + 'Slide renderen…': 'Dia renderje…', + 'Slide toevoegen': 'Dia tafoegje', 'Slides gerenderd.': 'Slides rendere.', - 'Sluiten (G of Esc)': 'Close (G or Esc)', - 'Sprekersnotities...': 'Speaker notes...', + 'Sluiten (G of Esc)': 'Slute (G of Esc)', + 'Sprekersnotities...': 'Sprekkersnotysjes...', 'Standaard laatste slide gebruiken': 'Standert lêste slide brûke', - 'Standaard map voor presentaties': 'Default presentation folder', - 'Standaardprofiel laden': 'Load default profile', + 'Standaard map voor presentaties': 'Standertmap foar presintaasjes', + 'Standaardprofiel laden': 'Standertprofyl lade', 'TLP-classificatie (Traffic Light Protocol)': - 'TLP classification (Traffic Light Protocol)', - 'Tabel koptekst': 'Table header text', - 'Tabeltekst': 'Table text', - 'Terug naar standaardstijl': 'Back to default style', + 'TLP-klassifikaasje (Traffic Light Protocol)', + 'Tabel koptekst': 'Tabel koptekst', + 'Tabeltekst': 'Tabeltekst', + 'Terug naar standaardstijl': 'Werom nei standertstyl', 'Terugzetten (volledige afbeelding zichtbaar)': - 'Reset (full image visible)', - 'Tijd resetten (R)': 'Reset timer (R)', + 'Weromsette (folsleine ôfbylding sichtber)', + 'Tijd resetten (R)': 'Tiid resette (R)', 'Tip: druk op Enter binnen een cel voor een nieuwe regel.': - 'Tip: press Enter inside a cell for a new line.', - 'Titelachtergrond': 'Title background', - 'Titeltekst': 'Title text', - 'Toepassen': 'Apply', + 'Tip: druk op Enter binnen in sel foar in nije rigel.', + 'Titelachtergrond': 'Titeleftergrûn', + 'Titeltekst': 'Titeltekst', + 'Toepassen': 'Tapasse', 'Tokens: {page}, {total}, {date}, {title}. Footer verschijnt op alle slides behalve titel- en sectieslides, tenzij je hem per slide uitzet.': - 'Tokens: {page}, {total}, {date}, {title}. The footer appears on all slides except title and section slides, unless you disable it per slide.', + 'Tokens: {page}, {total}, {date}, {title}. Foettekst ferskynt op alle dia\'s útsein titel- en seksjedia\'s, útsein ast him per dia útsetst.', 'Typ zoektermen om slides uit al je presentaties te vinden.': - 'Type search terms to find slides across your presentations.', - 'Uitgezoomd': 'Zoomed out', + 'Typ syktermen om dia\'s út al dyn presintaasjes te finen.', + 'Uitgezoomd': 'Útzoomd', 'Uitzoomen (meer van de foto zichtbaar)': - 'Zoom out (more of the photo visible)', - 'Verwijder afbeelding': 'Remove image', - 'Verwijder logo': 'Remove logo', + 'Útzoome (mear fan de foto sichtber)', + 'Verwijder afbeelding': 'Ôfbylding fuortsmite', + 'Verwijder logo': 'Logo fuortsmite', 'Verwijderen maakt die slides leeg. Dit kan niet ongedaan worden gemaakt.': - 'Deleting will clear those slides. This cannot be undone.', - 'Volledig zichtbaar (100%)': 'Fully visible (100%)', - 'Vul een titel in': 'Enter a title', - 'Weer tonen': 'Show again', + 'Fuortsmite makket dy dia\'s leech. Dit kin net ûngedien makke wurde.', + 'Volledig zichtbaar (100%)': 'Folslein sichtber (100%)', + 'Vul een titel in': 'Folje in titel yn', + 'Weer tonen': 'Wer sjen litte', 'Weer tonen bij presenteren/exporteren': - 'Show again when presenting/exporting', + 'Wer sjen litte by presintearjen/eksportearjen', 'Wordt automatisch toegevoegd bij presenteren en exporteren.': 'Wurdt automatysk tafoege by presintearjen en eksportearjen.', - 'Zoek in slides…': 'Search in slides…', + 'Zoek in slides…': 'Sykje yn dia\'s…', 'Zoek op bestandsnaam, titel of tekst in de slides…': - 'Search by file name, title or slide text…', - 'Zoek op naam of beschrijving…': 'Search by name or description…', + 'Sykje op bestânsnamme, titel of tekst yn de dia\'s…', + 'Zoek op naam of beschrijving…': 'Sykje op namme of beskriuwing…', 'Zoek op presentatie, titel of tekst…': - 'Search by presentation, title or text…', + 'Sykje op presintaasje, titel of tekst…', 'Zoek slides op tekst, titel, onderschrift, pad…': - 'Search slides by text, title, caption, path…', + 'Sykje dia\'s op tekst, titel, ûnderskrift, paad…', 'bijv. Vertrouwelijk · {title} · {date}': - 'e.g. Confidential · {title} · {date}', + 'bgl. Fertroulik · {title} · {date}', 'gerenderd.': 'rendere.', - 'geselecteerd': 'selected', - 'meer treffer(s)': 'more match(es)', - 'paginering aan': 'pagination on', + 'geselecteerd': 'selektearre', + 'meer treffer(s)': 'mear treffer(s)', + 'paginering aan': 'sideringsnûmering oan', 'pijltjes + Enter of klik om te springen': - 'arrows + Enter or click to jump', + 'pylkjes + Enter of klik om te springen', 'presentaties met niet-opgeslagen wijzigingen gevonden van een vorige sessie:': - 'presentations with unsaved changes from a previous session:', + 'presintaasjes mei net-opsleine wizigingen fûn fan in foarige sesje:', 'renderen…': 'rendere…', - 'resultaat': 'result', - 'resultaten': 'results', + 'resultaat': 'resultaat', + 'resultaten': 'resultaten', 'slide': 'slide', - 'slide(s) gekopieerd naar': 'slide(s) copied to', - 'slides geïmporteerd.': 'slides imported.', - 'slides kopiëren naar…': 'slides to copy to…', - 'slides overgeslagen': 'slides skipped', - 'toegevoegd': 'added', - 'treffer(s)': 'match(es)', - 'treffers — verfijn je zoekopdracht': 'matches, refine your search', - 'van de foto zichtbaar': 'of the photo visible', - 'vervangen': 'replaced', - 'verwijderen': 'remove', - 'volledig deck': 'full deck', + 'slide(s) gekopieerd naar': 'dia(\'s) kopiearre nei', + 'slides geïmporteerd.': 'dia\'s ymportearre.', + 'slides kopiëren naar…': 'dia\'s kopiearje nei…', + 'slides overgeslagen': 'dia\'s oerslein', + 'toegevoegd': 'tafoege', + 'treffer(s)': 'treffer(s)', + 'treffers — verfijn je zoekopdracht': 'treffers — ferfynje dyn sykopdracht', + 'van de foto zichtbaar': 'fan de foto sichtber', + 'vervangen': 'ferfongen', + 'verwijderen': 'fuortsmite', + 'volledig deck': 'folslein deck', 'voorbereiden…': 'tariede…', '↑↓←→ navigeren · Enter kiezen · Dubbelklik selecteert': - '↑↓←→ navigate · Enter chooses · Double-click selects', + '↑↓←→ navigearje · Enter kieze · Dûbelklik selektearret', 'Duplicaten opruimen': 'Duplikaten opromje', 'Zoek byte-identieke afbeeldingen (md5), voeg tags en opmerkingen samen en verwijder de kopieën': 'Sykje byte-identike ôfbyldings (md5), foegje tags en opmerkings gear en smyt de kopyen fuort', @@ -4123,201 +4171,202 @@ const _dutchSourceStringAdditions = { 'Aflopend sorteren': 'Ordená bahando', 'Bij een cirkel worden maximaal de eerste twee reeksen getoond; de labels vormen de segmenten.': 'Gráfikonan circular ta mustra máximo e promé dos serienan; e labelnan ta forma e segmentonan.', - '# Slide\n\nInhoud hier...': '# Slide\n\nContent here...', - '1 slide geïmporteerd.': '1 slide imported.', - '1 slide kopiëren naar…': 'Copy 1 slide to…', - '1 slide overgeslagen': '1 slide skipped', + '# Slide\n\nInhoud hier...': '# Lámina\n\nKontenido akinan...', + '1 slide geïmporteerd.': '1 lámina importá.', + '1 slide kopiëren naar…': 'Kopia 1 lámina pa…', + '1 slide overgeslagen': '1 lámina pasá over', 'Accent / bullets': 'Accent / bullets', - 'Achtergrond slides': 'Slide background', + 'Achtergrond slides': 'Fondo di lámina', 'Afbeelding': 'Imágen', - 'Afbeelding gekopieerd naar klembord.': 'Image copied to clipboard.', - 'Afbeelding plakken': 'Paste image', - 'Afbeelding plakken uit klembord': 'Paste image from clipboard', + 'Afbeelding gekopieerd naar klembord.': 'Imágen kopiá pa klembord.', + 'Afbeelding plakken': 'Pega imágen', + 'Afbeelding plakken uit klembord': 'Pega imágen for di klembord', 'Afbeeldingen → nieuwe slides · .md / .ocideck → openen': - 'Images → new slides · .md / .ocideck → open', - 'Afsluiten (Escape)': 'Exit (Escape)', + 'Imágennan → lámina nobo · .md / .ocideck → habri', + 'Afsluiten (Escape)': 'Sera (Escape)', 'Alle slides zijn overgeslagen — niets om te exporteren.': - 'All slides are skipped, so there is nothing to export.', + 'Tur lámina ta pasá over — no tin nada pa eksportá.', 'Alle slides zijn overgeslagen — niets om te tonen.': - 'All slides are skipped, so there is nothing to show.', - 'Alles tonen': 'Show all', - 'Audio verwijderen': 'Remove audio', - 'Automatisch doorgaan na': 'Advance automatically after', - 'Bijv. Kwartaalupdate Q4': 'E.g. Q4 update', + 'Tur lámina ta pasá over — no tin nada pa mustra.', + 'Alles tonen': 'Mustra tur', + 'Audio verwijderen': 'Kita audio', + 'Automatisch doorgaan na': 'Sigui outomátikamente despues di', + 'Bijv. Kwartaalupdate Q4': 'Por ehèmpel Aktualisashon Q4', 'Bullet': 'Punto', 'Caption / bronvermelding (bijv. © Naam Fotograaf)': - 'Caption / credit (e.g. © Photographer Name)', + 'Kaption / kredito di fuente (por ehèmpel © Nòmber Fotógrafo)', 'Coverflow': 'Coverflow', 'De afbeelding wordt schermvullend als achtergrond getoond met verminderde opaciteit zodat de tekst leesbaar blijft.': - 'The image is shown fullscreen as a background with reduced opacity so the text remains readable.', + 'E imágen ta wòrdu mustrá yenando henter pantaya komo fondo ku opasidat reducí pa e teksto keda legibel.', 'De snelle bruine vos springt over de luie hond.': - 'The quick brown fox jumps over the lazy dog.', + 'E zoro brùin lihé ta bula riba e kachó floho.', 'Deze gegevens worden in de markdown opgeslagen en zijn doorzoekbaar bij het openen.': - 'These details are stored in the Markdown and searchable when opening.', + 'E datonan aki ta wòrdu guardá den e markdown i ta buskabel ora di habri.', 'Deze presentatie heeft niet-opgeslagen wijzigingen. Sla de presentatie op voordat het tabblad sluit.': - 'This presentation has unsaved changes. Save it before closing the tab.', + 'E presentashon aki tin kambionan no guardá. Guarda e presentashon promé ku e tab sera.', 'Deze slide kan geen afbeelding ontvangen. Kies eerst een afbeeldingsslide.': - 'This slide cannot receive an image. Choose an image slide first.', - 'Eerste': 'First', - 'Einde van de presentatie': 'End of presentation', + 'E lámina aki no por risibí un imágen. Skohe promé un lámina di imágen.', + 'Eerste': 'Promé', + 'Einde van de presentatie': 'Final di e presentashon', 'Er is een presentatie met niet-opgeslagen wijzigingen gevonden van een vorige sessie:': - 'A presentation with unsaved changes was found from a previous session:', - 'Er zijn': 'There are', + 'A haña un presentashon ku kambionan no guardá for di un seshon anterior:', + 'Er zijn': 'Tin', 'Er zijn presentaties met niet-opgeslagen wijzigingen. Sla ze op voordat de app sluit.': - 'There are presentations with unsaved changes. Save them before closing the app.', - 'Export mislukt:': 'Export failed:', - 'Footer tonen op deze slide': 'Show footer on this slide', + 'Tin presentashonnan ku kambionan no guardá. Guarda nan promé ku e app sera.', + 'Export mislukt:': 'Eksportashon a faya:', + 'Footer tonen op deze slide': 'Mustra footer riba e lámina aki', 'Gebruik "Bladeren" om afbeeldingen van elke locatie te kiezen.': - 'Use “Browse” to choose images from any location.', + 'Usa "Buska" pa skohe imágennan for di kualke lokashon.', 'Geen afbeelding op het klembord gevonden.': - 'No image found on the clipboard.', + 'No a haña ningun imágen riba klembord.', 'Geen ander deck open. Open eerst een ander tabblad.': - 'No other deck is open. Open another tab first.', + 'No tin otro deck habrí. Habri promé un otro tab.', 'Geen andere presentaties (.md) in deze map gevonden.': - 'No other presentations (.md) found in this folder.', + 'No a haña otro presentashon (.md) den e karpeta aki.', 'Geen presentaties (.md) in deze map gevonden.': - 'No presentations (.md) found in this folder.', - 'Geen presentaties gevonden voor': 'No presentations found for', - 'Geen resultaten': 'No results', - 'Geen resultaten voor': 'No results for', - 'Geen slides gevonden voor': 'No slides found for', - 'Geen slides met': 'No slides with', - 'Geselecteerd': 'Selected', + 'No a haña presentashon (.md) den e karpeta aki.', + 'Geen presentaties gevonden voor': 'No a haña presentashon pa', + 'Geen resultaten': 'No tin resultado', + 'Geen resultaten voor': 'No tin resultado pa', + 'Geen slides gevonden voor': 'No a haña lámina pa', + 'Geen slides met': 'No tin lámina ku', + 'Geselecteerd': 'Seleshoná', 'HTML opent in elke browser zonder internet en rendert codeblokken, wiskunde en mermaid-diagrammen.': 'HTML ta habri den tur browser sin internet i ta render bloknan di kódigo, matemátika i diagramnan Mermaid.', 'Het bestand wordt permanent van schijf verwijderd. Deze actie kan niet ongedaan worden gemaakt.': - 'The file will be permanently deleted from disk. This action cannot be undone.', - 'Ingezoomd': 'Zoomed in', + 'E archivo ta wòrdu kitá permanentemente for di disko. E akshon aki no por wòrdu deshasí.', + 'Ingezoomd': 'Zoom paden', 'Inzoomen (minder van de foto zichtbaar)': - 'Zoom in (less of the photo visible)', - 'Kies een afbeelding': 'Choose an image', + 'Zoom paden (ménos di e potrèt visibel)', + 'Kies een afbeelding': 'Skohe un imágen', 'Kies een map met presentaties om te beginnen.': - 'Choose a folder with presentations to begin.', - 'Kon dit pakket niet importeren.': 'Could not import this package.', + 'Skohe un karpeta ku presentashon pa kuminsá.', + 'Kon dit pakket niet importeren.': 'No por a importá e paket aki.', 'Kon van deze URL geen presentatie ophalen.': - 'Could not fetch a presentation from this URL.', - 'Kopieer afbeelding naar klembord': 'Copy image to clipboard', - 'Kopiëren mislukt.': 'Copy failed.', - 'Kopiëren naar ander deck': 'Copy to another deck', - 'Kopiëren naar klembord mislukt.': 'Copying to clipboard failed.', - 'Koprij verwijderen': 'Remove header row', - 'Laat los om toe te voegen': 'Release to add', + 'No por a haña un presentashon for di e URL aki.', + 'Kopieer afbeelding naar klembord': 'Kopia imágen pa klembord', + 'Kopiëren mislukt.': 'Kopiamentu a faya.', + 'Kopiëren naar ander deck': 'Kopia pa otro deck', + 'Kopiëren naar klembord mislukt.': 'Kopiamentu pa klembord a faya.', + 'Koprij verwijderen': 'Kita fila di enkabesamentu', + 'Laat los om toe te voegen': 'Laga lòs pa agregá', 'Laatste slide': 'Último slide', 'Let op: deze afbeelding wordt nog gebruikt in': - 'Warning: this image is still used in', - 'Logo kiezen': 'Choose logo', + 'Atenshon: e imágen aki ainda ta wòrdu usá den', + 'Logo kiezen': 'Skohe logo', 'Logo px': 'Logo px', - 'Logo tonen op deze slide': 'Show logo on this slide', - 'Map met presentaties kiezen': 'Choose presentation folder', - 'Map voor exports': 'Export folder', + 'Logo tonen op deze slide': 'Mustra logo riba e lámina aki', + 'Map met presentaties kiezen': 'Skohe karpeta ku presentashon', + 'Map voor exports': 'Karpeta pa eksportashon', 'Markdown kon niet worden verwerkt. Controleer de syntax.': - 'Markdown could not be processed. Check the syntax.', + 'No por a prosesá e markdown. Kontrolá e sintaksis.', 'Markdown modus — bewerk de volledige presentatie als Marp Markdown': - 'Markdown mode — edit the full presentation as Marp Markdown', + 'Modo markdown — edita henter e presentashon komo Marp Markdown', 'Markdown voor laatste slide': 'Markdown pa e último slide', - 'Naam van het stijlprofiel': 'Name of the style profile', - 'Niet-opgeslagen werk herstellen?': 'Restore unsaved work?', - 'Niet-opgeslagen wijzigingen': 'Unsaved changes', - 'Niets vervangen': 'Nothing replaced', - 'Nieuw profiel': 'New profile', + 'Naam van het stijlprofiel': 'Nòmber di e profil di stil', + 'Niet-opgeslagen werk herstellen?': 'Restorá trabou no guardá?', + 'Niet-opgeslagen wijzigingen': 'Kambionan no guardá', + 'Niets vervangen': 'No a remplasá nada', + 'Nieuw profiel': 'Profil nobo', 'Open eerst een presentatie om afbeeldingen toe te voegen.': - 'Open a presentation before adding images.', - 'Overslaan bij presenteren/exporteren': 'Skip when presenting/exporting', + 'Habri promé un presentashon pa agregá imágennan.', + 'Overslaan bij presenteren/exporteren': + 'Pasa over ora di presentá/eksportá', 'PREVIEW': 'PREVIEW', - 'Paginanummers tonen (rechtsonder)': 'Show page numbers (bottom right)', - 'Pakket geëxporteerd naar:': 'Package exported to:', + 'Paginanummers tonen (rechtsonder)': + 'Mustra number di página (abou na man drechi)', + 'Pakket geëxporteerd naar:': 'Paket eksportá pa:', 'Pas je zoekterm aan of voeg een beschrijving toe.': - 'Adjust your search term or add a description.', + 'Ahustá bo término di buskeda òf agregá un deskripshon.', 'Plak de link naar een .ocideck-pakket of een Marp-markdownbestand.': - 'Paste the link to an .ocideck package or a Marp Markdown file.', - 'Preview inklappen': 'Collapse preview', - 'Preview uitklappen': 'Expand preview', - 'Profiel verwijderen': 'Delete profile', - 'Rij verwijderen': 'Remove row', + 'Pega e link pa un paket .ocideck òf un archivo markdown di Marp.', + 'Preview inklappen': 'Sera preview', + 'Preview uitklappen': 'Habri preview', + 'Profiel verwijderen': 'Kita profil', + 'Rij verwijderen': 'Kita fila', 'SLIDES': 'SLIDES', - 'Sectieachtergrond': 'Section background', - 'Selecteer een\nafbeelding': 'Select an\nimage', - 'Selectie opheffen': 'Clear selection', + 'Sectieachtergrond': 'Fondo di sekshon', + 'Selecteer een\nafbeelding': 'Selektá un\nimágen', + 'Selectie opheffen': 'Kita selekshon', 'Sleep om de slide-preview breder of smaller te maken': - 'Drag to make the slide preview wider or narrower', + 'Lastra pa hasi e preview di lámina mas hanchu òf mas smal', 'Slide': 'Slide', - 'Slide gekopieerd naar klembord.': 'Slide copied to clipboard.', - 'Slide plakken': 'Paste slide', - 'Slide renderen…': 'Rendering slide…', - 'Slide toevoegen': 'Add slide', + 'Slide gekopieerd naar klembord.': 'Lámina kopiá pa klembord.', + 'Slide plakken': 'Pega lámina', + 'Slide renderen…': 'Renderando lámina…', + 'Slide toevoegen': 'Agregá lámina', 'Slides gerenderd.': 'Slides a wordu render.', - 'Sluiten (G of Esc)': 'Close (G or Esc)', - 'Sprekersnotities...': 'Speaker notes...', + 'Sluiten (G of Esc)': 'Sera (G òf Esc)', + 'Sprekersnotities...': 'Notanan di e presentadó...', 'Standaard laatste slide gebruiken': 'Usa e último slide standard', - 'Standaard map voor presentaties': 'Default presentation folder', - 'Standaardprofiel laden': 'Load default profile', + 'Standaard map voor presentaties': 'Karpeta standard pa presentashon', + 'Standaardprofiel laden': 'Karga profil standard', 'TLP-classificatie (Traffic Light Protocol)': - 'TLP classification (Traffic Light Protocol)', - 'Tabel koptekst': 'Table header text', - 'Tabeltekst': 'Table text', - 'Terug naar standaardstijl': 'Back to default style', + 'Klasifikashon TLP (Traffic Light Protocol)', + 'Tabel koptekst': 'Teksto di enkabesamentu di tabel', + 'Tabeltekst': 'Teksto di tabel', + 'Terug naar standaardstijl': 'Bèk na stil standard', 'Terugzetten (volledige afbeelding zichtbaar)': - 'Reset (full image visible)', - 'Tijd resetten (R)': 'Reset timer (R)', + 'Restorá (henter imágen visibel)', + 'Tijd resetten (R)': 'Resetiá tempu (R)', 'Tip: druk op Enter binnen een cel voor een nieuwe regel.': - 'Tip: press Enter inside a cell for a new line.', - 'Titelachtergrond': 'Title background', - 'Titeltekst': 'Title text', - 'Toepassen': 'Apply', + 'Tip: primi Enter paden di un seld pa un liña nobo.', + 'Titelachtergrond': 'Fondo di título', + 'Titeltekst': 'Teksto di título', + 'Toepassen': 'Apliká', 'Tokens: {page}, {total}, {date}, {title}. Footer verschijnt op alle slides behalve titel- en sectieslides, tenzij je hem per slide uitzet.': - 'Tokens: {page}, {total}, {date}, {title}. The footer appears on all slides except title and section slides, unless you disable it per slide.', + 'Token: {page}, {total}, {date}, {title}. E footer ta aparesé riba tur lámina ku eksepshon di lámina di título i di sekshon, a ménos ku bo apag\'é pa kada lámina.', 'Typ zoektermen om slides uit al je presentaties te vinden.': - 'Type search terms to find slides across your presentations.', - 'Uitgezoomd': 'Zoomed out', + 'Tek términonan di buskeda pa haña lámina for di tur bo presentashonnan.', + 'Uitgezoomd': 'Zoom afó', 'Uitzoomen (meer van de foto zichtbaar)': - 'Zoom out (more of the photo visible)', - 'Verwijder afbeelding': 'Remove image', - 'Verwijder logo': 'Remove logo', + 'Zoom afó (mas di e potrèt visibel)', + 'Verwijder afbeelding': 'Kita imágen', + 'Verwijder logo': 'Kita logo', 'Verwijderen maakt die slides leeg. Dit kan niet ongedaan worden gemaakt.': - 'Deleting will clear those slides. This cannot be undone.', - 'Volledig zichtbaar (100%)': 'Fully visible (100%)', - 'Vul een titel in': 'Enter a title', - 'Weer tonen': 'Show again', + 'Kitamentu ta laga e láminanan ei bashí. Esaki no por wòrdu deshasí.', + 'Volledig zichtbaar (100%)': 'Kompletamente visibel (100%)', + 'Vul een titel in': 'Yena un título', + 'Weer tonen': 'Mustra atrobe', 'Weer tonen bij presenteren/exporteren': - 'Show again when presenting/exporting', + 'Mustra atrobe ora di presentá/eksportá', 'Wordt automatisch toegevoegd bij presenteren en exporteren.': 'Ta wordu agregá automáticamente ora di presentá i eksportá.', - 'Zoek in slides…': 'Search in slides…', + 'Zoek in slides…': 'Buska den lámina…', 'Zoek op bestandsnaam, titel of tekst in de slides…': - 'Search by file name, title or slide text…', - 'Zoek op naam of beschrijving…': 'Search by name or description…', + 'Buska pa nòmber di archivo, título òf teksto den e lámina…', + 'Zoek op naam of beschrijving…': 'Buska pa nòmber òf deskripshon…', 'Zoek op presentatie, titel of tekst…': - 'Search by presentation, title or text…', + 'Buska pa presentashon, título òf teksto…', 'Zoek slides op tekst, titel, onderschrift, pad…': - 'Search slides by text, title, caption, path…', + 'Buska lámina pa teksto, título, kaption, kaminda…', 'bijv. Vertrouwelijk · {title} · {date}': - 'e.g. Confidential · {title} · {date}', + 'por ehèmpel Konfidensial · {title} · {date}', 'gerenderd.': 'render.', - 'geselecteerd': 'selected', - 'meer treffer(s)': 'more match(es)', - 'paginering aan': 'pagination on', - 'pijltjes + Enter of klik om te springen': - 'arrows + Enter or click to jump', + 'geselecteerd': 'seleshoná', + 'meer treffer(s)': 'mas resultado(nan)', + 'paginering aan': 'numerashon di página sendí', + 'pijltjes + Enter of klik om te springen': 'flecha + Enter òf klek pa bula', 'presentaties met niet-opgeslagen wijzigingen gevonden van een vorige sessie:': - 'presentations with unsaved changes from a previous session:', + 'presentashonnan ku kambionan no guardá haña for di un seshon anterior:', 'renderen…': 'render…', - 'resultaat': 'result', - 'resultaten': 'results', + 'resultaat': 'resultado', + 'resultaten': 'resultadonan', 'slide': 'slide', - 'slide(s) gekopieerd naar': 'slide(s) copied to', - 'slides geïmporteerd.': 'slides imported.', - 'slides kopiëren naar…': 'slides to copy to…', - 'slides overgeslagen': 'slides skipped', - 'toegevoegd': 'added', - 'treffer(s)': 'match(es)', - 'treffers — verfijn je zoekopdracht': 'matches, refine your search', - 'van de foto zichtbaar': 'of the photo visible', - 'vervangen': 'replaced', - 'verwijderen': 'remove', - 'volledig deck': 'full deck', + 'slide(s) gekopieerd naar': 'lámina(nan) kopiá pa', + 'slides geïmporteerd.': 'lámina importá.', + 'slides kopiëren naar…': 'kopia lámina pa…', + 'slides overgeslagen': 'lámina pasá over', + 'toegevoegd': 'agregá', + 'treffer(s)': 'resultado(nan)', + 'treffers — verfijn je zoekopdracht': 'resultado — refiná bo buskeda', + 'van de foto zichtbaar': 'di e potrèt visibel', + 'vervangen': 'remplasá', + 'verwijderen': 'kita', + 'volledig deck': 'henter deck', 'voorbereiden…': 'preparando…', '↑↓←→ navigeren · Enter kiezen · Dubbelklik selecteert': - '↑↓←→ navigate · Enter chooses · Double-click selects', + '↑↓←→ navegá · Enter skohe · Dòbel klek ta selektá', 'Duplicaten opruimen': 'Limpia duplikadonan', 'Zoek byte-identieke afbeeldingen (md5), voeg tags en opmerkingen samen en verwijder de kopieën': 'Buska imágennan idéntiko byte pa byte (md5), kombiná tag i remarkanan i eliminá e kopianan', @@ -4327,8 +4376,7 @@ const _dutchSourceStringAdditions = { 'Di kada grupo un archivo so ta keda. Tag i remarkanan ta wòrdu kombiná i e slidenan ku ta usa un kopia lo mustra despues riba e archivo ku a keda — tambe den presentashonnan ku no ta habrí awor.', 'Opruimen': 'Limpia', '1 presentatiebestand bijgewerkt.': '1 archivo di presentashon aktualisá.', - 'presentatiebestanden bijgewerkt.': - 'archivonan di presentashon aktualisá.', + 'presentatiebestanden bijgewerkt.': 'archivonan di presentashon aktualisá.', 'niet geopend': 'no habrí', '1 dubbele afbeelding verwijderd.': '1 imágen duplikado eliminá.', 'dubbele afbeeldingen verwijderd.': 'imágennan duplikado eliminá.', @@ -4337,23 +4385,9 @@ const _dutchSourceStringAdditions = { 'Alle afbeeldingen hebben tags.': 'Tur imágen tin tag.', 'Zet het filter uit om alles weer te zien.': 'Paga e filter pa mira tur kos atrobe.', - 'Welkom bij OciDeck': 'Welcome to OciDeck', - 'Privacy en gebruik': 'Privacy and Usage', - 'OciDeck is een lokale desktop-applicatie. Uw presentaties en gegevens worden uitsluitend op uw computer opgeslagen.': - 'OciDeck is a local desktop application. Your presentations and data are stored exclusively on your computer.', - 'De app verzamelt geen persoonlijke gegevens, geen statistieken en geen gebruiksgegevens. Uw privacy is onze prioriteit.': - 'The app collects no personal data, no statistics, and no usage data. Your privacy is our priority.', - 'Alle gegevens die u in OciDeck invoert, blijven op uw lokale systeem en worden niet naar externe servers gestuurd.': - 'All data you enter in OciDeck remains on your local system and is not sent to external servers.', - 'Licentie (EUPL 1.2)': 'License (EUPL 1.2)', - 'Door op "Akkoord gaan" te klikken, accepteert u deze voorwaarden en gaat u akkoord met het gebruik van OciDeck.': - 'By clicking "Agree", you accept these terms and agree to the use of OciDeck.', - 'Volledige licentie online': 'Full license online', - 'Akkoord gaan': 'Agree', - 'Toestemming intrekken': 'Revoke Consent', - 'Toestemming ingetrokken': 'Consent revoked', - 'U moet eerst de privacy- en gebruiksvoorwaarden accepteren voordat u OciDeck kunt gebruiken.': - 'You must accept the privacy and usage terms before you can use OciDeck.', + // Consent/welkom-strings staan correct in het Papiaments in de base-map + // (_dutchSourceStrings['pap']); hier geen Engelse placeholders die die + // overschaduwen. 'Intrekken': 'Retirá', 'Privacy': 'Privasidat', 'Toestemming': 'Konsentimentu', diff --git a/lib/state/consent_provider.dart b/lib/state/consent_provider.dart index 37b12a6..df62c4d 100644 --- a/lib/state/consent_provider.dart +++ b/lib/state/consent_provider.dart @@ -1,10 +1,10 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; const _consentKey = 'app_consent_accepted'; -final consentProvider = - NotifierProvider(() { +final consentProvider = NotifierProvider(() { return ConsentNotifier(); }); @@ -12,15 +12,9 @@ class ConsentState { final bool hasAccepted; final bool isLoading; - const ConsentState({ - required this.hasAccepted, - this.isLoading = false, - }); + const ConsentState({required this.hasAccepted, this.isLoading = false}); - ConsentState copyWith({ - bool? hasAccepted, - bool? isLoading, - }) { + ConsentState copyWith({bool? hasAccepted, bool? isLoading}) { return ConsentState( hasAccepted: hasAccepted ?? this.hasAccepted, isLoading: isLoading ?? this.isLoading, @@ -41,6 +35,8 @@ class ConsentNotifier extends Notifier { final hasAccepted = prefs.getBool(_consentKey) ?? false; state = state.copyWith(hasAccepted: hasAccepted, isLoading: false); } catch (e) { + // Can't read the flag: fail closed (gate stays up) but don't hang loading. + debugPrint('ConsentNotifier: could not read consent flag: $e'); state = state.copyWith(isLoading: false); } } @@ -51,6 +47,9 @@ class ConsentNotifier extends Notifier { await prefs.setBool(_consentKey, true); state = state.copyWith(hasAccepted: true); } catch (e) { + // Persisting failed; let the user through this session, but the gate will + // reappear next launch. Surface the failure instead of swallowing it. + debugPrint('ConsentNotifier: could not persist consent: $e'); state = state.copyWith(hasAccepted: true); } } @@ -61,6 +60,7 @@ class ConsentNotifier extends Notifier { await prefs.setBool(_consentKey, false); state = state.copyWith(hasAccepted: false); } catch (e) { + debugPrint('ConsentNotifier: could not persist consent revocation: $e'); state = state.copyWith(hasAccepted: false); } } diff --git a/lib/state/deck_provider.dart b/lib/state/deck_provider.dart index bd44276..77c0b17 100644 --- a/lib/state/deck_provider.dart +++ b/lib/state/deck_provider.dart @@ -201,7 +201,12 @@ class DeckNotifier extends StateNotifier { void removeSlide(int index) { final deck = state.deck; - if (deck == null || deck.slides.length <= 1) return; + if (deck == null || + deck.slides.length <= 1 || + index < 0 || + index >= deck.slides.length) { + return; + } final slides = List.from(deck.slides)..removeAt(index); _mutate(deck.copyWith(slides: slides)); } @@ -254,7 +259,7 @@ class DeckNotifier extends StateNotifier { void duplicateSlide(int index) { final deck = state.deck; - if (deck == null) return; + if (deck == null || index < 0 || index >= deck.slides.length) return; final slides = List.from(deck.slides); slides.insert(index + 1, Slide.duplicate(slides[index])); _mutate(deck.copyWith(slides: slides)); @@ -272,7 +277,7 @@ class DeckNotifier extends StateNotifier { void updateSlide(int index, Slide updated) { final deck = state.deck; - if (deck == null) return; + if (deck == null || index < 0 || index >= deck.slides.length) return; final slides = List.from(deck.slides); slides[index] = updated; // Snel typen op dezelfde slide telt als één ongedaan-maken-stap. @@ -393,6 +398,9 @@ class DeckNotifier extends StateNotifier { title: sub(s.title), subtitle: sub(s.subtitle), bullets: [for (final b in s.bullets) sub(b)], + bullets2: [for (final b in s.bullets2) sub(b)], + columnTitle1: sub(s.columnTitle1), + columnTitle2: sub(s.columnTitle2), quote: sub(s.quote), quoteAuthor: sub(s.quoteAuthor), customMarkdown: sub(s.customMarkdown), @@ -414,6 +422,9 @@ class DeckNotifier extends StateNotifier { s.title, s.subtitle, ...s.bullets, + ...s.bullets2, + s.columnTitle1, + s.columnTitle2, s.quote, s.quoteAuthor, s.customMarkdown, diff --git a/lib/state/tabs_provider.dart b/lib/state/tabs_provider.dart index cb73b19..58449b1 100644 --- a/lib/state/tabs_provider.dart +++ b/lib/state/tabs_provider.dart @@ -101,9 +101,26 @@ class TabsNotifier extends StateNotifier { for (final sub in _subs.values) { sub.cancel(); } + // The tabs' notifiers are not disposed here: at teardown the widget tree is + // still unmounting and may read a tab one last time. The process is ending + // anyway. The per-close path (_disposeTab) is what prevents the real leak. super.dispose(); } + /// Tear down a tab that is being removed: stop listening to it and dispose + /// its notifiers so their listeners and undo/redo history are released. The + /// dispose is deferred to a microtask so any widget still referencing this + /// tab while it unmounts has finished before the notifiers go away. + void _disposeTab(TabInfo tab) { + _subs.remove(tab.id)?.cancel(); + final deckNotifier = tab.deckNotifier; + final editorNotifier = tab.editorNotifier; + Future.microtask(() { + deckNotifier.dispose(); + editorNotifier.dispose(); + }); + } + TabInfo _createTab() { final id = _nextId++; final recoveryId = _uuid.v4(); @@ -163,7 +180,7 @@ class TabsNotifier extends StateNotifier { // Een ongebruikt leeg begin-tabblad vervangen, anders toevoegen. final replaceEmpty = state.tabs.length == 1 && !state.tabs.first.isOpen; if (replaceEmpty) { - _subs.remove(state.tabs.first.id)?.cancel(); + _disposeTab(state.tabs.first); state = state.copyWith(tabs: restored, selectedIndex: 0); } else { final tabs = [...state.tabs, ...restored]; @@ -282,7 +299,7 @@ class TabsNotifier extends StateNotifier { } final tab = state.tabs[index]; _recovery.discard(tab.recoveryId); - _subs.remove(tab.id)?.cancel(); + _disposeTab(tab); final newTabs = List.from(state.tabs)..removeAt(index); final newSelected = index >= newTabs.length ? newTabs.length - 1 : index; state = state.copyWith(tabs: newTabs, selectedIndex: newSelected); diff --git a/test/deck_provider_test.dart b/test/deck_provider_test.dart index 9c0e7c9..473d170 100644 --- a/test/deck_provider_test.dart +++ b/test/deck_provider_test.dart @@ -166,37 +166,39 @@ void main() { expect(n.state.revision, greaterThan(revisionBefore)); }); - test('clearAllChecklists is a single undoable step that restores the checks', () { - final n = _notifier()..newDeck('D'); - final slide = Slide.create(SlideType.bullets).copyWith( - listStyle: ListStyle.checklist, - bullets: ['[x] Klaar', '[ ] Open'], - bullets2: ['[x] Tweede'], - ); - n.loadDeck(n.state.deck!.copyWith(slides: [slide])); - expect(n.checkedChecklistCount, 2); + test( + 'clearAllChecklists is a single undoable step that restores the checks', + () { + final n = _notifier()..newDeck('D'); + final slide = Slide.create(SlideType.bullets).copyWith( + listStyle: ListStyle.checklist, + bullets: ['[x] Klaar', '[ ] Open'], + bullets2: ['[x] Tweede'], + ); + n.loadDeck(n.state.deck!.copyWith(slides: [slide])); + expect(n.checkedChecklistCount, 2); - n.clearAllChecklists(); - expect(n.checkedChecklistCount, 0); - expect(n.state.canUndo, isTrue); - final revisionAfterClear = n.state.revision; + n.clearAllChecklists(); + expect(n.checkedChecklistCount, 0); + expect(n.state.canUndo, isTrue); + final revisionAfterClear = n.state.revision; - n.undo(); + n.undo(); - // One undo restores every checked item in both columns... - expect(n.checkedChecklistCount, 2); - expect(n.state.deck!.slides.first.bullets, ['[x] Klaar', '[ ] Open']); - expect(n.state.deck!.slides.first.bullets2, ['[x] Tweede']); - // ...and bumps the revision again so the open editor reflects the restore. - expect(n.state.revision, greaterThan(revisionAfterClear)); - }); + // One undo restores every checked item in both columns... + expect(n.checkedChecklistCount, 2); + expect(n.state.deck!.slides.first.bullets, ['[x] Klaar', '[ ] Open']); + expect(n.state.deck!.slides.first.bullets2, ['[x] Tweede']); + // ...and bumps the revision again so the open editor reflects the restore. + expect(n.state.revision, greaterThan(revisionAfterClear)); + }, + ); test('clearAllChecklists is a no-op when nothing is checked', () { final n = _notifier()..newDeck('D'); - final slide = Slide.create(SlideType.bullets).copyWith( - listStyle: ListStyle.checklist, - bullets: ['[ ] Open'], - ); + final slide = Slide.create( + SlideType.bullets, + ).copyWith(listStyle: ListStyle.checklist, bullets: ['[ ] Open']); n.loadDeck(n.state.deck!.copyWith(slides: [slide])); expect(n.state.canUndo, isFalse); @@ -472,4 +474,31 @@ void main() { n.undo(); // één stap terug herstelt de hele vervanging expect(n.state.deck!.slides.first.title, 'Hallo wereld'); }); + + test('find and replace covers the second column and both column titles', () { + final n = _notifier(); + n.loadDeck( + Deck( + title: 'D', + slides: [ + Slide.create(SlideType.twoBullets).copyWith( + title: 'foo title', + columnTitle1: 'foo left', + columnTitle2: 'foo right', + bullets: ['foo a'], + bullets2: ['foo b', 'foo c'], + ), + ], + ), + ); + + // title + columnTitle1 + columnTitle2 + bullets(1) + bullets2(2) = 6 + expect(n.countMatches('foo'), 6); + expect(n.replaceAll('foo', 'bar'), 6); + + final s = n.state.deck!.slides.first; + expect(s.columnTitle1, 'bar left'); + expect(s.columnTitle2, 'bar right'); + expect(s.bullets2, ['bar b', 'bar c']); + }); } diff --git a/test/file_service_test.dart b/test/file_service_test.dart index 68ed830..679906f 100644 --- a/test/file_service_test.dart +++ b/test/file_service_test.dart @@ -1,5 +1,7 @@ +import 'dart:convert'; import 'dart:io'; +import 'package:archive/archive.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:ocideck/models/deck.dart'; import 'package:ocideck/models/settings.dart'; @@ -62,4 +64,67 @@ void main() { expect(service.currentThemeProfile.logoPath, logo.path); }, ); + + test( + 'importPackageBytes ignores path-traversal entries (zip slip)', + () async { + final temp = await Directory.systemTemp.createTemp('ocideck_zipslip_'); + addTearDown(() async { + if (await temp.exists()) await temp.delete(recursive: true); + }); + + final archive = Archive(); + final md = utf8.encode('---\nmarp: true\n---\n# Hi'); + archive.addFile(ArchiveFile('deck.md', md.length, md)); + final evil = utf8.encode('pwned'); + archive.addFile(ArchiveFile('../evil.txt', evil.length, evil)); + final zipBytes = ZipEncoder().encode(archive); + + final service = FileService( + MarkdownService(), + ImageService(), + () => const ThemeProfile(), + ); + final mdPath = await service.importPackageBytes(zipBytes, temp.path); + + // The traversal entry must not have escaped the extraction folder. + expect(await File(p.join(temp.path, 'evil.txt')).exists(), isFalse); + // The legitimate markdown landed inside it. + expect(mdPath, isNotNull); + expect(p.isWithin(temp.path, mdPath!), isTrue); + expect(await File(mdPath).exists(), isTrue); + }, + ); + + test( + 'importFromUrl refuses non-web schemes and private/loopback hosts', + () async { + final temp = await Directory.systemTemp.createTemp('ocideck_ssrf_'); + addTearDown(() async { + if (await temp.exists()) await temp.delete(recursive: true); + }); + final service = FileService( + MarkdownService(), + ImageService(), + () => const ThemeProfile(), + ); + + // These are all rejected before any network access happens. + for (final url in [ + 'ftp://example.com/x', // non-web scheme + 'file:///etc/passwd', // non-web scheme + 'http://localhost:8080/x.ocideck', // loopback name + 'http://127.0.0.1/x', // loopback IP + 'http://192.168.1.5/x', // private IP + 'http://10.0.0.9/x', // private IP + 'http://169.254.1.1/x', // link-local IP + ]) { + expect( + await service.importFromUrl(url, temp.path), + isNull, + reason: 'should refuse $url', + ); + } + }, + ); } diff --git a/test/marp_html_service_test.dart b/test/marp_html_service_test.dart index 319b8c4..1941acb 100644 --- a/test/marp_html_service_test.dart +++ b/test/marp_html_service_test.dart @@ -77,6 +77,25 @@ void main() {} expect(html, contains(r'<\/script')); }); + test('build() neutralises a mixed-case closing-script breakout', () async { + final service = MarpHtmlService(loadAsset: _diskLoader); + final html = await service.build('# X\n\nfoo bar'); + // Case tricks must not slip past the guard. + expect(html, isNot(contains(''))); + expect(html, contains(r'<\/ScRiPt')); + }); + + test( + 'build() bundles DOMPurify and sanitises the rendered markdown', + () async { + final service = MarpHtmlService(loadAsset: _diskLoader); + final html = await service.build('# X'); + // The sanitiser is inlined and actually used before content hits the DOM. + expect(html, contains('DOMPurify')); + expect(html, contains('DOMPurify.sanitize(')); + }, + ); + test('a theme colours the slides with the profile palette', () async { final service = MarpHtmlService( loadAsset: _diskLoader, @@ -108,7 +127,10 @@ void main() {} codeTextColor: '#33FF33', codeFontFamily: 'Courier New', ); - final html = await service.build('```dart\nvoid main() {}\n```', theme: theme); + final html = await service.build( + '```dart\nvoid main() {}\n```', + theme: theme, + ); expect(html, contains('.slide pre{background:#000000;color:#33FF33')); expect(html, contains('.slide pre code{color:#33FF33'));