From 2e35afc731db98aad2d9849de344708b705be562 Mon Sep 17 00:00:00 2001 From: Chili Palmer Date: Sat, 18 Jul 2026 14:34:40 +0200 Subject: [PATCH] Replace hand-rolled i18n with Fluent. --- Cargo.lock | 84 +++++++ Cargo.toml | 1 + crates/bds-core/Cargo.toml | 1 + crates/bds-core/src/i18n/mod.rs | 219 ++++++++++++------ locales/render/de.ftl | 35 +++ locales/render/de.json | 37 --- locales/render/en.ftl | 35 +++ locales/render/en.json | 37 --- locales/render/es.ftl | 35 +++ locales/render/es.json | 37 --- locales/render/fr.ftl | 35 +++ locales/render/fr.json | 37 --- locales/render/it.ftl | 35 +++ locales/render/it.json | 37 --- locales/ui/de.ftl | 385 +++++++++++++++++++++++++++++++ locales/ui/de.json | 387 -------------------------------- locales/ui/en.ftl | 385 +++++++++++++++++++++++++++++++ locales/ui/en.json | 387 -------------------------------- locales/ui/es.ftl | 385 +++++++++++++++++++++++++++++++ locales/ui/es.json | 387 -------------------------------- locales/ui/fr.ftl | 385 +++++++++++++++++++++++++++++++ locales/ui/fr.json | 387 -------------------------------- locales/ui/it.ftl | 385 +++++++++++++++++++++++++++++++ locales/ui/it.json | 387 -------------------------------- 24 files changed, 2338 insertions(+), 2187 deletions(-) create mode 100644 locales/render/de.ftl delete mode 100644 locales/render/de.json create mode 100644 locales/render/en.ftl delete mode 100644 locales/render/en.json create mode 100644 locales/render/es.ftl delete mode 100644 locales/render/es.json create mode 100644 locales/render/fr.ftl delete mode 100644 locales/render/fr.json create mode 100644 locales/render/it.ftl delete mode 100644 locales/render/it.json create mode 100644 locales/ui/de.ftl delete mode 100644 locales/ui/de.json create mode 100644 locales/ui/en.ftl delete mode 100644 locales/ui/en.json create mode 100644 locales/ui/es.ftl delete mode 100644 locales/ui/es.json create mode 100644 locales/ui/fr.ftl delete mode 100644 locales/ui/fr.json create mode 100644 locales/ui/it.ftl delete mode 100644 locales/ui/it.json diff --git a/Cargo.lock b/Cargo.lock index 7c9aaf8..61ed71d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -799,6 +799,7 @@ dependencies = [ "axum", "chrono", "deunicode", + "fluent-bundle", "image 0.25.10", "keyring", "liquid", @@ -2205,6 +2206,41 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" +[[package]] +name = "fluent-bundle" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01203cb8918f5711e73891b347816d932046f95f54207710bda99beaeb423bf4" +dependencies = [ + "fluent-langneg", + "fluent-syntax", + "intl-memoizer", + "intl_pluralrules", + "rustc-hash 2.1.2", + "self_cell", + "smallvec", + "unic-langid", +] + +[[package]] +name = "fluent-langneg" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eebbe59450baee8282d71676f3bfed5689aeab00b27545e83e5f14b1195e8b0" +dependencies = [ + "unic-langid", +] + +[[package]] +name = "fluent-syntax" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54f0d287c53ffd184d04d8677f590f4ac5379785529e5e08b1c8083acdd5c198" +dependencies = [ + "memchr", + "thiserror 2.0.18", +] + [[package]] name = "fnv" version = "1.0.7" @@ -3537,6 +3573,25 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "intl-memoizer" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "310da2e345f5eb861e7a07ee182262e94975051db9e4223e909ba90f392f163f" +dependencies = [ + "type-map", + "unic-langid", +] + +[[package]] +name = "intl_pluralrules" +version = "7.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972" +dependencies = [ + "unic-langid", +] + [[package]] name = "ipnet" version = "2.12.0" @@ -7218,6 +7273,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", + "serde_core", "zerovec", ] @@ -7490,6 +7546,15 @@ dependencies = [ "toml 0.5.11", ] +[[package]] +name = "type-map" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90" +dependencies = [ + "rustc-hash 2.1.2", +] + [[package]] name = "typed-builder" version = "0.23.2" @@ -7533,6 +7598,24 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "unic-langid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28ba52c9b05311f4f6e62d5d9d46f094bd6e84cb8df7b3ef952748d752a7d05" +dependencies = [ + "unic-langid-impl", +] + +[[package]] +name = "unic-langid-impl" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" +dependencies = [ + "tinystr", +] + [[package]] name = "unicase" version = "2.9.0" @@ -9370,6 +9453,7 @@ version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ + "serde", "yoke", "zerofrom", "zerovec-derive", diff --git a/Cargo.toml b/Cargo.toml index 02b3bd3..b670800 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,6 +32,7 @@ walkdir = "2" image = "0.25" rust-stemmers = "1" sys-locale = "0.3" +fluent-bundle = "0.16" dirs = "5" open = "5" pulldown-cmark = "0.13" diff --git a/crates/bds-core/Cargo.toml b/crates/bds-core/Cargo.toml index 2601882..415c2a7 100644 --- a/crates/bds-core/Cargo.toml +++ b/crates/bds-core/Cargo.toml @@ -19,6 +19,7 @@ walkdir = { workspace = true } image = { workspace = true } rust-stemmers = { workspace = true } sys-locale = { workspace = true } +fluent-bundle = { workspace = true } pulldown-cmark = { workspace = true } liquid = { workspace = true } liquid-core = { workspace = true } diff --git a/crates/bds-core/src/i18n/mod.rs b/crates/bds-core/src/i18n/mod.rs index cc1b308..434381d 100644 --- a/crates/bds-core/src/i18n/mod.rs +++ b/crates/bds-core/src/i18n/mod.rs @@ -1,3 +1,5 @@ +use fluent_bundle::concurrent::FluentBundle; +use fluent_bundle::{FluentArgs, FluentResource}; use std::collections::HashMap; use std::sync::LazyLock; @@ -74,83 +76,127 @@ pub fn detect_os_locale() -> UiLocale { } } -type Catalog = HashMap; +type Bundle = FluentBundle; -fn parse_catalog(json: &str) -> Catalog { - serde_json::from_str(json).unwrap_or_default() +const UI_EN: &str = include_str!("../../../../locales/ui/en.ftl"); +const RENDER_EN: &str = include_str!("../../../../locales/render/en.ftl"); + +fn resource(source: &str) -> FluentResource { + FluentResource::try_new(source.to_owned()) + .unwrap_or_else(|(_, errors)| panic!("invalid Fluent catalog: {errors:?}")) } -static CATALOG_EN: LazyLock = - LazyLock::new(|| parse_catalog(include_str!("../../../../locales/ui/en.json"))); -static CATALOG_DE: LazyLock = - LazyLock::new(|| parse_catalog(include_str!("../../../../locales/ui/de.json"))); -static CATALOG_FR: LazyLock = - LazyLock::new(|| parse_catalog(include_str!("../../../../locales/ui/fr.json"))); -static CATALOG_IT: LazyLock = - LazyLock::new(|| parse_catalog(include_str!("../../../../locales/ui/it.json"))); -static CATALOG_ES: LazyLock = - LazyLock::new(|| parse_catalog(include_str!("../../../../locales/ui/es.json"))); - -// ── Render catalogs (content/template locale, independent of UI locale) ── - -static RENDER_EN: LazyLock = - LazyLock::new(|| parse_catalog(include_str!("../../../../locales/render/en.json"))); -static RENDER_DE: LazyLock = - LazyLock::new(|| parse_catalog(include_str!("../../../../locales/render/de.json"))); -static RENDER_FR: LazyLock = - LazyLock::new(|| parse_catalog(include_str!("../../../../locales/render/fr.json"))); -static RENDER_IT: LazyLock = - LazyLock::new(|| parse_catalog(include_str!("../../../../locales/render/it.json"))); -static RENDER_ES: LazyLock = - LazyLock::new(|| parse_catalog(include_str!("../../../../locales/render/es.json"))); - -fn render_catalog_for(code: &str) -> &'static Catalog { - let base = code.split(['-', '_']).next().unwrap_or("en").to_lowercase(); - match base.as_str() { - "de" => &RENDER_DE, - "fr" => &RENDER_FR, - "it" => &RENDER_IT, - "es" => &RENDER_ES, - _ => &RENDER_EN, +fn bundle(locale: UiLocale, english: &str, localized: &str) -> Bundle { + let mut bundle = FluentBundle::new_concurrent(vec![ + locale.code().parse().expect("supported locale is valid"), + ]); + bundle.set_use_isolating(false); + bundle + .add_resource(resource(english)) + .expect("English Fluent catalog has unique keys"); + if locale != UiLocale::En { + bundle.add_resource_overriding(resource(localized)); } + bundle } -fn catalog_for(locale: UiLocale) -> &'static Catalog { +static UI_CATALOGS: LazyLock<[Bundle; 5]> = LazyLock::new(|| { + [ + bundle(UiLocale::En, UI_EN, UI_EN), + bundle( + UiLocale::De, + UI_EN, + include_str!("../../../../locales/ui/de.ftl"), + ), + bundle( + UiLocale::Fr, + UI_EN, + include_str!("../../../../locales/ui/fr.ftl"), + ), + bundle( + UiLocale::It, + UI_EN, + include_str!("../../../../locales/ui/it.ftl"), + ), + bundle( + UiLocale::Es, + UI_EN, + include_str!("../../../../locales/ui/es.ftl"), + ), + ] +}); + +static RENDER_CATALOGS: LazyLock<[Bundle; 5]> = LazyLock::new(|| { + [ + bundle(UiLocale::En, RENDER_EN, RENDER_EN), + bundle( + UiLocale::De, + RENDER_EN, + include_str!("../../../../locales/render/de.ftl"), + ), + bundle( + UiLocale::Fr, + RENDER_EN, + include_str!("../../../../locales/render/fr.ftl"), + ), + bundle( + UiLocale::It, + RENDER_EN, + include_str!("../../../../locales/render/it.ftl"), + ), + bundle( + UiLocale::Es, + RENDER_EN, + include_str!("../../../../locales/render/es.ftl"), + ), + ] +}); + +fn locale_index(locale: UiLocale) -> usize { match locale { - UiLocale::En => &CATALOG_EN, - UiLocale::De => &CATALOG_DE, - UiLocale::Fr => &CATALOG_FR, - UiLocale::It => &CATALOG_IT, - UiLocale::Es => &CATALOG_ES, + UiLocale::En => 0, + UiLocale::De => 1, + UiLocale::Fr => 2, + UiLocale::It => 3, + UiLocale::Es => 4, } } +fn format(bundle: &Bundle, key: &str, params: &[(&str, &str)]) -> Option { + let id = key.replace('.', "-"); + let pattern = bundle.get_message(&id)?.value()?; + let mut args = FluentArgs::new(); + for (name, value) in params { + args.set(*name, *value); + } + let mut errors = Vec::new(); + let value = bundle + .format_pattern(pattern, Some(&args), &mut errors) + .into_owned(); + Some(value) +} + +fn ui_catalog_for(locale: UiLocale) -> &'static Bundle { + &UI_CATALOGS[locale_index(locale)] +} + +fn render_catalog_for(language: &str) -> &'static Bundle { + &RENDER_CATALOGS[locale_index(normalize_language(language))] +} + /// Look up a translation key for the given locale. /// /// Fallback chain: requested locale → English → key itself. /// This implements the MenuTranslations invariant from i18n.allium. pub fn translate(locale: UiLocale, key: &str) -> String { - if let Some(val) = catalog_for(locale).get(key) { - return val.clone(); - } - if locale != UiLocale::En - && let Some(val) = CATALOG_EN.get(key) - { - return val.clone(); - } - key.to_string() + format(ui_catalog_for(locale), key, &[]).unwrap_or_else(|| key.to_owned()) } /// Look up a translation key and substitute `{param}` placeholders. /// /// Parameters are provided as `&[("param_name", "value")]`. pub fn translate_with(locale: UiLocale, key: &str, params: &[(&str, &str)]) -> String { - let mut result = translate(locale, key); - for (name, value) in params { - let placeholder = format!("{{{name}}}"); - result = result.replace(&placeholder, value); - } - result + format(ui_catalog_for(locale), key, params).unwrap_or_else(|| key.to_owned()) } /// Look up a render/template translation key by content language code. @@ -159,25 +205,64 @@ pub fn translate_with(locale: UiLocale, key: &str, params: &[(&str, &str)]) -> S /// Fallback chain: requested language → English → key itself. /// Implements the RenderTranslations invariant from i18n.allium. pub fn translate_render(language: &str, key: &str) -> String { - let catalog = render_catalog_for(language); - if let Some(val) = catalog.get(key) { - return val.clone(); - } - if !language.starts_with("en") - && let Some(val) = RENDER_EN.get(key) - { - return val.clone(); - } - key.to_string() + format(render_catalog_for(language), key, &[]).unwrap_or_else(|| key.to_owned()) } /// Return the entire render translation map for a language. /// /// Used to inject as `translations` into the Liquid template context. pub fn get_render_translations(language: &str) -> &'static HashMap { - render_catalog_for(language) + &RENDER_MAPS[locale_index(normalize_language(language))] } +const RENDER_KEYS: &[&str] = &[ + "render.archive", + "render.pagination.label", + "render.pagination.newer", + "render.pagination.older", + "render.notFound.message", + "render.notFound.back", + "render.photoArchive.empty", + "render.gallery.empty", + "render.tagCloud.empty", + "render.tagCloud.ariaLabel", + "render.calendar.open", + "render.calendar.close", + "render.calendar.title", + "render.calendar.loading", + "render.calendar.error", + "render.taxonomy.ariaLabel", + "render.backlinks.label", + "render.backlinks.ariaLabel", + "render.languageSwitcher.ariaLabel", + "render.video.youtubeTitle", + "render.video.vimeoTitle", + "render.month.1", + "render.month.2", + "render.month.3", + "render.month.4", + "render.month.5", + "render.month.6", + "render.month.7", + "render.month.8", + "render.month.9", + "render.month.10", + "render.month.11", + "render.month.12", + "render.search.placeholder", + "render.search.ariaLabel", +]; + +static RENDER_MAPS: LazyLock<[HashMap; 5]> = LazyLock::new(|| { + std::array::from_fn(|index| { + let locale = UiLocale::all()[index]; + RENDER_KEYS + .iter() + .map(|key| ((*key).to_owned(), translate_render(locale.code(), key))) + .collect() + }) +}); + #[cfg(test)] mod tests { use super::*; diff --git a/locales/render/de.ftl b/locales/render/de.ftl new file mode 100644 index 0000000..ea842ae --- /dev/null +++ b/locales/render/de.ftl @@ -0,0 +1,35 @@ +render-archive = Archiv +render-pagination-label = Seitennummerierung +render-pagination-newer = neuer +render-pagination-older = älter +render-notFound-message = Die angeforderte Vorschauseite konnte nicht gefunden werden. +render-notFound-back = Zurück zur Vorschau-Startseite +render-photoArchive-empty = Keine Fotos für dieses Archiv gefunden. +render-gallery-empty = Keine verknüpften Bilder gefunden. +render-tagCloud-empty = Keine Tags gefunden. +render-tagCloud-ariaLabel = Tag-Wolke +render-calendar-open = Kalender öffnen +render-calendar-close = Kalender schließen +render-calendar-title = Archivkalender +render-calendar-loading = Kalender wird geladen … +render-calendar-error = Kalenderdaten konnten nicht geladen werden. +render-taxonomy-ariaLabel = Taxonomie +render-backlinks-label = Verlinkt von +render-backlinks-ariaLabel = Rückverweise +render-languageSwitcher-ariaLabel = Sprache +render-video-youtubeTitle = YouTube-Video +render-video-vimeoTitle = Vimeo-Video +render-month-1 = Januar +render-month-2 = Februar +render-month-3 = März +render-month-4 = Apr. +render-month-5 = Mai +render-month-6 = Juni +render-month-7 = Juli +render-month-8 = Aug. +render-month-9 = Sept. +render-month-10 = Oktober +render-month-11 = Nov. +render-month-12 = Dezember +render-search-placeholder = Suchen... +render-search-ariaLabel = Seitensuche diff --git a/locales/render/de.json b/locales/render/de.json deleted file mode 100644 index b801939..0000000 --- a/locales/render/de.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "render.archive": "Archiv", - "render.pagination.label": "Seitennummerierung", - "render.pagination.newer": "neuer", - "render.pagination.older": "\u00e4lter", - "render.notFound.message": "Die angeforderte Vorschauseite konnte nicht gefunden werden.", - "render.notFound.back": "Zur\u00fcck zur Vorschau-Startseite", - "render.photoArchive.empty": "Keine Fotos f\u00fcr dieses Archiv gefunden.", - "render.gallery.empty": "Keine verkn\u00fcpften Bilder gefunden.", - "render.tagCloud.empty": "Keine Tags gefunden.", - "render.tagCloud.ariaLabel": "Tag-Wolke", - "render.calendar.open": "Kalender \u00f6ffnen", - "render.calendar.close": "Kalender schlie\u00dfen", - "render.calendar.title": "Archivkalender", - "render.calendar.loading": "Kalender wird geladen \u2026", - "render.calendar.error": "Kalenderdaten konnten nicht geladen werden.", - "render.taxonomy.ariaLabel": "Taxonomie", - "render.backlinks.label": "Verlinkt von", - "render.backlinks.ariaLabel": "R\u00fcckverweise", - "render.languageSwitcher.ariaLabel": "Sprache", - "render.video.youtubeTitle": "YouTube-Video", - "render.video.vimeoTitle": "Vimeo-Video", - "render.month.1": "Januar", - "render.month.2": "Februar", - "render.month.3": "M\u00e4rz", - "render.month.4": "Apr.", - "render.month.5": "Mai", - "render.month.6": "Juni", - "render.month.7": "Juli", - "render.month.8": "Aug.", - "render.month.9": "Sept.", - "render.month.10": "Oktober", - "render.month.11": "Nov.", - "render.month.12": "Dezember", - "render.search.placeholder": "Suchen...", - "render.search.ariaLabel": "Seitensuche" -} diff --git a/locales/render/en.ftl b/locales/render/en.ftl new file mode 100644 index 0000000..e5e593a --- /dev/null +++ b/locales/render/en.ftl @@ -0,0 +1,35 @@ +render-archive = Archive +render-pagination-label = Pagination +render-pagination-newer = newer +render-pagination-older = older +render-notFound-message = The requested preview page could not be found. +render-notFound-back = Back to preview home +render-photoArchive-empty = No photos found for this archive. +render-gallery-empty = No linked images found. +render-tagCloud-empty = No tags found. +render-tagCloud-ariaLabel = Tag cloud +render-calendar-open = Open calendar +render-calendar-close = Close calendar +render-calendar-title = Archive calendar +render-calendar-loading = Loading calendar… +render-calendar-error = Calendar data could not be loaded. +render-taxonomy-ariaLabel = Taxonomy +render-backlinks-label = Linked from +render-backlinks-ariaLabel = Backlinks +render-languageSwitcher-ariaLabel = Language +render-video-youtubeTitle = YouTube video +render-video-vimeoTitle = Vimeo video +render-month-1 = January +render-month-2 = February +render-month-3 = March +render-month-4 = April +render-month-5 = May +render-month-6 = June +render-month-7 = July +render-month-8 = August +render-month-9 = September +render-month-10 = October +render-month-11 = November +render-month-12 = December +render-search-placeholder = Search... +render-search-ariaLabel = Site search diff --git a/locales/render/en.json b/locales/render/en.json deleted file mode 100644 index 36638a4..0000000 --- a/locales/render/en.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "render.archive": "Archive", - "render.pagination.label": "Pagination", - "render.pagination.newer": "newer", - "render.pagination.older": "older", - "render.notFound.message": "The requested preview page could not be found.", - "render.notFound.back": "Back to preview home", - "render.photoArchive.empty": "No photos found for this archive.", - "render.gallery.empty": "No linked images found.", - "render.tagCloud.empty": "No tags found.", - "render.tagCloud.ariaLabel": "Tag cloud", - "render.calendar.open": "Open calendar", - "render.calendar.close": "Close calendar", - "render.calendar.title": "Archive calendar", - "render.calendar.loading": "Loading calendar\u2026", - "render.calendar.error": "Calendar data could not be loaded.", - "render.taxonomy.ariaLabel": "Taxonomy", - "render.backlinks.label": "Linked from", - "render.backlinks.ariaLabel": "Backlinks", - "render.languageSwitcher.ariaLabel": "Language", - "render.video.youtubeTitle": "YouTube video", - "render.video.vimeoTitle": "Vimeo video", - "render.month.1": "January", - "render.month.2": "February", - "render.month.3": "March", - "render.month.4": "April", - "render.month.5": "May", - "render.month.6": "June", - "render.month.7": "July", - "render.month.8": "August", - "render.month.9": "September", - "render.month.10": "October", - "render.month.11": "November", - "render.month.12": "December", - "render.search.placeholder": "Search...", - "render.search.ariaLabel": "Site search" -} diff --git a/locales/render/es.ftl b/locales/render/es.ftl new file mode 100644 index 0000000..0b8337a --- /dev/null +++ b/locales/render/es.ftl @@ -0,0 +1,35 @@ +render-archive = Archivo +render-pagination-label = Paginación +render-pagination-newer = más reciente +render-pagination-older = más antiguo +render-notFound-message = No se pudo encontrar la página de vista previa solicitada. +render-notFound-back = Volver al inicio de vista previa +render-photoArchive-empty = No se encontraron fotos para este archivo. +render-gallery-empty = No se encontraron imágenes vinculadas. +render-tagCloud-empty = No se encontraron etiquetas. +render-tagCloud-ariaLabel = Nube de etiquetas +render-calendar-open = Abrir calendario +render-calendar-close = Cerrar calendario +render-calendar-title = Calendario de archivo +render-calendar-loading = Cargando calendario… +render-calendar-error = No se pudieron cargar los datos del calendario. +render-taxonomy-ariaLabel = Taxonomía +render-backlinks-label = Enlazado desde +render-backlinks-ariaLabel = Retroenlaces +render-languageSwitcher-ariaLabel = Idioma +render-video-youtubeTitle = Vídeo de YouTube +render-video-vimeoTitle = Vídeo de Vimeo +render-month-1 = enero +render-month-2 = febrero +render-month-3 = marzo +render-month-4 = abril +render-month-5 = mayo +render-month-6 = junio +render-month-7 = julio +render-month-8 = agosto +render-month-9 = septiembre +render-month-10 = octubre +render-month-11 = noviembre +render-month-12 = diciembre +render-search-placeholder = Buscar... +render-search-ariaLabel = Buscar en el sitio diff --git a/locales/render/es.json b/locales/render/es.json deleted file mode 100644 index 2bd0435..0000000 --- a/locales/render/es.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "render.archive": "Archivo", - "render.pagination.label": "Paginaci\u00f3n", - "render.pagination.newer": "m\u00e1s reciente", - "render.pagination.older": "m\u00e1s antiguo", - "render.notFound.message": "No se pudo encontrar la p\u00e1gina de vista previa solicitada.", - "render.notFound.back": "Volver al inicio de vista previa", - "render.photoArchive.empty": "No se encontraron fotos para este archivo.", - "render.gallery.empty": "No se encontraron im\u00e1genes vinculadas.", - "render.tagCloud.empty": "No se encontraron etiquetas.", - "render.tagCloud.ariaLabel": "Nube de etiquetas", - "render.calendar.open": "Abrir calendario", - "render.calendar.close": "Cerrar calendario", - "render.calendar.title": "Calendario de archivo", - "render.calendar.loading": "Cargando calendario\u2026", - "render.calendar.error": "No se pudieron cargar los datos del calendario.", - "render.taxonomy.ariaLabel": "Taxonom\u00eda", - "render.backlinks.label": "Enlazado desde", - "render.backlinks.ariaLabel": "Retroenlaces", - "render.languageSwitcher.ariaLabel": "Idioma", - "render.video.youtubeTitle": "V\u00eddeo de YouTube", - "render.video.vimeoTitle": "V\u00eddeo de Vimeo", - "render.month.1": "enero", - "render.month.2": "febrero", - "render.month.3": "marzo", - "render.month.4": "abril", - "render.month.5": "mayo", - "render.month.6": "junio", - "render.month.7": "julio", - "render.month.8": "agosto", - "render.month.9": "septiembre", - "render.month.10": "octubre", - "render.month.11": "noviembre", - "render.month.12": "diciembre", - "render.search.placeholder": "Buscar...", - "render.search.ariaLabel": "Buscar en el sitio" -} diff --git a/locales/render/fr.ftl b/locales/render/fr.ftl new file mode 100644 index 0000000..9af7424 --- /dev/null +++ b/locales/render/fr.ftl @@ -0,0 +1,35 @@ +render-archive = Archives +render-pagination-label = Navigation paginée +render-pagination-newer = plus récent +render-pagination-older = plus ancien +render-notFound-message = La page d’aperçu demandée est introuvable. +render-notFound-back = Retour à l’accueil de l’aperçu +render-photoArchive-empty = Aucune photo trouvée pour cette archive. +render-gallery-empty = Aucune image liée trouvée. +render-tagCloud-empty = Aucun tag trouvé. +render-tagCloud-ariaLabel = Nuage de tags +render-calendar-open = Ouvrir le calendrier +render-calendar-close = Fermer le calendrier +render-calendar-title = Calendrier des archives +render-calendar-loading = Chargement du calendrier… +render-calendar-error = Impossible de charger les données du calendrier. +render-taxonomy-ariaLabel = Taxonomie +render-backlinks-label = Lié depuis +render-backlinks-ariaLabel = Rétroliens +render-languageSwitcher-ariaLabel = Langue +render-video-youtubeTitle = Vidéo YouTube +render-video-vimeoTitle = Vidéo Vimeo +render-month-1 = janvier +render-month-2 = février +render-month-3 = mars +render-month-4 = avril +render-month-5 = mai +render-month-6 = juin +render-month-7 = juillet +render-month-8 = août +render-month-9 = septembre +render-month-10 = octobre +render-month-11 = novembre +render-month-12 = décembre +render-search-placeholder = Rechercher... +render-search-ariaLabel = Recherche du site diff --git a/locales/render/fr.json b/locales/render/fr.json deleted file mode 100644 index ba1285b..0000000 --- a/locales/render/fr.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "render.archive": "Archives", - "render.pagination.label": "Navigation pagin\u00e9e", - "render.pagination.newer": "plus r\u00e9cent", - "render.pagination.older": "plus ancien", - "render.notFound.message": "La page d\u2019aper\u00e7u demand\u00e9e est introuvable.", - "render.notFound.back": "Retour \u00e0 l\u2019accueil de l\u2019aper\u00e7u", - "render.photoArchive.empty": "Aucune photo trouv\u00e9e pour cette archive.", - "render.gallery.empty": "Aucune image li\u00e9e trouv\u00e9e.", - "render.tagCloud.empty": "Aucun tag trouv\u00e9.", - "render.tagCloud.ariaLabel": "Nuage de tags", - "render.calendar.open": "Ouvrir le calendrier", - "render.calendar.close": "Fermer le calendrier", - "render.calendar.title": "Calendrier des archives", - "render.calendar.loading": "Chargement du calendrier\u2026", - "render.calendar.error": "Impossible de charger les donn\u00e9es du calendrier.", - "render.taxonomy.ariaLabel": "Taxonomie", - "render.backlinks.label": "Li\u00e9 depuis", - "render.backlinks.ariaLabel": "R\u00e9troliens", - "render.languageSwitcher.ariaLabel": "Langue", - "render.video.youtubeTitle": "Vid\u00e9o YouTube", - "render.video.vimeoTitle": "Vid\u00e9o Vimeo", - "render.month.1": "janvier", - "render.month.2": "f\u00e9vrier", - "render.month.3": "mars", - "render.month.4": "avril", - "render.month.5": "mai", - "render.month.6": "juin", - "render.month.7": "juillet", - "render.month.8": "ao\u00fbt", - "render.month.9": "septembre", - "render.month.10": "octobre", - "render.month.11": "novembre", - "render.month.12": "d\u00e9cembre", - "render.search.placeholder": "Rechercher...", - "render.search.ariaLabel": "Recherche du site" -} diff --git a/locales/render/it.ftl b/locales/render/it.ftl new file mode 100644 index 0000000..d2ef324 --- /dev/null +++ b/locales/render/it.ftl @@ -0,0 +1,35 @@ +render-archive = Archivio +render-pagination-label = Paginazione +render-pagination-newer = più recente +render-pagination-older = più vecchio +render-notFound-message = La pagina di anteprima richiesta non è stata trovata. +render-notFound-back = Torna alla home di anteprima +render-photoArchive-empty = Nessuna foto trovata per questo archivio. +render-gallery-empty = Nessuna immagine collegata trovata. +render-tagCloud-empty = Nessun tag trovato. +render-tagCloud-ariaLabel = Nuvola di tag +render-calendar-open = Apri calendario +render-calendar-close = Chiudi calendario +render-calendar-title = Calendario archivio +render-calendar-loading = Caricamento calendario… +render-calendar-error = Impossibile caricare i dati del calendario. +render-taxonomy-ariaLabel = Tassonomia +render-backlinks-label = Collegato da +render-backlinks-ariaLabel = Retrocollegamenti +render-languageSwitcher-ariaLabel = Lingua +render-video-youtubeTitle = Video YouTube +render-video-vimeoTitle = Video Vimeo +render-month-1 = gennaio +render-month-2 = febbraio +render-month-3 = marzo +render-month-4 = aprile +render-month-5 = maggio +render-month-6 = giugno +render-month-7 = luglio +render-month-8 = agosto +render-month-9 = settembre +render-month-10 = ottobre +render-month-11 = novembre +render-month-12 = dicembre +render-search-placeholder = Cerca... +render-search-ariaLabel = Ricerca nel sito diff --git a/locales/render/it.json b/locales/render/it.json deleted file mode 100644 index 5f5c41d..0000000 --- a/locales/render/it.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "render.archive": "Archivio", - "render.pagination.label": "Paginazione", - "render.pagination.newer": "pi\u00f9 recente", - "render.pagination.older": "pi\u00f9 vecchio", - "render.notFound.message": "La pagina di anteprima richiesta non \u00e8 stata trovata.", - "render.notFound.back": "Torna alla home di anteprima", - "render.photoArchive.empty": "Nessuna foto trovata per questo archivio.", - "render.gallery.empty": "Nessuna immagine collegata trovata.", - "render.tagCloud.empty": "Nessun tag trovato.", - "render.tagCloud.ariaLabel": "Nuvola di tag", - "render.calendar.open": "Apri calendario", - "render.calendar.close": "Chiudi calendario", - "render.calendar.title": "Calendario archivio", - "render.calendar.loading": "Caricamento calendario\u2026", - "render.calendar.error": "Impossibile caricare i dati del calendario.", - "render.taxonomy.ariaLabel": "Tassonomia", - "render.backlinks.label": "Collegato da", - "render.backlinks.ariaLabel": "Retrocollegamenti", - "render.languageSwitcher.ariaLabel": "Lingua", - "render.video.youtubeTitle": "Video YouTube", - "render.video.vimeoTitle": "Video Vimeo", - "render.month.1": "gennaio", - "render.month.2": "febbraio", - "render.month.3": "marzo", - "render.month.4": "aprile", - "render.month.5": "maggio", - "render.month.6": "giugno", - "render.month.7": "luglio", - "render.month.8": "agosto", - "render.month.9": "settembre", - "render.month.10": "ottobre", - "render.month.11": "novembre", - "render.month.12": "dicembre", - "render.search.placeholder": "Cerca...", - "render.search.ariaLabel": "Ricerca nel sito" -} diff --git a/locales/ui/de.ftl b/locales/ui/de.ftl new file mode 100644 index 0000000..068e63f --- /dev/null +++ b/locales/ui/de.ftl @@ -0,0 +1,385 @@ +menu-group-file = Datei +menu-group-edit = Bearbeiten +menu-group-view = Ansicht +menu-group-blog = Blog +menu-group-help = Hilfe +menu-item-newPost = Neuer Beitrag +menu-item-importMedia = Medien importieren... +menu-item-save = Speichern +menu-item-openInBrowser = Im Browser öffnen +menu-item-openDataFolder = Datenordner öffnen +menu-item-find = Suchen +menu-item-replace = Ersetzen +menu-item-editPreferences = Einstellungen bearbeiten +menu-item-viewPosts = Beiträge +menu-item-viewMedia = Medien +menu-item-toggleSidebar = Seitenleiste umschalten +menu-item-togglePanel = Panel umschalten +menu-item-publishSelected = Ausgewählte veröffentlichen +menu-item-previewPost = Beitragsvorschau +menu-item-rebuildDatabase = Datenbank aus Dateien neu aufbauen +menu-item-reindexText = Suchtext neu indizieren +menu-item-metadataDiff = Metadaten-Diff-Werkzeug +menu-item-editMenu = Blog-Menü bearbeiten +menu-item-generateSitemap = Site rendern +menu-item-regenerateCalendar = Kalender neu erzeugen +menu-item-validateSite = Website validieren +menu-item-validateTranslations = Übersetzungen validieren +menu-item-fillMissingTranslations = Fehlende Übersetzungen ausfüllen +menu-item-uploadSite = Website hochladen +menu-item-about = Über Blogging Desktop Server +menu-item-openDocumentation = Dokumentation öffnen +menu-item-viewOnGitHub = Auf GitHub ansehen +menu-item-reportIssue = Problem melden +activity-posts = Beiträge +activity-pages = Seiten +activity-media = Medien +activity-scripts = Skripte +activity-tags = Schlagwörter +activity-templates = Vorlagen +activity-aiAssistant = KI-Assistent +activity-import = Importieren +activity-sourceControl = Versionskontrolle +common-save = Speichern +common-open = Öffnen +common-cancel = Abbrechen +common-settings = Einstellungen +common-tasks = Aufgaben +common-running = laufend +common-pending = ausstehend +tasks-backgroundTasks = Hintergrundaufgaben +tasks-clearCompleted = Abgeschlossene löschen +tasks-noActive = Keine aktiven Aufgaben +tasks-cancelTask = Aufgabe abbrechen +tasks-triggerTitle = { $running } laufend, { $pending } ausstehend +app-taskCompleted = Aufgabe abgeschlossen: { $message } +app-taskFailed = Aufgabe fehlgeschlagen: { $message } +app-databaseRebuildFailed = Datenbank-Neuaufbau fehlgeschlagen +app-textReindexFailed = Text-Neuindizierung fehlgeschlagen +panel-output = Ausgabe +panel-postLinks = Beitragsverknüpfungen +panel-gitLog = Git-Verlauf +panel-postLinksPlaceholder = Keine Beitragsverknüpfungen vorhanden +panel-gitLogPlaceholder = Kein Git-Verlauf vorhanden +panel-closeTitle = Panel schließen +panel-noRecentTasks = Keine aktuellen Aufgaben +panel-noOutput = Keine Ausgabe +statusBar-posts = { $count } Beiträge +statusBar-media = { $count } Medien +statusBar-ui = UI +statusBar-uiLanguage = UI-Sprache +statusBar-offlineMode = Flugmodus +statusBar-offlineModeActive = Flugmodus (aktiv) +projectSelector-switchProject = Projekt wechseln +projectSelector-projectsHeader = Projekte +projectSelector-newProject = Neues Projekt +projectSelector-createProject = Projekt erstellen +projectSelector-projectName = Projektname +projectSelector-projectNamePlaceholder = Mein Blog +projectSelector-chooseFolder = Ordner wählen... +projectSelector-useDefaultLocation = Standardort verwenden +projectSelector-deleteProject = Projekt löschen +projectSelector-toast-switched = Zu { $name } gewechselt +projectSelector-toast-switchFailed = Projektwechsel fehlgeschlagen +projectSelector-toast-created = Projekt "{ $name }" erstellt +projectSelector-toast-createFailed = Projekt konnte nicht erstellt werden +projectSelector-toast-deleteFailed = Projekt konnte nicht gelöscht werden +tabBar-closeHint = Schließen +tabBar-loading = Laden... +tabBar-unknown = Unbekannt +tabBar-style = Stil +tabBar-menuEditor = Menü-Editor +tabBar-metadataDiff = Metadaten-Diff +tabBar-siteValidation = Website-Validierung +tabBar-translationValidation = Übersetzungsvalidierung +siteValidation-run = Validierung starten +siteValidation-apply = Validierung anwenden +siteValidation-applying = Wird angewendet... +siteValidation-idle = Starte die Website-Validierung, um generierte Dateien mit dem erwarteten Output zu vergleichen. +siteValidation-running = Validierung läuft... +siteValidation-clean = Es wurden keine fehlenden, zusätzlichen oder veralteten generierten Dateien gefunden. +siteValidation-error = Validierung fehlgeschlagen +siteValidation-missing = Fehlende Dateien +siteValidation-extra = Zusätzliche Dateien +siteValidation-stale = Veraltete Dateien +tabBar-documentation = Dokumentation +tabBar-apiDocumentation = API-Dokumentation +tabBar-findDuplicates = Duplikate finden +tabBar-tags = Tags +tabBar-preview = Vorschau +tabBar-modified = Geändert +sidebar-noPostsYet = Noch keine Beiträge +sidebar-noPagesYet = Noch keine Seiten +sidebar-noMediaYet = Noch keine Medien +sidebar-noScriptsYet = Noch keine Skripte +sidebar-noTemplatesYet = Noch keine Vorlagen +sidebar-chatPlaceholder = KI-Assistent erscheint hier +sidebar-importPlaceholder = Inhalte aus externen Quellen importieren +sidebar-gitPlaceholder = Versionskontrolle-Integration +sidebar-loading = Lädt... +sidebar-settingsHeader = Einstellungen +sidebar-tagsHeader = Schlagwörter +sidebar-drafts = Entwürfe +sidebar-published = Veröffentlicht +sidebar-archived = Archiviert +sidebar-loadMore = Mehr laden… +language-en = Englisch +language-de = Deutsch +language-fr = Französisch +language-it = Italienisch +language-es = Spanisch +welcome-title = Willkommen bei bDS +welcome-subtitle = Öffne ein Projekt oder erstelle einen neuen Beitrag. +post-untitled = Unbenannt +post-createFailed = Beitrag konnte nicht erstellt werden: { $error } +engine-rebuildStarted = Datenbank wird aus Dateien neu aufgebaut... +engine-rebuildComplete = Datenbank neu aufgebaut: { $posts } Beiträge, { $media } Medien, { $templates } Vorlagen, { $scripts } Skripte +engine-rebuildFailed = Datenbankaufbau fehlgeschlagen: { $error } +engine-reindexStarted = Suchtext wird neu indiziert... +engine-reindexComplete = Suchtext neu indiziert: { $posts } Beiträge, { $media } Medien +engine-reindexFailed = Suchtext-Indizierung fehlgeschlagen: { $error } +engine-calendarStarted = Kalender wird neu generiert... +engine-calendarComplete = Kalender neu generiert +engine-calendarFailed = Kalender-Generierung fehlgeschlagen: { $error } +engine-calendarNoProject = Kein aktives Projekt +engine-validateTranslationsStarted = Übersetzungen werden validiert... +engine-validateMediaStarted = Medien werden überprüft... +engine-validateTranslationsComplete = Übersetzungsvalidierung: { $dbIssues } DB-Probleme, { $fsIssues } Dateisystem-Probleme +engine-validateTranslationsFailed = Übersetzungsvalidierung fehlgeschlagen: { $error } +engine-fillMissingTranslationsOffline = Übersetzungen können nicht ergänzt werden: KI im Offline-Modus nicht verfügbar +engine-fillMissingTranslationsNoAi = Übersetzungen können nicht ergänzt werden: KI noch nicht verfügbar +engine-uploadStarted = Seite wird hochgeladen... +engine-uploadMissingCredentials = Veröffentlichungsdaten unvollständig. In Projekteinstellungen konfigurieren. +engine-uploadOffline = Hochladen nicht möglich: Flugmodus ist aktiv +engine-generateSiteStarted = Seite wird generiert... +engine-generateSiteNoProject = Kein aktives Projekt +engine-previewDataDirUnavailable = Projekt-Datenverzeichnis nicht verfügbar +engine-previewPortInUse = Der Port des Vorschau-Servers wird bereits verwendet +dialog-selectFolder = Ordner auswählen +dialog-importMedia = Medien importieren +dialog-imageFilter = Bilder +settings-nav-project = Projekt +settings-nav-editor = Editor +settings-nav-content = Inhalt +settings-nav-ai = KI +settings-nav-technology = Technologie +settings-nav-publishing = Veröffentlichung +settings-nav-data = Daten +settings-nav-mcp = MCP +settings-nav-style = Stil +tags-nav-cloud = Tag-Wolke +tags-nav-manage = Tags verwalten +tags-nav-merge = Tags zusammenführen +tags-nav-discover = Tags entdecken +sidebar-chatYesterday = Gestern +modal-confirmDelete-title = Löschen bestätigen +modal-confirmDelete-warning = Diese Aktion kann nicht rückgängig gemacht werden. +modal-confirmDelete-cancel = Abbrechen +modal-confirmDelete-delete = Löschen +modal-confirm-title = Bestätigen +modal-confirm-cancel = Abbrechen +modal-confirm-confirm = Bestätigen +modal-postInsertLink-title = Link einfügen +modal-postInsertLink-description = Wählen Sie einen Beitrag, den Sie verlinken möchten. +modal-postInsertLink-cancel = Abbrechen +modal-postInsertLink-tabInternal = Intern +modal-postInsertLink-tabExternal = Extern +modal-postInsertLink-searchPlaceholder = Beiträge durchsuchen... +modal-postInsertLink-emptyState = Tippen Sie, um Beiträge zu suchen oder verwenden Sie verwandte Beiträge +modal-postInsertLink-createPost = Beitrag erstellen +modal-postInsertLink-insert = Einfügen +modal-postInsertLink-externalUrlPlaceholder = https://example.com +modal-postInsertLink-externalTextPlaceholder = Anzeigetext (optional) +modal-postInsertLink-urlRequired = Eine URL ist erforderlich. +modal-postInsertLink-titleRequired = Geben Sie einen Titel ein, um einen verlinkten Beitrag zu erstellen. +modal-postInsertLink-createFailed = Der verlinkte Beitrag konnte nicht erstellt werden. +modal-postInsertLink-loadFailed = Der ausgewählte Beitrag konnte nicht geladen werden. +modal-insertMedia-title = Medien einfügen +modal-insertMedia-description = Wählen Sie ein Medium zum Einfügen. +modal-insertMedia-cancel = Abbrechen +modal-insertMedia-searchPlaceholder = Medien durchsuchen... +modal-insertMedia-loadFailed = Das ausgewählte Medium konnte nicht geladen werden. +modal-postGallery-title = Mediengalerie +modal-postGallery-description = Klicken Sie auf ein Bild, um es in voller Größe anzuzeigen. +modal-postGallery-close = Schließen +modal-postGallery-backToGrid = Zurück zur Übersicht +modal-postGallery-unavailable = Vorschau nicht verfügbar +modal-aiSuggestions-title = KI-Vorschläge +modal-aiSuggestions-applySelected = Auswahl anwenden +modal-languagePicker-title = Übersetzen nach +sidebar-filter-search = Suchen... +sidebar-filter-toggle = Filter +sidebar-filter-clearAll = Alle Filter zurücksetzen +sidebar-filter-status = Status +sidebar-filter-language = Sprache +sidebar-filter-dateRange = Zeitraum +sidebar-filter-from = Von (JJJJ-MM-TT) +sidebar-filter-to = Bis (JJJJ-MM-TT) +editor-insertLink = Link einfügen +editor-insertMedia = Medium einfügen +editor-gallery = Galerie +sidebar-filter-tags = Tags +sidebar-filter-categories = Kategorien +sidebar-filter-calendar = Archiv +sidebar-filter-noResults = Keine Treffer +editor-title = Titel +editor-titlePlaceholder = Titel eingeben... +editor-slug = Slug +editor-slugPlaceholder = slug-eingeben +editor-content = Inhalt +editor-contentPlaceholder = Inhalt schreiben... +editor-excerpt = Auszug +editor-excerptPlaceholder = Kurze Zusammenfassung... +editor-author = Autor +editor-language = Sprache +editor-aiAnalyze = Mit KI analysieren +editor-detectLanguage = Sprache erkennen +editor-quickActions = Schnellaktionen +editor-modeMarkdown = Markdown +editor-modePreview = Vorschau +editor-suggestTaxonomy = Taxonomie vorschlagen +editor-translate = Übersetzen +editor-templateSlug = Vorlage +editor-doNotTranslate = Nicht übersetzen +editor-publish = Veröffentlichen +editor-discard = Verwerfen +editor-duplicate = Duplizieren +editor-validate = Validieren +editor-run = Ausführen +editor-checkSyntax = Syntax prüfen +editor-kind = Art +editor-enabled = Aktiviert +editor-entrypoint = Einstiegspunkt +editor-alt = Alternativtext +editor-altPlaceholder = Bild beschreiben... +editor-caption = Bildunterschrift +editor-metadata = Metadaten +editor-tags = Tags +editor-tagsPlaceholder = Tag hinzufügen... +editor-categories = Kategorien +editor-categoriesPlaceholder = Kategorie hinzufügen... +editor-outlinks = Ausgehende Links +editor-backlinks = Eingehende Links +editor-linkedMedia = Verknüpfte Medien +editor-linkedMediaEmpty = Noch keine verknüpften Medien. +editor-linkExistingMedia = Vorhandenes verknüpfen +editor-linkToPost = Mit Beitrag verknüpfen +editor-linkedPosts = Verknüpfte Beiträge +editor-linkedPostsEmpty = Mit keinen Beiträgen verknüpft. +editor-postPickerSearch = Beiträge suchen +editor-postPickerSearchPlaceholder = Beiträge suchen... +editor-unlinkMedia = Verknüpfung lösen +editor-linkedMediaKindImage = Bild +editor-linkedMediaKindFile = Datei +editor-untitled = Ohne Titel +editor-createdAt = Erstellt +editor-updatedAt = Aktualisiert +editor-publishedAt = Veröffentlicht +tags-noTags = Noch keine Tags +tags-cloudSection = Wolke +tags-cloudHelp = Wählen Sie einen oder mehrere Tags aus, um sie zu bearbeiten, zu löschen oder zusammenzuführen. +tags-selectedCount = { $count } ausgewählt +tags-clearSelection = Auswahl aufheben +tags-createSection = Tag erstellen +tags-createPlaceholder = neues-tag +tags-createButton = Erstellen +tags-editTag = Tag bearbeiten +tags-manageSection = Verwalten +tags-name = Name +tags-color = Farbe +tags-colorPresets = Farbvorgaben +tags-postTemplate = Beitragsvorlage +tags-noTemplate = Keine +tags-merge = Zusammenführen +tags-mergeTarget = Ziel-Tag +tags-mergeSection = Zusammenführen +tags-mergeHelp = Wählen Sie mindestens zwei Tags aus der Wolke oder Liste aus, um sie zusammenzuführen. +tags-mergePreview = Zu löschende Tags: { $tags } +tags-mergeConfirmTitle = Tags zusammenführen +tags-mergeConfirmMessage = { $count } Tags in { $target } zusammenführen? Dies kann nicht rückgängig gemacht werden. +tags-deleteUsage = Dieses Tag wird in { $count } Beiträgen verwendet. +tags-discoverSection = Entdecken +tags-discoverDescription = Tags aus aktuellen Beiträgen entdecken und tags.json passend zur Datenbank neu schreiben. +tags-discoverButton = Entdecken +tags-selectTag = Tag zum Bearbeiten auswählen +template-forceDeleteTitle = Vorlage zwangsweise löschen +template-forceDeleteMessage = Diese Vorlage wird von { $posts } Beiträgen und { $tags } Tags verwendet. Trotzdem löschen? +common-add = Hinzufügen +common-remove = Entfernen +common-clear = Leeren +common-noResults = Keine Ergebnisse +settings-projectName = Projektname +settings-projectDescription = Beschreibung +settings-dataPath = Datenordner +settings-browse = Durchsuchen... +settings-reset = Zurücksetzen +settings-publicUrl = Öffentliche URL +settings-mainLanguage = Hauptsprache +settings-mainLanguageRequired = erforderlich +settings-blogLanguages = Blogsprachen +settings-defaultAuthor = Standardautor +settings-maxPostsPerPage = Beiträge pro Seite +settings-blogmarkCategory = Blogmark-Kategorie +settings-defaultMode = Standard-Editormodus +settings-diffViewStyle = Diff-Ansicht +settings-categoryTitle = Titel für { $category } +settings-categoryPostTemplate = Beitragsvorlage +settings-categoryListTemplate = Listenvorlage +settings-categoryRenderInLists = In Listen rendern +settings-categoryShowTitles = Titel anzeigen +settings-addCategory = Kategorie hinzufügen +settings-resetCategories = Auf Standard zurücksetzen +settings-wrapLongLines = Lange Zeilen umbrechen +settings-hideUnchangedRegions = Unveränderte Bereiche ausblenden +settings-offlineMode = Flugmodus +settings-onlineEndpointSection = Online-Endpunkt +settings-onlineEndpointUrl = URL des Online-Endpunkts +settings-onlineEndpointModel = Modell des Online-Endpunkts +settings-onlineApiKey = Online-API-Schlüssel +settings-airplaneEndpointSection = Flugmodus-Endpunkt +settings-airplaneEndpointUrl = URL des Flugmodus-Endpunkts +settings-airplaneEndpointModel = Modell des Flugmodus-Endpunkts +settings-refreshModels = Modelle aktualisieren +settings-defaultModel = Standardmodell +settings-titleModel = Titelmodell +settings-imageAnalysisModel = Bildanalysemodell +settings-keychainConfigured = Im Schlüsselbund gespeichert +settings-systemPrompt = System-Prompt +settings-resetToDefault = Auf Standard zurücksetzen +settings-luaRuntimeOnly = Lua ist die einzige Skriptlaufzeit in der Rust-App. +settings-semanticSimilarityEnabled = Semantische Ähnlichkeit +settings-sshHost = SSH-Host +settings-sshUsername = SSH-Benutzername +settings-sshRemotePath = Remote-Pfad +settings-clear = Leeren +settings-rebuildPosts = Beiträge neu aufbauen +settings-rebuildMedia = Medien neu aufbauen +settings-rebuildScripts = Skripte neu aufbauen +settings-rebuildTemplates = Vorlagen neu aufbauen +settings-rebuildLinks = Links neu aufbauen +settings-regenerateThumbnails = Vorschaubilder regenerieren +settings-openDataFolder = Datenordner öffnen +settings-contentPlaceholder = Inhaltseinstellungen erscheinen hier +settings-technologyPlaceholder = Technologieeinstellungen erscheinen hier +settings-mcpPlaceholder = MCP-Server-Einstellungen erscheinen hier +dashboard-overview = Übersicht +dashboard-posts = Beiträge +dashboard-media = Medien +dashboard-tags = Tags +dashboard-categories = Kategorien +dashboard-images = Bilder +dashboard-drafts = Entwürfe +dashboard-published = Veröffentlicht +dashboard-archived = Archiviert +dashboard-statCards = Überblick +dashboard-timeline = Zeitachse +dashboard-noTimelineData = Noch keine Zeitachsendaten +dashboard-tagCloud = Tag-Wolke +dashboard-noTags = Noch keine Tags +dashboard-categoryCloud = Kategorie-Wolke +dashboard-recentPosts = Letzte Beiträge +dashboard-noRecentPosts = Keine aktuellen Beiträge +dashboard-and = und +dashboard-pin = Anheften +common-tabNotImplemented = Dieser Bereich wird in einem späteren Meilenstein implementiert. +editor-noPreviewAvailable = Keine Vorschau verfügbar diff --git a/locales/ui/de.json b/locales/ui/de.json deleted file mode 100644 index 33edd76..0000000 --- a/locales/ui/de.json +++ /dev/null @@ -1,387 +0,0 @@ -{ - "menu.group.file": "Datei", - "menu.group.edit": "Bearbeiten", - "menu.group.view": "Ansicht", - "menu.group.blog": "Blog", - "menu.group.help": "Hilfe", - "menu.item.newPost": "Neuer Beitrag", - "menu.item.importMedia": "Medien importieren...", - "menu.item.save": "Speichern", - "menu.item.openInBrowser": "Im Browser öffnen", - "menu.item.openDataFolder": "Datenordner öffnen", - "menu.item.find": "Suchen", - "menu.item.replace": "Ersetzen", - "menu.item.editPreferences": "Einstellungen bearbeiten", - "menu.item.viewPosts": "Beiträge", - "menu.item.viewMedia": "Medien", - "menu.item.toggleSidebar": "Seitenleiste umschalten", - "menu.item.togglePanel": "Panel umschalten", - "menu.item.publishSelected": "Ausgewählte veröffentlichen", - "menu.item.previewPost": "Beitragsvorschau", - "menu.item.rebuildDatabase": "Datenbank aus Dateien neu aufbauen", - "menu.item.reindexText": "Suchtext neu indizieren", - "menu.item.metadataDiff": "Metadaten-Diff-Werkzeug", - "menu.item.editMenu": "Blog-Menü bearbeiten", - "menu.item.generateSitemap": "Site rendern", - "menu.item.regenerateCalendar": "Kalender neu erzeugen", - "menu.item.validateSite": "Website validieren", - "menu.item.validateTranslations": "Übersetzungen validieren", - "menu.item.fillMissingTranslations": "Fehlende Übersetzungen ausfüllen", - "menu.item.uploadSite": "Website hochladen", - "menu.item.about": "Über Blogging Desktop Server", - "menu.item.openDocumentation": "Dokumentation öffnen", - "menu.item.viewOnGitHub": "Auf GitHub ansehen", - "menu.item.reportIssue": "Problem melden", - "activity.posts": "Beiträge", - "activity.pages": "Seiten", - "activity.media": "Medien", - "activity.scripts": "Skripte", - "activity.tags": "Schlagwörter", - "activity.templates": "Vorlagen", - "activity.aiAssistant": "KI-Assistent", - "activity.import": "Importieren", - "activity.sourceControl": "Versionskontrolle", - "common.save": "Speichern", - "common.open": "Öffnen", - "common.cancel": "Abbrechen", - "common.settings": "Einstellungen", - "common.tasks": "Aufgaben", - "common.running": "laufend", - "common.pending": "ausstehend", - "tasks.backgroundTasks": "Hintergrundaufgaben", - "tasks.clearCompleted": "Abgeschlossene löschen", - "tasks.noActive": "Keine aktiven Aufgaben", - "tasks.cancelTask": "Aufgabe abbrechen", - "tasks.triggerTitle": "{running} laufend, {pending} ausstehend", - "app.taskCompleted": "Aufgabe abgeschlossen: {message}", - "app.taskFailed": "Aufgabe fehlgeschlagen: {message}", - "app.databaseRebuildFailed": "Datenbank-Neuaufbau fehlgeschlagen", - "app.textReindexFailed": "Text-Neuindizierung fehlgeschlagen", - "panel.output": "Ausgabe", - "panel.postLinks": "Beitragsverknüpfungen", - "panel.gitLog": "Git-Verlauf", - "panel.postLinksPlaceholder": "Keine Beitragsverknüpfungen vorhanden", - "panel.gitLogPlaceholder": "Kein Git-Verlauf vorhanden", - "panel.closeTitle": "Panel schließen", - "panel.noRecentTasks": "Keine aktuellen Aufgaben", - "panel.noOutput": "Keine Ausgabe", - "statusBar.posts": "{count} Beiträge", - "statusBar.media": "{count} Medien", - "statusBar.ui": "UI", - "statusBar.uiLanguage": "UI-Sprache", - "statusBar.offlineMode": "Flugmodus", - "statusBar.offlineModeActive": "Flugmodus (aktiv)", - "projectSelector.switchProject": "Projekt wechseln", - "projectSelector.projectsHeader": "Projekte", - "projectSelector.newProject": "Neues Projekt", - "projectSelector.createProject": "Projekt erstellen", - "projectSelector.projectName": "Projektname", - "projectSelector.projectNamePlaceholder": "Mein Blog", - "projectSelector.chooseFolder": "Ordner wählen...", - "projectSelector.useDefaultLocation": "Standardort verwenden", - "projectSelector.deleteProject": "Projekt löschen", - "projectSelector.toast.switched": "Zu {name} gewechselt", - "projectSelector.toast.switchFailed": "Projektwechsel fehlgeschlagen", - "projectSelector.toast.created": "Projekt \"{name}\" erstellt", - "projectSelector.toast.createFailed": "Projekt konnte nicht erstellt werden", - "projectSelector.toast.deleteFailed": "Projekt konnte nicht gelöscht werden", - "tabBar.closeHint": "Schließen", - "tabBar.loading": "Laden...", - "tabBar.unknown": "Unbekannt", - "tabBar.style": "Stil", - "tabBar.menuEditor": "Menü-Editor", - "tabBar.metadataDiff": "Metadaten-Diff", - "tabBar.siteValidation": "Website-Validierung", - "tabBar.translationValidation": "Übersetzungsvalidierung", - "siteValidation.run": "Validierung starten", - "siteValidation.apply": "Validierung anwenden", - "siteValidation.applying": "Wird angewendet...", - "siteValidation.idle": "Starte die Website-Validierung, um generierte Dateien mit dem erwarteten Output zu vergleichen.", - "siteValidation.running": "Validierung läuft...", - "siteValidation.clean": "Es wurden keine fehlenden, zusätzlichen oder veralteten generierten Dateien gefunden.", - "siteValidation.error": "Validierung fehlgeschlagen", - "siteValidation.missing": "Fehlende Dateien", - "siteValidation.extra": "Zusätzliche Dateien", - "siteValidation.stale": "Veraltete Dateien", - "tabBar.documentation": "Dokumentation", - "tabBar.apiDocumentation": "API-Dokumentation", - "tabBar.findDuplicates": "Duplikate finden", - "tabBar.tags": "Tags", - "tabBar.preview": "Vorschau", - "tabBar.modified": "Geändert", - "sidebar.noPostsYet": "Noch keine Beiträge", - "sidebar.noPagesYet": "Noch keine Seiten", - "sidebar.noMediaYet": "Noch keine Medien", - "sidebar.noScriptsYet": "Noch keine Skripte", - "sidebar.noTemplatesYet": "Noch keine Vorlagen", - "sidebar.chatPlaceholder": "KI-Assistent erscheint hier", - "sidebar.importPlaceholder": "Inhalte aus externen Quellen importieren", - "sidebar.gitPlaceholder": "Versionskontrolle-Integration", - "sidebar.loading": "Lädt...", - "sidebar.settingsHeader": "Einstellungen", - "sidebar.tagsHeader": "Schlagwörter", - "sidebar.drafts": "Entwürfe", - "sidebar.published": "Veröffentlicht", - "sidebar.archived": "Archiviert", - "sidebar.loadMore": "Mehr laden…", - "language.en": "Englisch", - "language.de": "Deutsch", - "language.fr": "Französisch", - "language.it": "Italienisch", - "language.es": "Spanisch", - "welcome.title": "Willkommen bei bDS", - "welcome.subtitle": "Öffne ein Projekt oder erstelle einen neuen Beitrag.", - "post.untitled": "Unbenannt", - "post.createFailed": "Beitrag konnte nicht erstellt werden: {error}", - "engine.rebuildStarted": "Datenbank wird aus Dateien neu aufgebaut...", - "engine.rebuildComplete": "Datenbank neu aufgebaut: {posts} Beiträge, {media} Medien, {templates} Vorlagen, {scripts} Skripte", - "engine.rebuildFailed": "Datenbankaufbau fehlgeschlagen: {error}", - "engine.reindexStarted": "Suchtext wird neu indiziert...", - "engine.reindexComplete": "Suchtext neu indiziert: {posts} Beiträge, {media} Medien", - "engine.reindexFailed": "Suchtext-Indizierung fehlgeschlagen: {error}", - "engine.calendarStarted": "Kalender wird neu generiert...", - "engine.calendarComplete": "Kalender neu generiert", - "engine.calendarFailed": "Kalender-Generierung fehlgeschlagen: {error}", - "engine.calendarNoProject": "Kein aktives Projekt", - "engine.validateTranslationsStarted": "Übersetzungen werden validiert...", - "engine.validateMediaStarted": "Medien werden überprüft...", - "engine.validateTranslationsComplete": "Übersetzungsvalidierung: {dbIssues} DB-Probleme, {fsIssues} Dateisystem-Probleme", - "engine.validateTranslationsFailed": "Übersetzungsvalidierung fehlgeschlagen: {error}", - "engine.fillMissingTranslationsOffline": "Übersetzungen können nicht ergänzt werden: KI im Offline-Modus nicht verfügbar", - "engine.fillMissingTranslationsNoAi": "Übersetzungen können nicht ergänzt werden: KI noch nicht verfügbar", - "engine.uploadStarted": "Seite wird hochgeladen...", - "engine.uploadMissingCredentials": "Veröffentlichungsdaten unvollständig. In Projekteinstellungen konfigurieren.", - "engine.uploadOffline": "Hochladen nicht möglich: Flugmodus ist aktiv", - "engine.generateSiteStarted": "Seite wird generiert...", - "engine.generateSiteNoProject": "Kein aktives Projekt", - "engine.previewDataDirUnavailable": "Projekt-Datenverzeichnis nicht verfügbar", - "engine.previewPortInUse": "Der Port des Vorschau-Servers wird bereits verwendet", - "dialog.selectFolder": "Ordner auswählen", - "dialog.importMedia": "Medien importieren", - "dialog.imageFilter": "Bilder", - "settings.nav.project": "Projekt", - "settings.nav.editor": "Editor", - "settings.nav.content": "Inhalt", - "settings.nav.ai": "KI", - "settings.nav.technology": "Technologie", - "settings.nav.publishing": "Veröffentlichung", - "settings.nav.data": "Daten", - "settings.nav.mcp": "MCP", - "settings.nav.style": "Stil", - "tags.nav.cloud": "Tag-Wolke", - "tags.nav.manage": "Tags verwalten", - "tags.nav.merge": "Tags zusammenführen", - "tags.nav.discover": "Tags entdecken", - "sidebar.chatYesterday": "Gestern", - "modal.confirmDelete.title": "Löschen bestätigen", - "modal.confirmDelete.warning": "Diese Aktion kann nicht rückgängig gemacht werden.", - "modal.confirmDelete.cancel": "Abbrechen", - "modal.confirmDelete.delete": "Löschen", - "modal.confirm.title": "Bestätigen", - "modal.confirm.cancel": "Abbrechen", - "modal.confirm.confirm": "Bestätigen", - "modal.postInsertLink.title": "Link einfügen", - "modal.postInsertLink.description": "Wählen Sie einen Beitrag, den Sie verlinken möchten.", - "modal.postInsertLink.cancel": "Abbrechen", - "modal.postInsertLink.tabInternal": "Intern", - "modal.postInsertLink.tabExternal": "Extern", - "modal.postInsertLink.searchPlaceholder": "Beiträge durchsuchen...", - "modal.postInsertLink.emptyState": "Tippen Sie, um Beiträge zu suchen oder verwenden Sie verwandte Beiträge", - "modal.postInsertLink.createPost": "Beitrag erstellen", - "modal.postInsertLink.insert": "Einfügen", - "modal.postInsertLink.externalUrlPlaceholder": "https://example.com", - "modal.postInsertLink.externalTextPlaceholder": "Anzeigetext (optional)", - "modal.postInsertLink.urlRequired": "Eine URL ist erforderlich.", - "modal.postInsertLink.titleRequired": "Geben Sie einen Titel ein, um einen verlinkten Beitrag zu erstellen.", - "modal.postInsertLink.createFailed": "Der verlinkte Beitrag konnte nicht erstellt werden.", - "modal.postInsertLink.loadFailed": "Der ausgewählte Beitrag konnte nicht geladen werden.", - "modal.insertMedia.title": "Medien einfügen", - "modal.insertMedia.description": "Wählen Sie ein Medium zum Einfügen.", - "modal.insertMedia.cancel": "Abbrechen", - "modal.insertMedia.searchPlaceholder": "Medien durchsuchen...", - "modal.insertMedia.loadFailed": "Das ausgewählte Medium konnte nicht geladen werden.", - "modal.postGallery.title": "Mediengalerie", - "modal.postGallery.description": "Klicken Sie auf ein Bild, um es in voller Größe anzuzeigen.", - "modal.postGallery.close": "Schließen", - "modal.postGallery.backToGrid": "Zurück zur Übersicht", - "modal.postGallery.unavailable": "Vorschau nicht verfügbar", - "modal.aiSuggestions.title": "KI-Vorschläge", - "modal.aiSuggestions.applySelected": "Auswahl anwenden", - "modal.languagePicker.title": "Übersetzen nach", - "sidebar.filter.search": "Suchen...", - "sidebar.filter.toggle": "Filter", - "sidebar.filter.clearAll": "Alle Filter zurücksetzen", - "sidebar.filter.status": "Status", - "sidebar.filter.language": "Sprache", - "sidebar.filter.dateRange": "Zeitraum", - "sidebar.filter.from": "Von (JJJJ-MM-TT)", - "sidebar.filter.to": "Bis (JJJJ-MM-TT)", - "editor.insertLink": "Link einfügen", - "editor.insertMedia": "Medium einfügen", - "editor.gallery": "Galerie", - "sidebar.filter.tags": "Tags", - "sidebar.filter.categories": "Kategorien", - "sidebar.filter.calendar": "Archiv", - "sidebar.filter.noResults": "Keine Treffer", - "editor.title": "Titel", - "editor.titlePlaceholder": "Titel eingeben...", - "editor.slug": "Slug", - "editor.slugPlaceholder": "slug-eingeben", - "editor.content": "Inhalt", - "editor.contentPlaceholder": "Inhalt schreiben...", - "editor.excerpt": "Auszug", - "editor.excerptPlaceholder": "Kurze Zusammenfassung...", - "editor.author": "Autor", - "editor.language": "Sprache", - "editor.aiAnalyze": "Mit KI analysieren", - "editor.detectLanguage": "Sprache erkennen", - "editor.quickActions": "Schnellaktionen", - "editor.modeMarkdown": "Markdown", - "editor.modePreview": "Vorschau", - "editor.suggestTaxonomy": "Taxonomie vorschlagen", - "editor.translate": "Übersetzen", - "editor.templateSlug": "Vorlage", - "editor.doNotTranslate": "Nicht übersetzen", - "editor.publish": "Veröffentlichen", - "editor.discard": "Verwerfen", - "editor.duplicate": "Duplizieren", - "editor.validate": "Validieren", - "editor.run": "Ausführen", - "editor.checkSyntax": "Syntax prüfen", - "editor.kind": "Art", - "editor.enabled": "Aktiviert", - "editor.entrypoint": "Einstiegspunkt", - "editor.alt": "Alternativtext", - "editor.altPlaceholder": "Bild beschreiben...", - "editor.caption": "Bildunterschrift", - "editor.metadata": "Metadaten", - "editor.tags": "Tags", - "editor.tagsPlaceholder": "Tag hinzufügen...", - "editor.categories": "Kategorien", - "editor.categoriesPlaceholder": "Kategorie hinzufügen...", - "editor.outlinks": "Ausgehende Links", - "editor.backlinks": "Eingehende Links", - "editor.linkedMedia": "Verknüpfte Medien", - "editor.linkedMediaEmpty": "Noch keine verknüpften Medien.", - "editor.linkExistingMedia": "Vorhandenes verknüpfen", - "editor.linkToPost": "Mit Beitrag verknüpfen", - "editor.linkedPosts": "Verknüpfte Beiträge", - "editor.linkedPostsEmpty": "Mit keinen Beiträgen verknüpft.", - "editor.postPickerSearch": "Beiträge suchen", - "editor.postPickerSearchPlaceholder": "Beiträge suchen...", - "editor.unlinkMedia": "Verknüpfung lösen", - "editor.linkedMediaKindImage": "Bild", - "editor.linkedMediaKindFile": "Datei", - "editor.untitled": "Ohne Titel", - "editor.createdAt": "Erstellt", - "editor.updatedAt": "Aktualisiert", - "editor.publishedAt": "Veröffentlicht", - "tags.noTags": "Noch keine Tags", - "tags.cloudSection": "Wolke", - "tags.cloudHelp": "Wählen Sie einen oder mehrere Tags aus, um sie zu bearbeiten, zu löschen oder zusammenzuführen.", - "tags.selectedCount": "{count} ausgewählt", - "tags.clearSelection": "Auswahl aufheben", - "tags.createSection": "Tag erstellen", - "tags.createPlaceholder": "neues-tag", - "tags.createButton": "Erstellen", - "tags.editTag": "Tag bearbeiten", - "tags.manageSection": "Verwalten", - "tags.name": "Name", - "tags.color": "Farbe", - "tags.colorPresets": "Farbvorgaben", - "tags.postTemplate": "Beitragsvorlage", - "tags.noTemplate": "Keine", - "tags.merge": "Zusammenführen", - "tags.mergeTarget": "Ziel-Tag", - "tags.mergeSection": "Zusammenführen", - "tags.mergeHelp": "Wählen Sie mindestens zwei Tags aus der Wolke oder Liste aus, um sie zusammenzuführen.", - "tags.mergePreview": "Zu löschende Tags: {tags}", - "tags.mergeConfirmTitle": "Tags zusammenführen", - "tags.mergeConfirmMessage": "{count} Tags in {target} zusammenführen? Dies kann nicht rückgängig gemacht werden.", - "tags.deleteUsage": "Dieses Tag wird in {count} Beiträgen verwendet.", - "tags.discoverSection": "Entdecken", - "tags.discoverDescription": "Tags aus aktuellen Beiträgen entdecken und tags.json passend zur Datenbank neu schreiben.", - "tags.discoverButton": "Entdecken", - "tags.selectTag": "Tag zum Bearbeiten auswählen", - "template.forceDeleteTitle": "Vorlage zwangsweise löschen", - "template.forceDeleteMessage": "Diese Vorlage wird von {posts} Beiträgen und {tags} Tags verwendet. Trotzdem löschen?", - "common.add": "Hinzufügen", - "common.remove": "Entfernen", - "common.clear": "Leeren", - "common.noResults": "Keine Ergebnisse", - "settings.projectName": "Projektname", - "settings.projectDescription": "Beschreibung", - "settings.dataPath": "Datenordner", - "settings.browse": "Durchsuchen...", - "settings.reset": "Zurücksetzen", - "settings.publicUrl": "Öffentliche URL", - "settings.mainLanguage": "Hauptsprache", - "settings.mainLanguageRequired": "erforderlich", - "settings.blogLanguages": "Blogsprachen", - "settings.defaultAuthor": "Standardautor", - "settings.maxPostsPerPage": "Beiträge pro Seite", - "settings.blogmarkCategory": "Blogmark-Kategorie", - "settings.defaultMode": "Standard-Editormodus", - "settings.diffViewStyle": "Diff-Ansicht", - "settings.categoryTitle": "Titel für {category}", - "settings.categoryPostTemplate": "Beitragsvorlage", - "settings.categoryListTemplate": "Listenvorlage", - "settings.categoryRenderInLists": "In Listen rendern", - "settings.categoryShowTitles": "Titel anzeigen", - "settings.addCategory": "Kategorie hinzufügen", - "settings.resetCategories": "Auf Standard zurücksetzen", - "settings.wrapLongLines": "Lange Zeilen umbrechen", - "settings.hideUnchangedRegions": "Unveränderte Bereiche ausblenden", - "settings.offlineMode": "Flugmodus", - "settings.onlineEndpointSection": "Online-Endpunkt", - "settings.onlineEndpointUrl": "URL des Online-Endpunkts", - "settings.onlineEndpointModel": "Modell des Online-Endpunkts", - "settings.onlineApiKey": "Online-API-Schlüssel", - "settings.airplaneEndpointSection": "Flugmodus-Endpunkt", - "settings.airplaneEndpointUrl": "URL des Flugmodus-Endpunkts", - "settings.airplaneEndpointModel": "Modell des Flugmodus-Endpunkts", - "settings.refreshModels": "Modelle aktualisieren", - "settings.defaultModel": "Standardmodell", - "settings.titleModel": "Titelmodell", - "settings.imageAnalysisModel": "Bildanalysemodell", - "settings.keychainConfigured": "Im Schlüsselbund gespeichert", - "settings.systemPrompt": "System-Prompt", - "settings.resetToDefault": "Auf Standard zurücksetzen", - "settings.luaRuntimeOnly": "Lua ist die einzige Skriptlaufzeit in der Rust-App.", - "settings.semanticSimilarityEnabled": "Semantische Ähnlichkeit", - "settings.sshHost": "SSH-Host", - "settings.sshUsername": "SSH-Benutzername", - "settings.sshRemotePath": "Remote-Pfad", - "settings.clear": "Leeren", - "settings.rebuildPosts": "Beiträge neu aufbauen", - "settings.rebuildMedia": "Medien neu aufbauen", - "settings.rebuildScripts": "Skripte neu aufbauen", - "settings.rebuildTemplates": "Vorlagen neu aufbauen", - "settings.rebuildLinks": "Links neu aufbauen", - "settings.regenerateThumbnails": "Vorschaubilder regenerieren", - "settings.openDataFolder": "Datenordner öffnen", - "settings.contentPlaceholder": "Inhaltseinstellungen erscheinen hier", - "settings.technologyPlaceholder": "Technologieeinstellungen erscheinen hier", - "settings.mcpPlaceholder": "MCP-Server-Einstellungen erscheinen hier", - "dashboard.overview": "Übersicht", - "dashboard.posts": "Beiträge", - "dashboard.media": "Medien", - "dashboard.tags": "Tags", - "dashboard.categories": "Kategorien", - "dashboard.images": "Bilder", - "dashboard.drafts": "Entwürfe", - "dashboard.published": "Veröffentlicht", - "dashboard.archived": "Archiviert", - "dashboard.statCards": "Überblick", - "dashboard.timeline": "Zeitachse", - "dashboard.noTimelineData": "Noch keine Zeitachsendaten", - "dashboard.tagCloud": "Tag-Wolke", - "dashboard.noTags": "Noch keine Tags", - "dashboard.categoryCloud": "Kategorie-Wolke", - "dashboard.recentPosts": "Letzte Beiträge", - "dashboard.noRecentPosts": "Keine aktuellen Beiträge", - "dashboard.and": "und", - "dashboard.pin": "Anheften", - "common.tabNotImplemented": "Dieser Bereich wird in einem späteren Meilenstein implementiert.", - "editor.noPreviewAvailable": "Keine Vorschau verfügbar" -} diff --git a/locales/ui/en.ftl b/locales/ui/en.ftl new file mode 100644 index 0000000..9b5542b --- /dev/null +++ b/locales/ui/en.ftl @@ -0,0 +1,385 @@ +menu-group-file = File +menu-group-edit = Edit +menu-group-view = View +menu-group-blog = Blog +menu-group-help = Help +menu-item-newPost = New Post +menu-item-importMedia = Import Media... +menu-item-save = Save +menu-item-openInBrowser = Open in Browser +menu-item-openDataFolder = Open Data Folder +menu-item-find = Find +menu-item-replace = Replace +menu-item-editPreferences = Edit Preferences +menu-item-viewPosts = Posts +menu-item-viewMedia = Media +menu-item-toggleSidebar = Toggle Sidebar +menu-item-togglePanel = Toggle Panel +menu-item-publishSelected = Publish Selected +menu-item-previewPost = Preview Post +menu-item-rebuildDatabase = Rebuild Database from Files +menu-item-reindexText = Reindex Search Text +menu-item-metadataDiff = Metadata Diff Tool +menu-item-editMenu = Edit Blog Menu +menu-item-generateSitemap = Render Site +menu-item-regenerateCalendar = Regenerate Calendar +menu-item-validateSite = Validate Site +menu-item-validateTranslations = Validate Translations +menu-item-fillMissingTranslations = Fill Missing Translations +menu-item-uploadSite = Upload Site +menu-item-about = About Blogging Desktop Server +menu-item-openDocumentation = Open Documentation +menu-item-viewOnGitHub = View on GitHub +menu-item-reportIssue = Report Issue +activity-posts = Posts +activity-pages = Pages +activity-media = Media +activity-scripts = Scripts +activity-tags = Tags +activity-templates = Templates +activity-aiAssistant = AI Assistant +activity-import = Import +activity-sourceControl = Source Control +common-save = Save +common-open = Open +common-cancel = Cancel +common-settings = Settings +common-tasks = Tasks +common-running = running +common-pending = pending +tasks-backgroundTasks = Background Tasks +tasks-clearCompleted = Clear completed +tasks-noActive = No active tasks +tasks-cancelTask = Cancel task +tasks-triggerTitle = { $running } running, { $pending } pending +app-taskCompleted = Task completed: { $message } +app-taskFailed = Task failed: { $message } +app-databaseRebuildFailed = Database rebuild failed +app-textReindexFailed = Text reindex failed +panel-output = Output +panel-postLinks = Post Links +panel-gitLog = Git Log +panel-postLinksPlaceholder = No post links to display +panel-gitLogPlaceholder = No git history to display +panel-closeTitle = Close panel +panel-noRecentTasks = No recent tasks +panel-noOutput = No output +statusBar-posts = { $count } posts +statusBar-media = { $count } media +statusBar-ui = UI +statusBar-uiLanguage = UI Language +statusBar-offlineMode = Airplane Mode +statusBar-offlineModeActive = Airplane Mode (active) +projectSelector-switchProject = Switch project +projectSelector-projectsHeader = Projects +projectSelector-newProject = New Project +projectSelector-createProject = Create Project +projectSelector-projectName = Project name +projectSelector-projectNamePlaceholder = My Blog +projectSelector-chooseFolder = Choose folder... +projectSelector-useDefaultLocation = Use default location +projectSelector-deleteProject = Delete Project +projectSelector-toast-switched = Switched to { $name } +projectSelector-toast-switchFailed = Project switch failed +projectSelector-toast-created = Project "{ $name }" created +projectSelector-toast-createFailed = Failed to create project +projectSelector-toast-deleteFailed = Failed to delete project +tabBar-closeHint = Close +tabBar-loading = Loading... +tabBar-unknown = Unknown +tabBar-style = Style +tabBar-menuEditor = Menu Editor +tabBar-metadataDiff = Metadata Diff +tabBar-siteValidation = Site Validation +tabBar-translationValidation = Translation Validation +siteValidation-run = Run Validation +siteValidation-apply = Apply Validation +siteValidation-applying = Applying... +siteValidation-idle = Run site validation to compare generated files against expected output. +siteValidation-running = Validation in progress... +siteValidation-clean = No missing, extra, or stale generated files were found. +siteValidation-error = Validation failed +siteValidation-missing = Missing Files +siteValidation-extra = Extra Files +siteValidation-stale = Stale Files +tabBar-documentation = Documentation +tabBar-apiDocumentation = API Documentation +tabBar-findDuplicates = Find Duplicates +tabBar-tags = Tags +tabBar-preview = Preview +tabBar-modified = Modified +sidebar-noPostsYet = No posts yet +sidebar-noPagesYet = No pages yet +sidebar-noMediaYet = No media yet +sidebar-noScriptsYet = No scripts yet +sidebar-noTemplatesYet = No templates yet +sidebar-chatPlaceholder = AI assistant will appear here +sidebar-importPlaceholder = Import content from external sources +sidebar-gitPlaceholder = Source control integration +sidebar-loading = Loading... +sidebar-settingsHeader = Settings +sidebar-tagsHeader = Tags +sidebar-drafts = Drafts +sidebar-published = Published +sidebar-archived = Archived +sidebar-loadMore = Load More… +language-en = English +language-de = German +language-fr = French +language-it = Italian +language-es = Spanish +welcome-title = Welcome to bDS +welcome-subtitle = Open a project or create a new post to get started. +post-untitled = Untitled +post-createFailed = Failed to create post: { $error } +engine-rebuildStarted = Rebuilding database from files... +engine-rebuildComplete = Database rebuilt: { $posts } posts, { $media } media, { $templates } templates, { $scripts } scripts +engine-rebuildFailed = Database rebuild failed: { $error } +engine-reindexStarted = Reindexing search text... +engine-reindexComplete = Search text reindexed: { $posts } posts, { $media } media +engine-reindexFailed = Search text reindex failed: { $error } +engine-calendarStarted = Regenerating calendar... +engine-calendarComplete = Calendar regenerated +engine-calendarFailed = Calendar regeneration failed: { $error } +engine-calendarNoProject = No active project +engine-validateTranslationsStarted = Validating translations... +engine-validateMediaStarted = Validating media assets... +engine-validateTranslationsComplete = Translation validation: { $dbIssues } DB issues, { $fsIssues } filesystem issues +engine-validateTranslationsFailed = Translation validation failed: { $error } +engine-fillMissingTranslationsOffline = Cannot fill translations: AI is unavailable in offline mode +engine-fillMissingTranslationsNoAi = Cannot fill translations: AI not yet available +engine-uploadStarted = Uploading site... +engine-uploadMissingCredentials = Publishing credentials incomplete. Configure in project settings. +engine-uploadOffline = Cannot upload: airplane mode is active +engine-generateSiteStarted = Generating site... +engine-generateSiteNoProject = No active project +engine-previewDataDirUnavailable = Project data directory unavailable +engine-previewPortInUse = Preview server port is already in use +dialog-selectFolder = Select Folder +dialog-importMedia = Import Media +dialog-imageFilter = Images +settings-nav-project = Project +settings-nav-editor = Editor +settings-nav-content = Content +settings-nav-ai = AI +settings-nav-technology = Technology +settings-nav-publishing = Publishing +settings-nav-data = Data +settings-nav-mcp = MCP +settings-nav-style = Style +tags-nav-cloud = Tag Cloud +tags-nav-manage = Manage Tags +tags-nav-merge = Merge Tags +tags-nav-discover = Discover Tags +sidebar-chatYesterday = Yesterday +modal-confirmDelete-title = Confirm Delete +modal-confirmDelete-warning = This action cannot be undone. +modal-confirmDelete-cancel = Cancel +modal-confirmDelete-delete = Delete +modal-confirm-title = Confirm +modal-confirm-cancel = Cancel +modal-confirm-confirm = Confirm +modal-postInsertLink-title = Insert Link +modal-postInsertLink-description = Select a post to link to. +modal-postInsertLink-cancel = Cancel +modal-postInsertLink-tabInternal = Internal +modal-postInsertLink-tabExternal = External +modal-postInsertLink-searchPlaceholder = Search posts... +modal-postInsertLink-emptyState = Start typing to search posts or use related posts +modal-postInsertLink-createPost = Create Post +modal-postInsertLink-insert = Insert +modal-postInsertLink-externalUrlPlaceholder = https://example.com +modal-postInsertLink-externalTextPlaceholder = Display text (optional) +modal-postInsertLink-urlRequired = A URL is required. +modal-postInsertLink-titleRequired = Enter a title to create a linked post. +modal-postInsertLink-createFailed = Failed to create the linked post. +modal-postInsertLink-loadFailed = Failed to load the selected post. +modal-insertMedia-title = Insert Media +modal-insertMedia-description = Select a media item to insert. +modal-insertMedia-cancel = Cancel +modal-insertMedia-searchPlaceholder = Search media... +modal-insertMedia-loadFailed = Failed to load the selected media item. +modal-postGallery-title = Media Gallery +modal-postGallery-description = Click an image to view full size. +modal-postGallery-close = Close +modal-postGallery-backToGrid = Back to Grid +modal-postGallery-unavailable = Preview unavailable +modal-aiSuggestions-title = AI Suggestions +modal-aiSuggestions-applySelected = Apply Selected +modal-languagePicker-title = Translate To +sidebar-filter-search = Search... +sidebar-filter-toggle = Filters +sidebar-filter-clearAll = Clear All Filters +sidebar-filter-status = Status +sidebar-filter-language = Language +sidebar-filter-dateRange = Date Range +sidebar-filter-from = From (YYYY-MM-DD) +sidebar-filter-to = To (YYYY-MM-DD) +sidebar-filter-tags = Tags +sidebar-filter-categories = Categories +sidebar-filter-calendar = Archive +sidebar-filter-noResults = No matching items +editor-title = Title +editor-titlePlaceholder = Enter title... +editor-slug = Slug +editor-slugPlaceholder = enter-slug +editor-content = Content +editor-contentPlaceholder = Write your content... +editor-excerpt = Excerpt +editor-excerptPlaceholder = Brief summary... +editor-author = Author +editor-language = Language +editor-aiAnalyze = Analyze with AI +editor-detectLanguage = Detect Language +editor-quickActions = Quick Actions +editor-modeMarkdown = Markdown +editor-modePreview = Preview +editor-suggestTaxonomy = Suggest Taxonomy +editor-translate = Translate +editor-templateSlug = Template +editor-doNotTranslate = Do Not Translate +editor-publish = Publish +editor-discard = Discard +editor-duplicate = Duplicate +editor-validate = Validate +editor-run = Run +editor-checkSyntax = Check Syntax +editor-kind = Kind +editor-enabled = Enabled +editor-entrypoint = Entrypoint +editor-alt = Alt Text +editor-altPlaceholder = Describe the image... +editor-caption = Caption +editor-metadata = Metadata +editor-tags = Tags +editor-tagsPlaceholder = Add tag... +editor-categories = Categories +editor-categoriesPlaceholder = Add category... +editor-outlinks = Outgoing Links +editor-backlinks = Incoming Links +editor-linkedMedia = Linked Media +editor-linkedMediaEmpty = No linked media yet. +editor-linkExistingMedia = Link Existing +editor-linkToPost = Link to Post +editor-linkedPosts = Linked Posts +editor-linkedPostsEmpty = Not linked to any posts. +editor-postPickerSearch = Search Posts +editor-postPickerSearchPlaceholder = Search posts... +editor-unlinkMedia = Unlink +editor-linkedMediaKindImage = Image +editor-linkedMediaKindFile = File +editor-untitled = Untitled +editor-createdAt = Created +editor-updatedAt = Updated +editor-publishedAt = Published +editor-insertLink = Insert Link +editor-insertMedia = Insert Media +editor-gallery = Gallery +tags-noTags = No tags yet +tags-cloudSection = Cloud +tags-cloudHelp = Select one or more tags to edit, delete, or merge them. +tags-selectedCount = { $count } selected +tags-clearSelection = Clear selection +tags-createSection = Create Tag +tags-createPlaceholder = new-tag +tags-createButton = Create +tags-editTag = Edit Tag +tags-manageSection = Manage +tags-name = Name +tags-color = Color +tags-colorPresets = Color presets +tags-postTemplate = Post Template +tags-noTemplate = None +tags-merge = Merge +tags-mergeTarget = Target Tag +tags-mergeSection = Merge +tags-mergeHelp = Select at least two tags from the cloud or list to merge them. +tags-mergePreview = Tags to delete: { $tags } +tags-mergeConfirmTitle = Merge Tags +tags-mergeConfirmMessage = Merge { $count } tags into { $target }? This cannot be undone. +tags-deleteUsage = This tag is used in { $count } posts. +tags-discoverSection = Discover +tags-discoverDescription = Discover tags from current posts and rewrite tags.json to match the database. +tags-discoverButton = Discover +tags-selectTag = Select a tag to edit +template-forceDeleteTitle = Force Delete Template +template-forceDeleteMessage = This template is used by { $posts } posts and { $tags } tags. Force delete? +common-add = Add +common-remove = Remove +common-clear = Clear +common-noResults = No results +settings-projectName = Project Name +settings-projectDescription = Description +settings-dataPath = Data Folder +settings-browse = Browse... +settings-reset = Reset +settings-publicUrl = Public URL +settings-mainLanguage = Main Language +settings-mainLanguageRequired = required +settings-blogLanguages = Blog Languages +settings-defaultAuthor = Default Author +settings-maxPostsPerPage = Posts per Page +settings-blogmarkCategory = Blogmark Category +settings-defaultMode = Default Editor Mode +settings-diffViewStyle = Diff View Style +settings-categoryTitle = Title for { $category } +settings-categoryPostTemplate = Post Template +settings-categoryListTemplate = List Template +settings-categoryRenderInLists = Render in Lists +settings-categoryShowTitles = Show Titles +settings-addCategory = Add Category +settings-resetCategories = Reset to Defaults +settings-wrapLongLines = Wrap Long Lines +settings-hideUnchangedRegions = Hide Unchanged Regions +settings-offlineMode = Airplane Mode +settings-onlineEndpointSection = Online Endpoint +settings-onlineEndpointUrl = Online Endpoint URL +settings-onlineEndpointModel = Online Endpoint Model +settings-onlineApiKey = Online API Key +settings-airplaneEndpointSection = Airplane Endpoint +settings-airplaneEndpointUrl = Airplane Endpoint URL +settings-airplaneEndpointModel = Airplane Endpoint Model +settings-refreshModels = Refresh Models +settings-defaultModel = Default Model +settings-titleModel = Title Model +settings-imageAnalysisModel = Image Analysis Model +settings-keychainConfigured = Stored in keychain +settings-systemPrompt = System Prompt +settings-resetToDefault = Reset to Default +settings-luaRuntimeOnly = Lua is the only scripting runtime in the Rust app. +settings-semanticSimilarityEnabled = Semantic Similarity +settings-sshHost = SSH Host +settings-sshUsername = SSH Username +settings-sshRemotePath = Remote Path +settings-clear = Clear +settings-rebuildPosts = Rebuild Posts +settings-rebuildMedia = Rebuild Media +settings-rebuildScripts = Rebuild Scripts +settings-rebuildTemplates = Rebuild Templates +settings-rebuildLinks = Rebuild Links +settings-regenerateThumbnails = Regenerate Thumbnails +settings-openDataFolder = Open Data Folder +settings-contentPlaceholder = Content settings will appear here +settings-technologyPlaceholder = Technology settings will appear here +settings-mcpPlaceholder = MCP server settings will appear here +dashboard-overview = Overview +dashboard-posts = Posts +dashboard-media = Media +dashboard-tags = Tags +dashboard-categories = Categories +dashboard-images = Images +dashboard-drafts = Drafts +dashboard-published = Published +dashboard-archived = Archived +dashboard-statCards = Snapshot +dashboard-timeline = Timeline +dashboard-noTimelineData = No timeline data yet +dashboard-tagCloud = Tag Cloud +dashboard-noTags = No tags yet +dashboard-categoryCloud = Category Cloud +dashboard-recentPosts = Recent Posts +dashboard-noRecentPosts = No recent posts +dashboard-and = and +dashboard-pin = Pin +common-tabNotImplemented = This area will be implemented in a later milestone. +editor-noPreviewAvailable = No preview available diff --git a/locales/ui/en.json b/locales/ui/en.json deleted file mode 100644 index 4927791..0000000 --- a/locales/ui/en.json +++ /dev/null @@ -1,387 +0,0 @@ -{ - "menu.group.file": "File", - "menu.group.edit": "Edit", - "menu.group.view": "View", - "menu.group.blog": "Blog", - "menu.group.help": "Help", - "menu.item.newPost": "New Post", - "menu.item.importMedia": "Import Media...", - "menu.item.save": "Save", - "menu.item.openInBrowser": "Open in Browser", - "menu.item.openDataFolder": "Open Data Folder", - "menu.item.find": "Find", - "menu.item.replace": "Replace", - "menu.item.editPreferences": "Edit Preferences", - "menu.item.viewPosts": "Posts", - "menu.item.viewMedia": "Media", - "menu.item.toggleSidebar": "Toggle Sidebar", - "menu.item.togglePanel": "Toggle Panel", - "menu.item.publishSelected": "Publish Selected", - "menu.item.previewPost": "Preview Post", - "menu.item.rebuildDatabase": "Rebuild Database from Files", - "menu.item.reindexText": "Reindex Search Text", - "menu.item.metadataDiff": "Metadata Diff Tool", - "menu.item.editMenu": "Edit Blog Menu", - "menu.item.generateSitemap": "Render Site", - "menu.item.regenerateCalendar": "Regenerate Calendar", - "menu.item.validateSite": "Validate Site", - "menu.item.validateTranslations": "Validate Translations", - "menu.item.fillMissingTranslations": "Fill Missing Translations", - "menu.item.uploadSite": "Upload Site", - "menu.item.about": "About Blogging Desktop Server", - "menu.item.openDocumentation": "Open Documentation", - "menu.item.viewOnGitHub": "View on GitHub", - "menu.item.reportIssue": "Report Issue", - "activity.posts": "Posts", - "activity.pages": "Pages", - "activity.media": "Media", - "activity.scripts": "Scripts", - "activity.tags": "Tags", - "activity.templates": "Templates", - "activity.aiAssistant": "AI Assistant", - "activity.import": "Import", - "activity.sourceControl": "Source Control", - "common.save": "Save", - "common.open": "Open", - "common.cancel": "Cancel", - "common.settings": "Settings", - "common.tasks": "Tasks", - "common.running": "running", - "common.pending": "pending", - "tasks.backgroundTasks": "Background Tasks", - "tasks.clearCompleted": "Clear completed", - "tasks.noActive": "No active tasks", - "tasks.cancelTask": "Cancel task", - "tasks.triggerTitle": "{running} running, {pending} pending", - "app.taskCompleted": "Task completed: {message}", - "app.taskFailed": "Task failed: {message}", - "app.databaseRebuildFailed": "Database rebuild failed", - "app.textReindexFailed": "Text reindex failed", - "panel.output": "Output", - "panel.postLinks": "Post Links", - "panel.gitLog": "Git Log", - "panel.postLinksPlaceholder": "No post links to display", - "panel.gitLogPlaceholder": "No git history to display", - "panel.closeTitle": "Close panel", - "panel.noRecentTasks": "No recent tasks", - "panel.noOutput": "No output", - "statusBar.posts": "{count} posts", - "statusBar.media": "{count} media", - "statusBar.ui": "UI", - "statusBar.uiLanguage": "UI Language", - "statusBar.offlineMode": "Airplane Mode", - "statusBar.offlineModeActive": "Airplane Mode (active)", - "projectSelector.switchProject": "Switch project", - "projectSelector.projectsHeader": "Projects", - "projectSelector.newProject": "New Project", - "projectSelector.createProject": "Create Project", - "projectSelector.projectName": "Project name", - "projectSelector.projectNamePlaceholder": "My Blog", - "projectSelector.chooseFolder": "Choose folder...", - "projectSelector.useDefaultLocation": "Use default location", - "projectSelector.deleteProject": "Delete Project", - "projectSelector.toast.switched": "Switched to {name}", - "projectSelector.toast.switchFailed": "Project switch failed", - "projectSelector.toast.created": "Project \"{name}\" created", - "projectSelector.toast.createFailed": "Failed to create project", - "projectSelector.toast.deleteFailed": "Failed to delete project", - "tabBar.closeHint": "Close", - "tabBar.loading": "Loading...", - "tabBar.unknown": "Unknown", - "tabBar.style": "Style", - "tabBar.menuEditor": "Menu Editor", - "tabBar.metadataDiff": "Metadata Diff", - "tabBar.siteValidation": "Site Validation", - "tabBar.translationValidation": "Translation Validation", - "siteValidation.run": "Run Validation", - "siteValidation.apply": "Apply Validation", - "siteValidation.applying": "Applying...", - "siteValidation.idle": "Run site validation to compare generated files against expected output.", - "siteValidation.running": "Validation in progress...", - "siteValidation.clean": "No missing, extra, or stale generated files were found.", - "siteValidation.error": "Validation failed", - "siteValidation.missing": "Missing Files", - "siteValidation.extra": "Extra Files", - "siteValidation.stale": "Stale Files", - "tabBar.documentation": "Documentation", - "tabBar.apiDocumentation": "API Documentation", - "tabBar.findDuplicates": "Find Duplicates", - "tabBar.tags": "Tags", - "tabBar.preview": "Preview", - "tabBar.modified": "Modified", - "sidebar.noPostsYet": "No posts yet", - "sidebar.noPagesYet": "No pages yet", - "sidebar.noMediaYet": "No media yet", - "sidebar.noScriptsYet": "No scripts yet", - "sidebar.noTemplatesYet": "No templates yet", - "sidebar.chatPlaceholder": "AI assistant will appear here", - "sidebar.importPlaceholder": "Import content from external sources", - "sidebar.gitPlaceholder": "Source control integration", - "sidebar.loading": "Loading...", - "sidebar.settingsHeader": "Settings", - "sidebar.tagsHeader": "Tags", - "sidebar.drafts": "Drafts", - "sidebar.published": "Published", - "sidebar.archived": "Archived", - "sidebar.loadMore": "Load More…", - "language.en": "English", - "language.de": "German", - "language.fr": "French", - "language.it": "Italian", - "language.es": "Spanish", - "welcome.title": "Welcome to bDS", - "welcome.subtitle": "Open a project or create a new post to get started.", - "post.untitled": "Untitled", - "post.createFailed": "Failed to create post: {error}", - "engine.rebuildStarted": "Rebuilding database from files...", - "engine.rebuildComplete": "Database rebuilt: {posts} posts, {media} media, {templates} templates, {scripts} scripts", - "engine.rebuildFailed": "Database rebuild failed: {error}", - "engine.reindexStarted": "Reindexing search text...", - "engine.reindexComplete": "Search text reindexed: {posts} posts, {media} media", - "engine.reindexFailed": "Search text reindex failed: {error}", - "engine.calendarStarted": "Regenerating calendar...", - "engine.calendarComplete": "Calendar regenerated", - "engine.calendarFailed": "Calendar regeneration failed: {error}", - "engine.calendarNoProject": "No active project", - "engine.validateTranslationsStarted": "Validating translations...", - "engine.validateMediaStarted": "Validating media assets...", - "engine.validateTranslationsComplete": "Translation validation: {dbIssues} DB issues, {fsIssues} filesystem issues", - "engine.validateTranslationsFailed": "Translation validation failed: {error}", - "engine.fillMissingTranslationsOffline": "Cannot fill translations: AI is unavailable in offline mode", - "engine.fillMissingTranslationsNoAi": "Cannot fill translations: AI not yet available", - "engine.uploadStarted": "Uploading site...", - "engine.uploadMissingCredentials": "Publishing credentials incomplete. Configure in project settings.", - "engine.uploadOffline": "Cannot upload: airplane mode is active", - "engine.generateSiteStarted": "Generating site...", - "engine.generateSiteNoProject": "No active project", - "engine.previewDataDirUnavailable": "Project data directory unavailable", - "engine.previewPortInUse": "Preview server port is already in use", - "dialog.selectFolder": "Select Folder", - "dialog.importMedia": "Import Media", - "dialog.imageFilter": "Images", - "settings.nav.project": "Project", - "settings.nav.editor": "Editor", - "settings.nav.content": "Content", - "settings.nav.ai": "AI", - "settings.nav.technology": "Technology", - "settings.nav.publishing": "Publishing", - "settings.nav.data": "Data", - "settings.nav.mcp": "MCP", - "settings.nav.style": "Style", - "tags.nav.cloud": "Tag Cloud", - "tags.nav.manage": "Manage Tags", - "tags.nav.merge": "Merge Tags", - "tags.nav.discover": "Discover Tags", - "sidebar.chatYesterday": "Yesterday", - "modal.confirmDelete.title": "Confirm Delete", - "modal.confirmDelete.warning": "This action cannot be undone.", - "modal.confirmDelete.cancel": "Cancel", - "modal.confirmDelete.delete": "Delete", - "modal.confirm.title": "Confirm", - "modal.confirm.cancel": "Cancel", - "modal.confirm.confirm": "Confirm", - "modal.postInsertLink.title": "Insert Link", - "modal.postInsertLink.description": "Select a post to link to.", - "modal.postInsertLink.cancel": "Cancel", - "modal.postInsertLink.tabInternal": "Internal", - "modal.postInsertLink.tabExternal": "External", - "modal.postInsertLink.searchPlaceholder": "Search posts...", - "modal.postInsertLink.emptyState": "Start typing to search posts or use related posts", - "modal.postInsertLink.createPost": "Create Post", - "modal.postInsertLink.insert": "Insert", - "modal.postInsertLink.externalUrlPlaceholder": "https://example.com", - "modal.postInsertLink.externalTextPlaceholder": "Display text (optional)", - "modal.postInsertLink.urlRequired": "A URL is required.", - "modal.postInsertLink.titleRequired": "Enter a title to create a linked post.", - "modal.postInsertLink.createFailed": "Failed to create the linked post.", - "modal.postInsertLink.loadFailed": "Failed to load the selected post.", - "modal.insertMedia.title": "Insert Media", - "modal.insertMedia.description": "Select a media item to insert.", - "modal.insertMedia.cancel": "Cancel", - "modal.insertMedia.searchPlaceholder": "Search media...", - "modal.insertMedia.loadFailed": "Failed to load the selected media item.", - "modal.postGallery.title": "Media Gallery", - "modal.postGallery.description": "Click an image to view full size.", - "modal.postGallery.close": "Close", - "modal.postGallery.backToGrid": "Back to Grid", - "modal.postGallery.unavailable": "Preview unavailable", - "modal.aiSuggestions.title": "AI Suggestions", - "modal.aiSuggestions.applySelected": "Apply Selected", - "modal.languagePicker.title": "Translate To", - "sidebar.filter.search": "Search...", - "sidebar.filter.toggle": "Filters", - "sidebar.filter.clearAll": "Clear All Filters", - "sidebar.filter.status": "Status", - "sidebar.filter.language": "Language", - "sidebar.filter.dateRange": "Date Range", - "sidebar.filter.from": "From (YYYY-MM-DD)", - "sidebar.filter.to": "To (YYYY-MM-DD)", - "sidebar.filter.tags": "Tags", - "sidebar.filter.categories": "Categories", - "sidebar.filter.calendar": "Archive", - "sidebar.filter.noResults": "No matching items", - "editor.title": "Title", - "editor.titlePlaceholder": "Enter title...", - "editor.slug": "Slug", - "editor.slugPlaceholder": "enter-slug", - "editor.content": "Content", - "editor.contentPlaceholder": "Write your content...", - "editor.excerpt": "Excerpt", - "editor.excerptPlaceholder": "Brief summary...", - "editor.author": "Author", - "editor.language": "Language", - "editor.aiAnalyze": "Analyze with AI", - "editor.detectLanguage": "Detect Language", - "editor.quickActions": "Quick Actions", - "editor.modeMarkdown": "Markdown", - "editor.modePreview": "Preview", - "editor.suggestTaxonomy": "Suggest Taxonomy", - "editor.translate": "Translate", - "editor.templateSlug": "Template", - "editor.doNotTranslate": "Do Not Translate", - "editor.publish": "Publish", - "editor.discard": "Discard", - "editor.duplicate": "Duplicate", - "editor.validate": "Validate", - "editor.run": "Run", - "editor.checkSyntax": "Check Syntax", - "editor.kind": "Kind", - "editor.enabled": "Enabled", - "editor.entrypoint": "Entrypoint", - "editor.alt": "Alt Text", - "editor.altPlaceholder": "Describe the image...", - "editor.caption": "Caption", - "editor.metadata": "Metadata", - "editor.tags": "Tags", - "editor.tagsPlaceholder": "Add tag...", - "editor.categories": "Categories", - "editor.categoriesPlaceholder": "Add category...", - "editor.outlinks": "Outgoing Links", - "editor.backlinks": "Incoming Links", - "editor.linkedMedia": "Linked Media", - "editor.linkedMediaEmpty": "No linked media yet.", - "editor.linkExistingMedia": "Link Existing", - "editor.linkToPost": "Link to Post", - "editor.linkedPosts": "Linked Posts", - "editor.linkedPostsEmpty": "Not linked to any posts.", - "editor.postPickerSearch": "Search Posts", - "editor.postPickerSearchPlaceholder": "Search posts...", - "editor.unlinkMedia": "Unlink", - "editor.linkedMediaKindImage": "Image", - "editor.linkedMediaKindFile": "File", - "editor.untitled": "Untitled", - "editor.createdAt": "Created", - "editor.updatedAt": "Updated", - "editor.publishedAt": "Published", - "editor.insertLink": "Insert Link", - "editor.insertMedia": "Insert Media", - "editor.gallery": "Gallery", - "tags.noTags": "No tags yet", - "tags.cloudSection": "Cloud", - "tags.cloudHelp": "Select one or more tags to edit, delete, or merge them.", - "tags.selectedCount": "{count} selected", - "tags.clearSelection": "Clear selection", - "tags.createSection": "Create Tag", - "tags.createPlaceholder": "new-tag", - "tags.createButton": "Create", - "tags.editTag": "Edit Tag", - "tags.manageSection": "Manage", - "tags.name": "Name", - "tags.color": "Color", - "tags.colorPresets": "Color presets", - "tags.postTemplate": "Post Template", - "tags.noTemplate": "None", - "tags.merge": "Merge", - "tags.mergeTarget": "Target Tag", - "tags.mergeSection": "Merge", - "tags.mergeHelp": "Select at least two tags from the cloud or list to merge them.", - "tags.mergePreview": "Tags to delete: {tags}", - "tags.mergeConfirmTitle": "Merge Tags", - "tags.mergeConfirmMessage": "Merge {count} tags into {target}? This cannot be undone.", - "tags.deleteUsage": "This tag is used in {count} posts.", - "tags.discoverSection": "Discover", - "tags.discoverDescription": "Discover tags from current posts and rewrite tags.json to match the database.", - "tags.discoverButton": "Discover", - "tags.selectTag": "Select a tag to edit", - "template.forceDeleteTitle": "Force Delete Template", - "template.forceDeleteMessage": "This template is used by {posts} posts and {tags} tags. Force delete?", - "common.add": "Add", - "common.remove": "Remove", - "common.clear": "Clear", - "common.noResults": "No results", - "settings.projectName": "Project Name", - "settings.projectDescription": "Description", - "settings.dataPath": "Data Folder", - "settings.browse": "Browse...", - "settings.reset": "Reset", - "settings.publicUrl": "Public URL", - "settings.mainLanguage": "Main Language", - "settings.mainLanguageRequired": "required", - "settings.blogLanguages": "Blog Languages", - "settings.defaultAuthor": "Default Author", - "settings.maxPostsPerPage": "Posts per Page", - "settings.blogmarkCategory": "Blogmark Category", - "settings.defaultMode": "Default Editor Mode", - "settings.diffViewStyle": "Diff View Style", - "settings.categoryTitle": "Title for {category}", - "settings.categoryPostTemplate": "Post Template", - "settings.categoryListTemplate": "List Template", - "settings.categoryRenderInLists": "Render in Lists", - "settings.categoryShowTitles": "Show Titles", - "settings.addCategory": "Add Category", - "settings.resetCategories": "Reset to Defaults", - "settings.wrapLongLines": "Wrap Long Lines", - "settings.hideUnchangedRegions": "Hide Unchanged Regions", - "settings.offlineMode": "Airplane Mode", - "settings.onlineEndpointSection": "Online Endpoint", - "settings.onlineEndpointUrl": "Online Endpoint URL", - "settings.onlineEndpointModel": "Online Endpoint Model", - "settings.onlineApiKey": "Online API Key", - "settings.airplaneEndpointSection": "Airplane Endpoint", - "settings.airplaneEndpointUrl": "Airplane Endpoint URL", - "settings.airplaneEndpointModel": "Airplane Endpoint Model", - "settings.refreshModels": "Refresh Models", - "settings.defaultModel": "Default Model", - "settings.titleModel": "Title Model", - "settings.imageAnalysisModel": "Image Analysis Model", - "settings.keychainConfigured": "Stored in keychain", - "settings.systemPrompt": "System Prompt", - "settings.resetToDefault": "Reset to Default", - "settings.luaRuntimeOnly": "Lua is the only scripting runtime in the Rust app.", - "settings.semanticSimilarityEnabled": "Semantic Similarity", - "settings.sshHost": "SSH Host", - "settings.sshUsername": "SSH Username", - "settings.sshRemotePath": "Remote Path", - "settings.clear": "Clear", - "settings.rebuildPosts": "Rebuild Posts", - "settings.rebuildMedia": "Rebuild Media", - "settings.rebuildScripts": "Rebuild Scripts", - "settings.rebuildTemplates": "Rebuild Templates", - "settings.rebuildLinks": "Rebuild Links", - "settings.regenerateThumbnails": "Regenerate Thumbnails", - "settings.openDataFolder": "Open Data Folder", - "settings.contentPlaceholder": "Content settings will appear here", - "settings.technologyPlaceholder": "Technology settings will appear here", - "settings.mcpPlaceholder": "MCP server settings will appear here", - "dashboard.overview": "Overview", - "dashboard.posts": "Posts", - "dashboard.media": "Media", - "dashboard.tags": "Tags", - "dashboard.categories": "Categories", - "dashboard.images": "Images", - "dashboard.drafts": "Drafts", - "dashboard.published": "Published", - "dashboard.archived": "Archived", - "dashboard.statCards": "Snapshot", - "dashboard.timeline": "Timeline", - "dashboard.noTimelineData": "No timeline data yet", - "dashboard.tagCloud": "Tag Cloud", - "dashboard.noTags": "No tags yet", - "dashboard.categoryCloud": "Category Cloud", - "dashboard.recentPosts": "Recent Posts", - "dashboard.noRecentPosts": "No recent posts", - "dashboard.and": "and", - "dashboard.pin": "Pin", - "common.tabNotImplemented": "This area will be implemented in a later milestone.", - "editor.noPreviewAvailable": "No preview available" -} diff --git a/locales/ui/es.ftl b/locales/ui/es.ftl new file mode 100644 index 0000000..2db893e --- /dev/null +++ b/locales/ui/es.ftl @@ -0,0 +1,385 @@ +menu-group-file = Archivo +menu-group-edit = Editar +menu-group-view = Ver +menu-group-blog = Blog +menu-group-help = Ayuda +menu-item-newPost = Nueva entrada +menu-item-importMedia = Importar medios... +menu-item-save = Guardar +menu-item-openInBrowser = Abrir en el navegador +menu-item-openDataFolder = Abrir carpeta de datos +menu-item-find = Buscar +menu-item-replace = Reemplazar +menu-item-editPreferences = Editar preferencias +menu-item-viewPosts = Entradas +menu-item-viewMedia = Medios +menu-item-toggleSidebar = Alternar barra lateral +menu-item-togglePanel = Alternar panel +menu-item-publishSelected = Publicar selección +menu-item-previewPost = Vista previa de entrada +menu-item-rebuildDatabase = Reconstruir base de datos desde archivos +menu-item-reindexText = Reindexar texto de búsqueda +menu-item-metadataDiff = Herramienta diff de metadatos +menu-item-editMenu = Editar menú del blog +menu-item-generateSitemap = Renderizar sitio +menu-item-regenerateCalendar = Regenerar calendario +menu-item-validateSite = Validar sitio +menu-item-validateTranslations = Validar traducciones +menu-item-fillMissingTranslations = Completar traducciones faltantes +menu-item-uploadSite = Subir sitio +menu-item-about = Acerca de Blogging Desktop Server +menu-item-openDocumentation = Abrir documentación +menu-item-viewOnGitHub = Ver en GitHub +menu-item-reportIssue = Reportar problema +activity-posts = Entradas +activity-pages = Páginas +activity-media = Medios +activity-scripts = Scripts +activity-tags = Etiquetas +activity-templates = Plantillas +activity-aiAssistant = Asistente IA +activity-import = Importar +activity-sourceControl = Control de código fuente +common-save = Guardar +common-open = Abrir +common-cancel = Cancelar +common-settings = Configuración +common-tasks = Tareas +common-running = en ejecución +common-pending = pendiente +tasks-backgroundTasks = Tareas en segundo plano +tasks-clearCompleted = Limpiar completadas +tasks-noActive = No hay tareas activas +tasks-cancelTask = Cancelar tarea +tasks-triggerTitle = { $running } en ejecución, { $pending } pendiente +app-taskCompleted = Tarea completada: { $message } +app-taskFailed = Tarea fallida: { $message } +app-databaseRebuildFailed = La reconstrucción de la base de datos falló +app-textReindexFailed = La reindexación de texto falló +panel-output = Salida +panel-postLinks = Enlaces de entradas +panel-gitLog = Historial de Git +panel-postLinksPlaceholder = No hay enlaces de entradas para mostrar +panel-gitLogPlaceholder = No hay historial de Git para mostrar +panel-closeTitle = Cerrar panel +panel-noRecentTasks = No hay tareas recientes +panel-noOutput = Sin salida +statusBar-posts = { $count } publicaciones +statusBar-media = { $count } medios +statusBar-ui = UI +statusBar-uiLanguage = Idioma de la interfaz +statusBar-offlineMode = Modo avión +statusBar-offlineModeActive = Modo avión (activo) +projectSelector-switchProject = Cambiar proyecto +projectSelector-projectsHeader = Proyectos +projectSelector-newProject = Nuevo proyecto +projectSelector-createProject = Crear proyecto +projectSelector-projectName = Nombre del proyecto +projectSelector-projectNamePlaceholder = Mi blog +projectSelector-chooseFolder = Elegir carpeta... +projectSelector-useDefaultLocation = Usar ubicación predeterminada +projectSelector-deleteProject = Eliminar proyecto +projectSelector-toast-switched = Cambiado a { $name } +projectSelector-toast-switchFailed = No se pudo cambiar de proyecto +projectSelector-toast-created = Proyecto "{ $name }" creado +projectSelector-toast-createFailed = No se pudo crear el proyecto +projectSelector-toast-deleteFailed = No se pudo eliminar el proyecto +tabBar-closeHint = Cerrar +tabBar-loading = Cargando... +tabBar-unknown = Desconocido +tabBar-style = Estilo +tabBar-menuEditor = Editor de menú +tabBar-metadataDiff = Diff de metadatos +tabBar-siteValidation = Validación del sitio +tabBar-translationValidation = Validación de traducciones +siteValidation-run = Ejecutar validación +siteValidation-apply = Aplicar validación +siteValidation-applying = Aplicando... +siteValidation-idle = Ejecuta la validación del sitio para comparar los archivos generados con la salida esperada. +siteValidation-running = Validación en curso... +siteValidation-clean = No se encontraron archivos generados faltantes, extra o desactualizados. +siteValidation-error = La validación falló +siteValidation-missing = Archivos faltantes +siteValidation-extra = Archivos adicionales +siteValidation-stale = Archivos desactualizados +tabBar-documentation = Documentación +tabBar-apiDocumentation = Documentación API +tabBar-findDuplicates = Buscar duplicados +tabBar-tags = Etiquetas +tabBar-preview = Vista previa +tabBar-modified = Modificado +sidebar-noPostsYet = Aún no hay entradas +sidebar-noPagesYet = Aún no hay páginas +sidebar-noMediaYet = Aún no hay medios +sidebar-noScriptsYet = Aún no hay scripts +sidebar-noTemplatesYet = Aún no hay plantillas +sidebar-chatPlaceholder = El asistente IA aparecerá aquí +sidebar-importPlaceholder = Importar contenido desde fuentes externas +sidebar-gitPlaceholder = Integración del control de código fuente +sidebar-loading = Cargando... +sidebar-settingsHeader = Configuración +sidebar-tagsHeader = Etiquetas +sidebar-drafts = Borradores +sidebar-published = Publicados +sidebar-archived = Archivados +sidebar-loadMore = Cargar más… +language-en = Inglés +language-de = Alemán +language-fr = Francés +language-it = Italiano +language-es = Español +welcome-title = Bienvenido a bDS +welcome-subtitle = Abre un proyecto o crea una nueva entrada para comenzar. +post-untitled = Sin título +post-createFailed = No se pudo crear la entrada: { $error } +engine-rebuildStarted = Reconstruyendo la base de datos desde archivos... +engine-rebuildComplete = Base de datos reconstruida: { $posts } entradas, { $media } medios, { $templates } plantillas, { $scripts } scripts +engine-rebuildFailed = La reconstrucción de la base de datos falló: { $error } +engine-reindexStarted = Reindexando texto de búsqueda... +engine-reindexComplete = Texto de búsqueda reindexado: { $posts } entradas, { $media } medios +engine-reindexFailed = La reindexación del texto de búsqueda falló: { $error } +engine-calendarStarted = Regenerando calendario... +engine-calendarComplete = Calendario regenerado +engine-calendarFailed = La regeneración del calendario falló: { $error } +engine-calendarNoProject = No hay proyecto activo +engine-validateTranslationsStarted = Validando traducciones... +engine-validateMediaStarted = Validando medios... +engine-validateTranslationsComplete = Validación de traducciones: { $dbIssues } problemas en la base de datos, { $fsIssues } problemas en el sistema de archivos +engine-validateTranslationsFailed = La validación de traducciones falló: { $error } +engine-fillMissingTranslationsOffline = No se pueden completar las traducciones: la IA no está disponible en modo avión +engine-fillMissingTranslationsNoAi = No se pueden completar las traducciones: la IA aún no está disponible +engine-uploadStarted = Subiendo sitio... +engine-uploadMissingCredentials = Credenciales de publicación incompletas. Configúralas en los ajustes del proyecto. +engine-uploadOffline = No se puede subir: el modo avión está activo +engine-generateSiteStarted = Generando sitio... +engine-generateSiteNoProject = No hay proyecto activo +engine-previewDataDirUnavailable = El directorio de datos del proyecto no está disponible +engine-previewPortInUse = El puerto del servidor de vista previa ya está en uso +dialog-selectFolder = Seleccionar carpeta +dialog-importMedia = Importar medios +dialog-imageFilter = Imágenes +settings-nav-project = Proyecto +settings-nav-editor = Editor +settings-nav-content = Contenido +settings-nav-ai = IA +settings-nav-technology = Tecnología +settings-nav-publishing = Publicación +settings-nav-data = Datos +settings-nav-mcp = MCP +settings-nav-style = Estilo +tags-nav-cloud = Nube de etiquetas +tags-nav-manage = Gestionar etiquetas +tags-nav-merge = Fusionar etiquetas +tags-nav-discover = Descubrir etiquetas +sidebar-chatYesterday = Ayer +modal-confirmDelete-title = Confirmar eliminación +modal-confirmDelete-warning = Esta acción no se puede deshacer. +modal-confirmDelete-cancel = Cancelar +modal-confirmDelete-delete = Eliminar +modal-confirm-title = Confirmar +modal-confirm-cancel = Cancelar +modal-confirm-confirm = Confirmar +modal-postInsertLink-title = Insertar enlace +modal-postInsertLink-description = Selecciona una entrada a la que vincular. +modal-postInsertLink-cancel = Cancelar +modal-postInsertLink-tabInternal = Internos +modal-postInsertLink-tabExternal = Externos +modal-postInsertLink-searchPlaceholder = Buscar entradas... +modal-postInsertLink-emptyState = Escribe para buscar entradas o usa entradas relacionadas +modal-postInsertLink-createPost = Crear entrada +modal-postInsertLink-insert = Insertar +modal-postInsertLink-externalUrlPlaceholder = https://example.com +modal-postInsertLink-externalTextPlaceholder = Texto mostrado (opcional) +modal-postInsertLink-urlRequired = Se requiere una URL. +modal-postInsertLink-titleRequired = Introduce un título para crear una entrada enlazada. +modal-postInsertLink-createFailed = No se pudo crear la entrada enlazada. +modal-postInsertLink-loadFailed = No se pudo cargar la entrada seleccionada. +modal-insertMedia-title = Insertar medio +modal-insertMedia-description = Selecciona un medio para insertar. +modal-insertMedia-cancel = Cancelar +modal-insertMedia-searchPlaceholder = Buscar medios... +modal-insertMedia-loadFailed = No se pudo cargar el medio seleccionado. +modal-postGallery-title = Galería de medios +modal-postGallery-description = Haz clic en una imagen para verla a tamaño completo. +modal-postGallery-close = Cerrar +modal-postGallery-backToGrid = Volver a la cuadrícula +modal-postGallery-unavailable = Vista previa no disponible +modal-aiSuggestions-title = Sugerencias de IA +modal-aiSuggestions-applySelected = Aplicar selección +modal-languagePicker-title = Traducir a +sidebar-filter-search = Buscar... +sidebar-filter-toggle = Filtros +sidebar-filter-clearAll = Borrar todos los filtros +sidebar-filter-status = Estado +sidebar-filter-language = Idioma +sidebar-filter-dateRange = Rango de fechas +sidebar-filter-from = Desde (AAAA-MM-DD) +sidebar-filter-to = Hasta (AAAA-MM-DD) +editor-insertLink = Insertar enlace +editor-insertMedia = Insertar medio +editor-gallery = Galería +sidebar-filter-tags = Etiquetas +sidebar-filter-categories = Categorías +sidebar-filter-calendar = Archivo +sidebar-filter-noResults = Sin resultados +editor-title = Título +editor-titlePlaceholder = Introducir título... +editor-slug = Slug +editor-slugPlaceholder = introducir-slug +editor-content = Contenido +editor-contentPlaceholder = Escribe tu contenido... +editor-excerpt = Extracto +editor-excerptPlaceholder = Breve resumen... +editor-author = Autor +editor-language = Idioma +editor-aiAnalyze = Analizar con IA +editor-detectLanguage = Detectar idioma +editor-quickActions = Acciones rápidas +editor-modeMarkdown = Markdown +editor-modePreview = Vista previa +editor-suggestTaxonomy = Sugerir taxonomía +editor-translate = Traducir +editor-templateSlug = Plantilla +editor-doNotTranslate = No traducir +editor-publish = Publicar +editor-discard = Descartar +editor-duplicate = Duplicar +editor-validate = Validar +editor-run = Ejecutar +editor-checkSyntax = Verificar sintaxis +editor-kind = Tipo +editor-enabled = Habilitado +editor-entrypoint = Punto de entrada +editor-alt = Texto alternativo +editor-altPlaceholder = Describir la imagen... +editor-caption = Leyenda +editor-metadata = Metadatos +editor-tags = Etiquetas +editor-tagsPlaceholder = Añadir etiqueta... +editor-categories = Categorías +editor-categoriesPlaceholder = Añadir categoría... +editor-outlinks = Enlaces salientes +editor-backlinks = Enlaces entrantes +editor-linkedMedia = Medios vinculados +editor-linkedMediaEmpty = Todavía no hay medios vinculados. +editor-linkExistingMedia = Vincular existente +editor-linkToPost = Vincular a artículo +editor-linkedPosts = Artículos vinculados +editor-linkedPostsEmpty = No está vinculado a ningún artículo. +editor-postPickerSearch = Buscar artículos +editor-postPickerSearchPlaceholder = Buscar artículos... +editor-unlinkMedia = Desvincular +editor-linkedMediaKindImage = Imagen +editor-linkedMediaKindFile = Archivo +editor-untitled = Sin título +editor-createdAt = Creado +editor-updatedAt = Actualizado +editor-publishedAt = Publicado +tags-noTags = Sin etiquetas +tags-cloudSection = Nube +tags-cloudHelp = Selecciona una o más etiquetas para editarlas, eliminarlas o fusionarlas. +tags-selectedCount = { $count } seleccionadas +tags-clearSelection = Borrar selección +tags-createSection = Crear etiqueta +tags-createPlaceholder = nueva-etiqueta +tags-createButton = Crear +tags-editTag = Editar etiqueta +tags-manageSection = Gestionar +tags-name = Nombre +tags-color = Color +tags-colorPresets = Colores predefinidos +tags-postTemplate = Plantilla de artículo +tags-noTemplate = Ninguna +tags-merge = Fusionar +tags-mergeTarget = Etiqueta destino +tags-mergeSection = Fusionar +tags-mergeHelp = Selecciona al menos dos etiquetas de la nube o la lista para fusionarlas. +tags-mergePreview = Etiquetas para eliminar: { $tags } +tags-mergeConfirmTitle = Fusionar etiquetas +tags-mergeConfirmMessage = ¿Fusionar { $count } etiquetas en { $target }? Esta acción no se puede deshacer. +tags-deleteUsage = Esta etiqueta se usa en { $count } publicaciones. +tags-discoverSection = Descubrir +tags-discoverDescription = Descubre etiquetas a partir de las publicaciones actuales y reescribe tags.json para reflejar la base de datos. +tags-discoverButton = Descubrir +tags-selectTag = Seleccione una etiqueta para editar +template-forceDeleteTitle = Forzar eliminación de plantilla +template-forceDeleteMessage = Esta plantilla se usa en { $posts } publicaciones y { $tags } etiquetas. ¿Forzar eliminación? +common-add = Agregar +common-remove = Eliminar +common-clear = Limpiar +common-noResults = Sin resultados +settings-projectName = Nombre del proyecto +settings-projectDescription = Descripción +settings-dataPath = Carpeta de datos +settings-browse = Explorar... +settings-reset = Restablecer +settings-publicUrl = URL pública +settings-mainLanguage = Idioma principal +settings-mainLanguageRequired = obligatorio +settings-blogLanguages = Idiomas del blog +settings-defaultAuthor = Autor predeterminado +settings-maxPostsPerPage = Artículos por página +settings-blogmarkCategory = Categoría de Blogmark +settings-defaultMode = Modo de editor predeterminado +settings-diffViewStyle = Estilo de diff +settings-categoryTitle = Título para { $category } +settings-categoryPostTemplate = Plantilla de artículo +settings-categoryListTemplate = Plantilla de lista +settings-categoryRenderInLists = Mostrar en listas +settings-categoryShowTitles = Mostrar títulos +settings-addCategory = Agregar categoría +settings-resetCategories = Restablecer categorías predeterminadas +settings-wrapLongLines = Ajuste de línea automático +settings-hideUnchangedRegions = Ocultar regiones sin cambios +settings-offlineMode = Modo avión +settings-onlineEndpointSection = Extremo en línea +settings-onlineEndpointUrl = URL del extremo en línea +settings-onlineEndpointModel = Modelo del extremo en línea +settings-onlineApiKey = Clave API en línea +settings-airplaneEndpointSection = Extremo de modo avión +settings-airplaneEndpointUrl = URL del extremo de modo avión +settings-airplaneEndpointModel = Modelo del extremo de modo avión +settings-refreshModels = Actualizar modelos +settings-defaultModel = Modelo predeterminado +settings-titleModel = Modelo de títulos +settings-imageAnalysisModel = Modelo de análisis de imágenes +settings-keychainConfigured = Guardado en el llavero +settings-systemPrompt = Prompt del sistema +settings-resetToDefault = Restaurar valores predeterminados +settings-luaRuntimeOnly = Lua es el único tiempo de ejecución de scripts en la app Rust. +settings-semanticSimilarityEnabled = Similitud semántica +settings-sshHost = Host SSH +settings-sshUsername = Nombre de usuario SSH +settings-sshRemotePath = Ruta remota +settings-clear = Limpiar +settings-rebuildPosts = Reconstruir artículos +settings-rebuildMedia = Reconstruir medios +settings-rebuildScripts = Reconstruir scripts +settings-rebuildTemplates = Reconstruir plantillas +settings-rebuildLinks = Reconstruir enlaces +settings-regenerateThumbnails = Regenerar miniaturas +settings-openDataFolder = Abrir carpeta de datos +settings-contentPlaceholder = La configuración de contenido aparecerá aquí +settings-technologyPlaceholder = La configuración tecnológica aparecerá aquí +settings-mcpPlaceholder = La configuración del servidor MCP aparecerá aquí +dashboard-overview = Resumen +dashboard-posts = Artículos +dashboard-media = Medios +dashboard-tags = Etiquetas +dashboard-categories = Categorías +dashboard-images = Imágenes +dashboard-drafts = Borradores +dashboard-published = Publicados +dashboard-archived = Archivados +dashboard-statCards = Resumen +dashboard-timeline = Cronología +dashboard-noTimelineData = Todavía no hay datos de cronología +dashboard-tagCloud = Nube de etiquetas +dashboard-noTags = Todavía no hay etiquetas +dashboard-categoryCloud = Nube de categorías +dashboard-recentPosts = Publicaciones recientes +dashboard-noRecentPosts = No hay publicaciones recientes +dashboard-and = y +dashboard-pin = Fijar +common-tabNotImplemented = Esta sección se implementará en un hito posterior. +editor-noPreviewAvailable = No hay vista previa disponible diff --git a/locales/ui/es.json b/locales/ui/es.json deleted file mode 100644 index 32ace81..0000000 --- a/locales/ui/es.json +++ /dev/null @@ -1,387 +0,0 @@ -{ - "menu.group.file": "Archivo", - "menu.group.edit": "Editar", - "menu.group.view": "Ver", - "menu.group.blog": "Blog", - "menu.group.help": "Ayuda", - "menu.item.newPost": "Nueva entrada", - "menu.item.importMedia": "Importar medios...", - "menu.item.save": "Guardar", - "menu.item.openInBrowser": "Abrir en el navegador", - "menu.item.openDataFolder": "Abrir carpeta de datos", - "menu.item.find": "Buscar", - "menu.item.replace": "Reemplazar", - "menu.item.editPreferences": "Editar preferencias", - "menu.item.viewPosts": "Entradas", - "menu.item.viewMedia": "Medios", - "menu.item.toggleSidebar": "Alternar barra lateral", - "menu.item.togglePanel": "Alternar panel", - "menu.item.publishSelected": "Publicar selección", - "menu.item.previewPost": "Vista previa de entrada", - "menu.item.rebuildDatabase": "Reconstruir base de datos desde archivos", - "menu.item.reindexText": "Reindexar texto de búsqueda", - "menu.item.metadataDiff": "Herramienta diff de metadatos", - "menu.item.editMenu": "Editar menú del blog", - "menu.item.generateSitemap": "Renderizar sitio", - "menu.item.regenerateCalendar": "Regenerar calendario", - "menu.item.validateSite": "Validar sitio", - "menu.item.validateTranslations": "Validar traducciones", - "menu.item.fillMissingTranslations": "Completar traducciones faltantes", - "menu.item.uploadSite": "Subir sitio", - "menu.item.about": "Acerca de Blogging Desktop Server", - "menu.item.openDocumentation": "Abrir documentación", - "menu.item.viewOnGitHub": "Ver en GitHub", - "menu.item.reportIssue": "Reportar problema", - "activity.posts": "Entradas", - "activity.pages": "Páginas", - "activity.media": "Medios", - "activity.scripts": "Scripts", - "activity.tags": "Etiquetas", - "activity.templates": "Plantillas", - "activity.aiAssistant": "Asistente IA", - "activity.import": "Importar", - "activity.sourceControl": "Control de código fuente", - "common.save": "Guardar", - "common.open": "Abrir", - "common.cancel": "Cancelar", - "common.settings": "Configuración", - "common.tasks": "Tareas", - "common.running": "en ejecución", - "common.pending": "pendiente", - "tasks.backgroundTasks": "Tareas en segundo plano", - "tasks.clearCompleted": "Limpiar completadas", - "tasks.noActive": "No hay tareas activas", - "tasks.cancelTask": "Cancelar tarea", - "tasks.triggerTitle": "{running} en ejecución, {pending} pendiente", - "app.taskCompleted": "Tarea completada: {message}", - "app.taskFailed": "Tarea fallida: {message}", - "app.databaseRebuildFailed": "La reconstrucción de la base de datos falló", - "app.textReindexFailed": "La reindexación de texto falló", - "panel.output": "Salida", - "panel.postLinks": "Enlaces de entradas", - "panel.gitLog": "Historial de Git", - "panel.postLinksPlaceholder": "No hay enlaces de entradas para mostrar", - "panel.gitLogPlaceholder": "No hay historial de Git para mostrar", - "panel.closeTitle": "Cerrar panel", - "panel.noRecentTasks": "No hay tareas recientes", - "panel.noOutput": "Sin salida", - "statusBar.posts": "{count} publicaciones", - "statusBar.media": "{count} medios", - "statusBar.ui": "UI", - "statusBar.uiLanguage": "Idioma de la interfaz", - "statusBar.offlineMode": "Modo avión", - "statusBar.offlineModeActive": "Modo avión (activo)", - "projectSelector.switchProject": "Cambiar proyecto", - "projectSelector.projectsHeader": "Proyectos", - "projectSelector.newProject": "Nuevo proyecto", - "projectSelector.createProject": "Crear proyecto", - "projectSelector.projectName": "Nombre del proyecto", - "projectSelector.projectNamePlaceholder": "Mi blog", - "projectSelector.chooseFolder": "Elegir carpeta...", - "projectSelector.useDefaultLocation": "Usar ubicación predeterminada", - "projectSelector.deleteProject": "Eliminar proyecto", - "projectSelector.toast.switched": "Cambiado a {name}", - "projectSelector.toast.switchFailed": "No se pudo cambiar de proyecto", - "projectSelector.toast.created": "Proyecto \"{name}\" creado", - "projectSelector.toast.createFailed": "No se pudo crear el proyecto", - "projectSelector.toast.deleteFailed": "No se pudo eliminar el proyecto", - "tabBar.closeHint": "Cerrar", - "tabBar.loading": "Cargando...", - "tabBar.unknown": "Desconocido", - "tabBar.style": "Estilo", - "tabBar.menuEditor": "Editor de menú", - "tabBar.metadataDiff": "Diff de metadatos", - "tabBar.siteValidation": "Validación del sitio", - "tabBar.translationValidation": "Validación de traducciones", - "siteValidation.run": "Ejecutar validación", - "siteValidation.apply": "Aplicar validación", - "siteValidation.applying": "Aplicando...", - "siteValidation.idle": "Ejecuta la validación del sitio para comparar los archivos generados con la salida esperada.", - "siteValidation.running": "Validación en curso...", - "siteValidation.clean": "No se encontraron archivos generados faltantes, extra o desactualizados.", - "siteValidation.error": "La validación falló", - "siteValidation.missing": "Archivos faltantes", - "siteValidation.extra": "Archivos adicionales", - "siteValidation.stale": "Archivos desactualizados", - "tabBar.documentation": "Documentación", - "tabBar.apiDocumentation": "Documentación API", - "tabBar.findDuplicates": "Buscar duplicados", - "tabBar.tags": "Etiquetas", - "tabBar.preview": "Vista previa", - "tabBar.modified": "Modificado", - "sidebar.noPostsYet": "Aún no hay entradas", - "sidebar.noPagesYet": "Aún no hay páginas", - "sidebar.noMediaYet": "Aún no hay medios", - "sidebar.noScriptsYet": "Aún no hay scripts", - "sidebar.noTemplatesYet": "Aún no hay plantillas", - "sidebar.chatPlaceholder": "El asistente IA aparecerá aquí", - "sidebar.importPlaceholder": "Importar contenido desde fuentes externas", - "sidebar.gitPlaceholder": "Integración del control de código fuente", - "sidebar.loading": "Cargando...", - "sidebar.settingsHeader": "Configuración", - "sidebar.tagsHeader": "Etiquetas", - "sidebar.drafts": "Borradores", - "sidebar.published": "Publicados", - "sidebar.archived": "Archivados", - "sidebar.loadMore": "Cargar más…", - "language.en": "Inglés", - "language.de": "Alemán", - "language.fr": "Francés", - "language.it": "Italiano", - "language.es": "Español", - "welcome.title": "Bienvenido a bDS", - "welcome.subtitle": "Abre un proyecto o crea una nueva entrada para comenzar.", - "post.untitled": "Sin título", - "post.createFailed": "No se pudo crear la entrada: {error}", - "engine.rebuildStarted": "Reconstruyendo la base de datos desde archivos...", - "engine.rebuildComplete": "Base de datos reconstruida: {posts} entradas, {media} medios, {templates} plantillas, {scripts} scripts", - "engine.rebuildFailed": "La reconstrucción de la base de datos falló: {error}", - "engine.reindexStarted": "Reindexando texto de búsqueda...", - "engine.reindexComplete": "Texto de búsqueda reindexado: {posts} entradas, {media} medios", - "engine.reindexFailed": "La reindexación del texto de búsqueda falló: {error}", - "engine.calendarStarted": "Regenerando calendario...", - "engine.calendarComplete": "Calendario regenerado", - "engine.calendarFailed": "La regeneración del calendario falló: {error}", - "engine.calendarNoProject": "No hay proyecto activo", - "engine.validateTranslationsStarted": "Validando traducciones...", - "engine.validateMediaStarted": "Validando medios...", - "engine.validateTranslationsComplete": "Validación de traducciones: {dbIssues} problemas en la base de datos, {fsIssues} problemas en el sistema de archivos", - "engine.validateTranslationsFailed": "La validación de traducciones falló: {error}", - "engine.fillMissingTranslationsOffline": "No se pueden completar las traducciones: la IA no está disponible en modo avión", - "engine.fillMissingTranslationsNoAi": "No se pueden completar las traducciones: la IA aún no está disponible", - "engine.uploadStarted": "Subiendo sitio...", - "engine.uploadMissingCredentials": "Credenciales de publicación incompletas. Configúralas en los ajustes del proyecto.", - "engine.uploadOffline": "No se puede subir: el modo avión está activo", - "engine.generateSiteStarted": "Generando sitio...", - "engine.generateSiteNoProject": "No hay proyecto activo", - "engine.previewDataDirUnavailable": "El directorio de datos del proyecto no está disponible", - "engine.previewPortInUse": "El puerto del servidor de vista previa ya está en uso", - "dialog.selectFolder": "Seleccionar carpeta", - "dialog.importMedia": "Importar medios", - "dialog.imageFilter": "Imágenes", - "settings.nav.project": "Proyecto", - "settings.nav.editor": "Editor", - "settings.nav.content": "Contenido", - "settings.nav.ai": "IA", - "settings.nav.technology": "Tecnología", - "settings.nav.publishing": "Publicación", - "settings.nav.data": "Datos", - "settings.nav.mcp": "MCP", - "settings.nav.style": "Estilo", - "tags.nav.cloud": "Nube de etiquetas", - "tags.nav.manage": "Gestionar etiquetas", - "tags.nav.merge": "Fusionar etiquetas", - "tags.nav.discover": "Descubrir etiquetas", - "sidebar.chatYesterday": "Ayer", - "modal.confirmDelete.title": "Confirmar eliminación", - "modal.confirmDelete.warning": "Esta acción no se puede deshacer.", - "modal.confirmDelete.cancel": "Cancelar", - "modal.confirmDelete.delete": "Eliminar", - "modal.confirm.title": "Confirmar", - "modal.confirm.cancel": "Cancelar", - "modal.confirm.confirm": "Confirmar", - "modal.postInsertLink.title": "Insertar enlace", - "modal.postInsertLink.description": "Selecciona una entrada a la que vincular.", - "modal.postInsertLink.cancel": "Cancelar", - "modal.postInsertLink.tabInternal": "Internos", - "modal.postInsertLink.tabExternal": "Externos", - "modal.postInsertLink.searchPlaceholder": "Buscar entradas...", - "modal.postInsertLink.emptyState": "Escribe para buscar entradas o usa entradas relacionadas", - "modal.postInsertLink.createPost": "Crear entrada", - "modal.postInsertLink.insert": "Insertar", - "modal.postInsertLink.externalUrlPlaceholder": "https://example.com", - "modal.postInsertLink.externalTextPlaceholder": "Texto mostrado (opcional)", - "modal.postInsertLink.urlRequired": "Se requiere una URL.", - "modal.postInsertLink.titleRequired": "Introduce un título para crear una entrada enlazada.", - "modal.postInsertLink.createFailed": "No se pudo crear la entrada enlazada.", - "modal.postInsertLink.loadFailed": "No se pudo cargar la entrada seleccionada.", - "modal.insertMedia.title": "Insertar medio", - "modal.insertMedia.description": "Selecciona un medio para insertar.", - "modal.insertMedia.cancel": "Cancelar", - "modal.insertMedia.searchPlaceholder": "Buscar medios...", - "modal.insertMedia.loadFailed": "No se pudo cargar el medio seleccionado.", - "modal.postGallery.title": "Galería de medios", - "modal.postGallery.description": "Haz clic en una imagen para verla a tamaño completo.", - "modal.postGallery.close": "Cerrar", - "modal.postGallery.backToGrid": "Volver a la cuadrícula", - "modal.postGallery.unavailable": "Vista previa no disponible", - "modal.aiSuggestions.title": "Sugerencias de IA", - "modal.aiSuggestions.applySelected": "Aplicar selección", - "modal.languagePicker.title": "Traducir a", - "sidebar.filter.search": "Buscar...", - "sidebar.filter.toggle": "Filtros", - "sidebar.filter.clearAll": "Borrar todos los filtros", - "sidebar.filter.status": "Estado", - "sidebar.filter.language": "Idioma", - "sidebar.filter.dateRange": "Rango de fechas", - "sidebar.filter.from": "Desde (AAAA-MM-DD)", - "sidebar.filter.to": "Hasta (AAAA-MM-DD)", - "editor.insertLink": "Insertar enlace", - "editor.insertMedia": "Insertar medio", - "editor.gallery": "Galería", - "sidebar.filter.tags": "Etiquetas", - "sidebar.filter.categories": "Categorías", - "sidebar.filter.calendar": "Archivo", - "sidebar.filter.noResults": "Sin resultados", - "editor.title": "Título", - "editor.titlePlaceholder": "Introducir título...", - "editor.slug": "Slug", - "editor.slugPlaceholder": "introducir-slug", - "editor.content": "Contenido", - "editor.contentPlaceholder": "Escribe tu contenido...", - "editor.excerpt": "Extracto", - "editor.excerptPlaceholder": "Breve resumen...", - "editor.author": "Autor", - "editor.language": "Idioma", - "editor.aiAnalyze": "Analizar con IA", - "editor.detectLanguage": "Detectar idioma", - "editor.quickActions": "Acciones rápidas", - "editor.modeMarkdown": "Markdown", - "editor.modePreview": "Vista previa", - "editor.suggestTaxonomy": "Sugerir taxonomía", - "editor.translate": "Traducir", - "editor.templateSlug": "Plantilla", - "editor.doNotTranslate": "No traducir", - "editor.publish": "Publicar", - "editor.discard": "Descartar", - "editor.duplicate": "Duplicar", - "editor.validate": "Validar", - "editor.run": "Ejecutar", - "editor.checkSyntax": "Verificar sintaxis", - "editor.kind": "Tipo", - "editor.enabled": "Habilitado", - "editor.entrypoint": "Punto de entrada", - "editor.alt": "Texto alternativo", - "editor.altPlaceholder": "Describir la imagen...", - "editor.caption": "Leyenda", - "editor.metadata": "Metadatos", - "editor.tags": "Etiquetas", - "editor.tagsPlaceholder": "Añadir etiqueta...", - "editor.categories": "Categorías", - "editor.categoriesPlaceholder": "Añadir categoría...", - "editor.outlinks": "Enlaces salientes", - "editor.backlinks": "Enlaces entrantes", - "editor.linkedMedia": "Medios vinculados", - "editor.linkedMediaEmpty": "Todavía no hay medios vinculados.", - "editor.linkExistingMedia": "Vincular existente", - "editor.linkToPost": "Vincular a artículo", - "editor.linkedPosts": "Artículos vinculados", - "editor.linkedPostsEmpty": "No está vinculado a ningún artículo.", - "editor.postPickerSearch": "Buscar artículos", - "editor.postPickerSearchPlaceholder": "Buscar artículos...", - "editor.unlinkMedia": "Desvincular", - "editor.linkedMediaKindImage": "Imagen", - "editor.linkedMediaKindFile": "Archivo", - "editor.untitled": "Sin título", - "editor.createdAt": "Creado", - "editor.updatedAt": "Actualizado", - "editor.publishedAt": "Publicado", - "tags.noTags": "Sin etiquetas", - "tags.cloudSection": "Nube", - "tags.cloudHelp": "Selecciona una o más etiquetas para editarlas, eliminarlas o fusionarlas.", - "tags.selectedCount": "{count} seleccionadas", - "tags.clearSelection": "Borrar selección", - "tags.createSection": "Crear etiqueta", - "tags.createPlaceholder": "nueva-etiqueta", - "tags.createButton": "Crear", - "tags.editTag": "Editar etiqueta", - "tags.manageSection": "Gestionar", - "tags.name": "Nombre", - "tags.color": "Color", - "tags.colorPresets": "Colores predefinidos", - "tags.postTemplate": "Plantilla de artículo", - "tags.noTemplate": "Ninguna", - "tags.merge": "Fusionar", - "tags.mergeTarget": "Etiqueta destino", - "tags.mergeSection": "Fusionar", - "tags.mergeHelp": "Selecciona al menos dos etiquetas de la nube o la lista para fusionarlas.", - "tags.mergePreview": "Etiquetas para eliminar: {tags}", - "tags.mergeConfirmTitle": "Fusionar etiquetas", - "tags.mergeConfirmMessage": "¿Fusionar {count} etiquetas en {target}? Esta acción no se puede deshacer.", - "tags.deleteUsage": "Esta etiqueta se usa en {count} publicaciones.", - "tags.discoverSection": "Descubrir", - "tags.discoverDescription": "Descubre etiquetas a partir de las publicaciones actuales y reescribe tags.json para reflejar la base de datos.", - "tags.discoverButton": "Descubrir", - "tags.selectTag": "Seleccione una etiqueta para editar", - "template.forceDeleteTitle": "Forzar eliminación de plantilla", - "template.forceDeleteMessage": "Esta plantilla se usa en {posts} publicaciones y {tags} etiquetas. ¿Forzar eliminación?", - "common.add": "Agregar", - "common.remove": "Eliminar", - "common.clear": "Limpiar", - "common.noResults": "Sin resultados", - "settings.projectName": "Nombre del proyecto", - "settings.projectDescription": "Descripción", - "settings.dataPath": "Carpeta de datos", - "settings.browse": "Explorar...", - "settings.reset": "Restablecer", - "settings.publicUrl": "URL pública", - "settings.mainLanguage": "Idioma principal", - "settings.mainLanguageRequired": "obligatorio", - "settings.blogLanguages": "Idiomas del blog", - "settings.defaultAuthor": "Autor predeterminado", - "settings.maxPostsPerPage": "Artículos por página", - "settings.blogmarkCategory": "Categoría de Blogmark", - "settings.defaultMode": "Modo de editor predeterminado", - "settings.diffViewStyle": "Estilo de diff", - "settings.categoryTitle": "Título para {category}", - "settings.categoryPostTemplate": "Plantilla de artículo", - "settings.categoryListTemplate": "Plantilla de lista", - "settings.categoryRenderInLists": "Mostrar en listas", - "settings.categoryShowTitles": "Mostrar títulos", - "settings.addCategory": "Agregar categoría", - "settings.resetCategories": "Restablecer categorías predeterminadas", - "settings.wrapLongLines": "Ajuste de línea automático", - "settings.hideUnchangedRegions": "Ocultar regiones sin cambios", - "settings.offlineMode": "Modo avión", - "settings.onlineEndpointSection": "Extremo en línea", - "settings.onlineEndpointUrl": "URL del extremo en línea", - "settings.onlineEndpointModel": "Modelo del extremo en línea", - "settings.onlineApiKey": "Clave API en línea", - "settings.airplaneEndpointSection": "Extremo de modo avión", - "settings.airplaneEndpointUrl": "URL del extremo de modo avión", - "settings.airplaneEndpointModel": "Modelo del extremo de modo avión", - "settings.refreshModels": "Actualizar modelos", - "settings.defaultModel": "Modelo predeterminado", - "settings.titleModel": "Modelo de títulos", - "settings.imageAnalysisModel": "Modelo de análisis de imágenes", - "settings.keychainConfigured": "Guardado en el llavero", - "settings.systemPrompt": "Prompt del sistema", - "settings.resetToDefault": "Restaurar valores predeterminados", - "settings.luaRuntimeOnly": "Lua es el único tiempo de ejecución de scripts en la app Rust.", - "settings.semanticSimilarityEnabled": "Similitud semántica", - "settings.sshHost": "Host SSH", - "settings.sshUsername": "Nombre de usuario SSH", - "settings.sshRemotePath": "Ruta remota", - "settings.clear": "Limpiar", - "settings.rebuildPosts": "Reconstruir artículos", - "settings.rebuildMedia": "Reconstruir medios", - "settings.rebuildScripts": "Reconstruir scripts", - "settings.rebuildTemplates": "Reconstruir plantillas", - "settings.rebuildLinks": "Reconstruir enlaces", - "settings.regenerateThumbnails": "Regenerar miniaturas", - "settings.openDataFolder": "Abrir carpeta de datos", - "settings.contentPlaceholder": "La configuración de contenido aparecerá aquí", - "settings.technologyPlaceholder": "La configuración tecnológica aparecerá aquí", - "settings.mcpPlaceholder": "La configuración del servidor MCP aparecerá aquí", - "dashboard.overview": "Resumen", - "dashboard.posts": "Artículos", - "dashboard.media": "Medios", - "dashboard.tags": "Etiquetas", - "dashboard.categories": "Categorías", - "dashboard.images": "Imágenes", - "dashboard.drafts": "Borradores", - "dashboard.published": "Publicados", - "dashboard.archived": "Archivados", - "dashboard.statCards": "Resumen", - "dashboard.timeline": "Cronología", - "dashboard.noTimelineData": "Todavía no hay datos de cronología", - "dashboard.tagCloud": "Nube de etiquetas", - "dashboard.noTags": "Todavía no hay etiquetas", - "dashboard.categoryCloud": "Nube de categorías", - "dashboard.recentPosts": "Publicaciones recientes", - "dashboard.noRecentPosts": "No hay publicaciones recientes", - "dashboard.and": "y", - "dashboard.pin": "Fijar", - "common.tabNotImplemented": "Esta sección se implementará en un hito posterior.", - "editor.noPreviewAvailable": "No hay vista previa disponible" -} diff --git a/locales/ui/fr.ftl b/locales/ui/fr.ftl new file mode 100644 index 0000000..113e5dd --- /dev/null +++ b/locales/ui/fr.ftl @@ -0,0 +1,385 @@ +menu-group-file = Fichier +menu-group-edit = Édition +menu-group-view = Affichage +menu-group-blog = Blog +menu-group-help = Aide +menu-item-newPost = Nouvel article +menu-item-importMedia = Importer des médias... +menu-item-save = Enregistrer +menu-item-openInBrowser = Ouvrir dans le navigateur +menu-item-openDataFolder = Ouvrir le dossier de données +menu-item-find = Rechercher +menu-item-replace = Remplacer +menu-item-editPreferences = Modifier les préférences +menu-item-viewPosts = Articles +menu-item-viewMedia = Médias +menu-item-toggleSidebar = Basculer la barre latérale +menu-item-togglePanel = Basculer le panneau +menu-item-publishSelected = Publier la sélection +menu-item-previewPost = Aperçu de l'article +menu-item-rebuildDatabase = Reconstruire la base de données +menu-item-reindexText = Réindexer le texte de recherche +menu-item-metadataDiff = Outil de diff des métadonnées +menu-item-editMenu = Modifier le menu du blog +menu-item-generateSitemap = Rendre le site +menu-item-regenerateCalendar = Régénérer le calendrier +menu-item-validateSite = Valider le site +menu-item-validateTranslations = Valider les traductions +menu-item-fillMissingTranslations = Compléter les traductions manquantes +menu-item-uploadSite = Publier le site +menu-item-about = À propos de Blogging Desktop Server +menu-item-openDocumentation = Ouvrir la documentation +menu-item-viewOnGitHub = Voir sur GitHub +menu-item-reportIssue = Signaler un problème +activity-posts = Articles +activity-pages = Pages du site +activity-media = Médias +activity-scripts = Scripts +activity-tags = Étiquettes +activity-templates = Modèles +activity-aiAssistant = Assistant IA +activity-import = Importation +activity-sourceControl = Contrôle de source +common-save = Enregistrer +common-open = Ouvrir +common-cancel = Annuler +common-settings = Paramètres +common-tasks = Tâches +common-running = en cours +common-pending = en attente +tasks-backgroundTasks = Tâches en arrière-plan +tasks-clearCompleted = Effacer terminé +tasks-noActive = Aucune tâche active +tasks-cancelTask = Annuler la tâche +tasks-triggerTitle = { $running } en cours, { $pending } en attente +app-taskCompleted = Tâche terminée : { $message } +app-taskFailed = Échec de la tâche : { $message } +app-databaseRebuildFailed = Échec de la reconstruction de la base de données +app-textReindexFailed = Échec de la réindexation du texte +panel-output = Sortie +panel-postLinks = Liens d'articles +panel-gitLog = Historique Git +panel-postLinksPlaceholder = Aucun lien d'article à afficher +panel-gitLogPlaceholder = Aucun historique Git à afficher +panel-closeTitle = Fermer le panneau +panel-noRecentTasks = Aucune tâche récente +panel-noOutput = Aucune sortie +statusBar-posts = { $count } articles +statusBar-media = { $count } médias +statusBar-ui = UI +statusBar-uiLanguage = Langue de l'interface +statusBar-offlineMode = Mode avion +statusBar-offlineModeActive = Mode avion (actif) +projectSelector-switchProject = Changer de projet +projectSelector-projectsHeader = Projets +projectSelector-newProject = Nouveau projet +projectSelector-createProject = Créer le projet +projectSelector-projectName = Nom du projet +projectSelector-projectNamePlaceholder = Mon blog +projectSelector-chooseFolder = Choisir un dossier... +projectSelector-useDefaultLocation = Utiliser l'emplacement par défaut +projectSelector-deleteProject = Supprimer le projet +projectSelector-toast-switched = Projet actif : { $name } +projectSelector-toast-switchFailed = Échec du changement de projet +projectSelector-toast-created = Projet "{ $name }" créé +projectSelector-toast-createFailed = Impossible de créer le projet +projectSelector-toast-deleteFailed = Impossible de supprimer le projet +tabBar-closeHint = Fermer +tabBar-loading = Chargement... +tabBar-unknown = Inconnu +tabBar-style = Style +tabBar-menuEditor = Éditeur de menu +tabBar-metadataDiff = Diff métadonnées +tabBar-siteValidation = Validation du site +tabBar-translationValidation = Validation des traductions +siteValidation-run = Lancer la validation +siteValidation-apply = Appliquer la validation +siteValidation-applying = Application en cours... +siteValidation-idle = Lancez la validation du site pour comparer les fichiers générés à la sortie attendue. +siteValidation-running = Validation en cours... +siteValidation-clean = Aucun fichier généré manquant, supplémentaire ou obsolète n'a été trouvé. +siteValidation-error = La validation a échoué +siteValidation-missing = Fichiers manquants +siteValidation-extra = Fichiers supplémentaires +siteValidation-stale = Fichiers obsolètes +tabBar-documentation = Documentation +tabBar-apiDocumentation = Documentation API +tabBar-findDuplicates = Trouver les doublons +tabBar-tags = Tags +tabBar-preview = Aperçu +tabBar-modified = Modifié +sidebar-noPostsYet = Aucun article pour le moment +sidebar-noPagesYet = Aucune page pour le moment +sidebar-noMediaYet = Aucun média pour le moment +sidebar-noScriptsYet = Aucun script +sidebar-noTemplatesYet = Aucun modèle +sidebar-chatPlaceholder = L'assistant IA apparaîtra ici +sidebar-importPlaceholder = Importer du contenu depuis des sources externes +sidebar-gitPlaceholder = Intégration du contrôle de source +sidebar-loading = Chargement... +sidebar-settingsHeader = Paramètres +sidebar-tagsHeader = Étiquettes +sidebar-drafts = Brouillons +sidebar-published = Publiés +sidebar-archived = Archivés +sidebar-loadMore = Charger plus… +language-en = Anglais +language-de = Allemand +language-fr = Français +language-it = Italien +language-es = Espagnol +welcome-title = Bienvenue dans bDS +welcome-subtitle = Ouvrez un projet ou créez un nouvel article pour commencer. +post-untitled = Sans titre +post-createFailed = Impossible de créer l'article : { $error } +engine-rebuildStarted = Reconstruction de la base de données à partir des fichiers... +engine-rebuildComplete = Base de données reconstruite : { $posts } articles, { $media } médias, { $templates } modèles, { $scripts } scripts +engine-rebuildFailed = Échec de la reconstruction de la base de données : { $error } +engine-reindexStarted = Réindexation du texte de recherche... +engine-reindexComplete = Texte de recherche réindexé : { $posts } articles, { $media } médias +engine-reindexFailed = Échec de la réindexation du texte de recherche : { $error } +engine-calendarStarted = Régénération du calendrier... +engine-calendarComplete = Calendrier régénéré +engine-calendarFailed = Échec de la régénération du calendrier : { $error } +engine-calendarNoProject = Aucun projet actif +engine-validateTranslationsStarted = Validation des traductions... +engine-validateMediaStarted = Validation des médias... +engine-validateTranslationsComplete = Validation des traductions : { $dbIssues } problèmes en base, { $fsIssues } problèmes sur le système de fichiers +engine-validateTranslationsFailed = Échec de la validation des traductions : { $error } +engine-fillMissingTranslationsOffline = Impossible de compléter les traductions : l'IA n'est pas disponible en mode avion +engine-fillMissingTranslationsNoAi = Impossible de compléter les traductions : l'IA n'est pas encore disponible +engine-uploadStarted = Publication du site... +engine-uploadMissingCredentials = Identifiants de publication incomplets. Configurez-les dans les paramètres du projet. +engine-uploadOffline = Impossible de publier : le mode avion est actif +engine-generateSiteStarted = Génération du site... +engine-generateSiteNoProject = Aucun projet actif +engine-previewDataDirUnavailable = Le répertoire de données du projet est indisponible +engine-previewPortInUse = Le port du serveur d'aperçu est déjà utilisé +dialog-selectFolder = Sélectionner un dossier +dialog-importMedia = Importer des médias +dialog-imageFilter = Images +settings-nav-project = Projet +settings-nav-editor = Éditeur +settings-nav-content = Contenu +settings-nav-ai = IA +settings-nav-technology = Technologie +settings-nav-publishing = Publication +settings-nav-data = Données +settings-nav-mcp = MCP +settings-nav-style = Style +tags-nav-cloud = Nuage de tags +tags-nav-manage = Gérer les tags +tags-nav-merge = Fusionner les tags +tags-nav-discover = Découvrir les tags +sidebar-chatYesterday = Hier +modal-confirmDelete-title = Confirmer la suppression +modal-confirmDelete-warning = Cette action est irréversible. +modal-confirmDelete-cancel = Annuler +modal-confirmDelete-delete = Supprimer +modal-confirm-title = Confirmer +modal-confirm-cancel = Annuler +modal-confirm-confirm = Confirmer +modal-postInsertLink-title = Insérer un lien +modal-postInsertLink-description = Sélectionnez un article à lier. +modal-postInsertLink-cancel = Annuler +modal-postInsertLink-tabInternal = Interne +modal-postInsertLink-tabExternal = Externe +modal-postInsertLink-searchPlaceholder = Rechercher les articles... +modal-postInsertLink-emptyState = Commencez à taper pour rechercher des articles ou utilisez des articles similaires +modal-postInsertLink-createPost = Créer l'article +modal-postInsertLink-insert = Insérer +modal-postInsertLink-externalUrlPlaceholder = https://example.com +modal-postInsertLink-externalTextPlaceholder = Texte affiché (optionnel) +modal-postInsertLink-urlRequired = Une URL est requise. +modal-postInsertLink-titleRequired = Saisissez un titre pour créer un article lié. +modal-postInsertLink-createFailed = Impossible de créer l'article lié. +modal-postInsertLink-loadFailed = Impossible de charger l'article sélectionné. +modal-insertMedia-title = Insérer un média +modal-insertMedia-description = Sélectionnez un média à insérer. +modal-insertMedia-cancel = Annuler +modal-insertMedia-searchPlaceholder = Rechercher les médias... +modal-insertMedia-loadFailed = Impossible de charger le média sélectionné. +modal-postGallery-title = Galerie média +modal-postGallery-description = Cliquez sur une image pourvoir en taille réelle. +modal-postGallery-close = Fermer +modal-postGallery-backToGrid = Retour à la grille +modal-postGallery-unavailable = Aperçu indisponible +modal-aiSuggestions-title = Suggestions IA +modal-aiSuggestions-applySelected = Appliquer la sélection +modal-languagePicker-title = Traduire vers +sidebar-filter-search = Rechercher... +sidebar-filter-toggle = Filtres +sidebar-filter-clearAll = Effacer tous les filtres +sidebar-filter-status = Statut +sidebar-filter-language = Langue +sidebar-filter-dateRange = Plage de dates +sidebar-filter-from = Depuis (AAAA-MM-JJ) +sidebar-filter-to = Jusqu'au (AAAA-MM-JJ) +editor-insertLink = Insérer un lien +editor-insertMedia = Insérer un média +editor-gallery = Galerie +sidebar-filter-tags = Tags +sidebar-filter-categories = Catégories +sidebar-filter-calendar = Archives +sidebar-filter-noResults = Aucun résultat +editor-title = Titre +editor-titlePlaceholder = Saisir le titre... +editor-slug = Slug +editor-slugPlaceholder = saisir-slug +editor-content = Contenu +editor-contentPlaceholder = Rédigez votre contenu... +editor-excerpt = Extrait +editor-excerptPlaceholder = Bref résumé... +editor-author = Auteur +editor-language = Langue +editor-aiAnalyze = Analyser avec l'IA +editor-detectLanguage = Détecter la langue +editor-quickActions = Actions rapides +editor-modeMarkdown = Markdown +editor-modePreview = Aperçu +editor-suggestTaxonomy = Suggérer la taxonomie +editor-translate = Traduire +editor-templateSlug = Modèle +editor-doNotTranslate = Ne pas traduire +editor-publish = Publier +editor-discard = Annuler les modifications +editor-duplicate = Dupliquer +editor-validate = Valider +editor-run = Exécuter +editor-checkSyntax = Vérifier la syntaxe +editor-kind = Type +editor-enabled = Activé +editor-entrypoint = Point d'entrée +editor-alt = Texte alternatif +editor-altPlaceholder = Décrivez l'image... +editor-caption = Légende +editor-metadata = Métadonnées +editor-tags = Tags +editor-tagsPlaceholder = Ajouter un tag... +editor-categories = Catégories +editor-categoriesPlaceholder = Ajouter une catégorie... +editor-outlinks = Liens sortants +editor-backlinks = Liens entrants +editor-linkedMedia = Médias liés +editor-linkedMediaEmpty = Aucun média lié pour le moment. +editor-linkExistingMedia = Lier un existant +editor-linkToPost = Lier à un article +editor-linkedPosts = Articles liés +editor-linkedPostsEmpty = Lié à aucun article. +editor-postPickerSearch = Rechercher des articles +editor-postPickerSearchPlaceholder = Rechercher des articles... +editor-unlinkMedia = Dissocier +editor-linkedMediaKindImage = Image +editor-linkedMediaKindFile = Fichier +editor-untitled = Sans titre +editor-createdAt = Créé +editor-updatedAt = Mis à jour +editor-publishedAt = Publié +tags-noTags = Aucun tag +tags-cloudSection = Nuage +tags-cloudHelp = Sélectionnez un ou plusieurs tags pour les modifier, les supprimer ou les fusionner. +tags-selectedCount = { $count } sélectionnés +tags-clearSelection = Effacer la sélection +tags-createSection = Créer un tag +tags-createPlaceholder = nouveau-tag +tags-createButton = Créer +tags-editTag = Modifier le tag +tags-manageSection = Gérer +tags-name = Nom +tags-color = Couleur +tags-colorPresets = Couleurs prédéfinies +tags-postTemplate = Modèle d'article +tags-noTemplate = Aucun +tags-merge = Fusionner +tags-mergeTarget = Tag cible +tags-mergeSection = Fusionner +tags-mergeHelp = Sélectionnez au moins deux tags dans le nuage ou la liste pour les fusionner. +tags-mergePreview = Tags à supprimer : { $tags } +tags-mergeConfirmTitle = Fusionner les tags +tags-mergeConfirmMessage = Fusionner { $count } tags dans { $target } ? Cette action est irréversible. +tags-deleteUsage = Ce tag est utilisé dans { $count } articles. +tags-discoverSection = Découvrir +tags-discoverDescription = Découvrir les tags à partir des articles actuels et réécrire tags.json pour refléter la base de données. +tags-discoverButton = Découvrir +tags-selectTag = Sélectionnez un tag à modifier +template-forceDeleteTitle = Forcer la suppression du modèle +template-forceDeleteMessage = Ce modèle est utilisé par { $posts } articles et { $tags } tags. Forcer la suppression ? +common-add = Ajouter +common-remove = Supprimer +common-clear = Effacer +common-noResults = Aucun résultat +settings-projectName = Nom du projet +settings-projectDescription = Description +settings-dataPath = Dossier de données +settings-browse = Parcourir... +settings-reset = Réinitialiser +settings-publicUrl = URL publique +settings-mainLanguage = Langue principale +settings-mainLanguageRequired = requise +settings-blogLanguages = Langues du blog +settings-defaultAuthor = Auteur par défaut +settings-maxPostsPerPage = Articles par page +settings-blogmarkCategory = Catégorie Blogmark +settings-defaultMode = Mode d'édition par défaut +settings-diffViewStyle = Style de diff +settings-categoryTitle = Titre pour { $category } +settings-categoryPostTemplate = Modèle d'article +settings-categoryListTemplate = Modèle de liste +settings-categoryRenderInLists = Afficher dans les listes +settings-categoryShowTitles = Afficher les titres +settings-addCategory = Ajouter une catégorie +settings-resetCategories = Rétablir les catégories par défaut +settings-wrapLongLines = Retour à la ligne automatique +settings-hideUnchangedRegions = Masquer les régions inchangées +settings-offlineMode = Mode avion +settings-onlineEndpointSection = Point de terminaison en ligne +settings-onlineEndpointUrl = URL du point de terminaison en ligne +settings-onlineEndpointModel = Modèle du point de terminaison en ligne +settings-onlineApiKey = Clé API en ligne +settings-airplaneEndpointSection = Point de terminaison mode avion +settings-airplaneEndpointUrl = URL du point de terminaison mode avion +settings-airplaneEndpointModel = Modèle du point de terminaison mode avion +settings-refreshModels = Rafraîchir les modèles +settings-defaultModel = Modèle par défaut +settings-titleModel = Modèle de titres +settings-imageAnalysisModel = Modèle d'analyse d'image +settings-keychainConfigured = Stocké dans le trousseau +settings-systemPrompt = Prompt système +settings-resetToDefault = Rétablir les valeurs par défaut +settings-luaRuntimeOnly = Lua est l'unique moteur de script dans l'application Rust. +settings-semanticSimilarityEnabled = Similarité sémantique +settings-sshHost = Hôte SSH +settings-sshUsername = Nom d'utilisateur SSH +settings-sshRemotePath = Chemin distant +settings-clear = Effacer +settings-rebuildPosts = Reconstruire les articles +settings-rebuildMedia = Reconstruire les médias +settings-rebuildScripts = Reconstruire les scripts +settings-rebuildTemplates = Reconstruire les modèles +settings-rebuildLinks = Reconstruire les liens +settings-regenerateThumbnails = Régénérer les miniatures +settings-openDataFolder = Ouvrir le dossier de données +settings-contentPlaceholder = Les paramètres de contenu apparaîtront ici +settings-technologyPlaceholder = Les paramètres technologiques apparaîtront ici +settings-mcpPlaceholder = Les paramètres du serveur MCP apparaîtront ici +dashboard-overview = Aperçu +dashboard-posts = Articles +dashboard-media = Médias +dashboard-tags = Tags +dashboard-categories = Catégories +dashboard-images = Images +dashboard-drafts = Brouillons +dashboard-published = Publiés +dashboard-archived = Archivés +dashboard-statCards = Instantané +dashboard-timeline = Chronologie +dashboard-noTimelineData = Aucune donnée de chronologie +dashboard-tagCloud = Nuage de tags +dashboard-noTags = Aucun tag pour le moment +dashboard-categoryCloud = Nuage de catégories +dashboard-recentPosts = Articles récents +dashboard-noRecentPosts = Aucun article récent +dashboard-and = et +dashboard-pin = Épingler +common-tabNotImplemented = Cette section sera mise en œuvre lors d’une étape ultérieure. +editor-noPreviewAvailable = Aucun aperçu disponible diff --git a/locales/ui/fr.json b/locales/ui/fr.json deleted file mode 100644 index bf75abb..0000000 --- a/locales/ui/fr.json +++ /dev/null @@ -1,387 +0,0 @@ -{ - "menu.group.file": "Fichier", - "menu.group.edit": "Édition", - "menu.group.view": "Affichage", - "menu.group.blog": "Blog", - "menu.group.help": "Aide", - "menu.item.newPost": "Nouvel article", - "menu.item.importMedia": "Importer des médias...", - "menu.item.save": "Enregistrer", - "menu.item.openInBrowser": "Ouvrir dans le navigateur", - "menu.item.openDataFolder": "Ouvrir le dossier de données", - "menu.item.find": "Rechercher", - "menu.item.replace": "Remplacer", - "menu.item.editPreferences": "Modifier les préférences", - "menu.item.viewPosts": "Articles", - "menu.item.viewMedia": "Médias", - "menu.item.toggleSidebar": "Basculer la barre latérale", - "menu.item.togglePanel": "Basculer le panneau", - "menu.item.publishSelected": "Publier la sélection", - "menu.item.previewPost": "Aperçu de l'article", - "menu.item.rebuildDatabase": "Reconstruire la base de données", - "menu.item.reindexText": "Réindexer le texte de recherche", - "menu.item.metadataDiff": "Outil de diff des métadonnées", - "menu.item.editMenu": "Modifier le menu du blog", - "menu.item.generateSitemap": "Rendre le site", - "menu.item.regenerateCalendar": "Régénérer le calendrier", - "menu.item.validateSite": "Valider le site", - "menu.item.validateTranslations": "Valider les traductions", - "menu.item.fillMissingTranslations": "Compléter les traductions manquantes", - "menu.item.uploadSite": "Publier le site", - "menu.item.about": "À propos de Blogging Desktop Server", - "menu.item.openDocumentation": "Ouvrir la documentation", - "menu.item.viewOnGitHub": "Voir sur GitHub", - "menu.item.reportIssue": "Signaler un problème", - "activity.posts": "Articles", - "activity.pages": "Pages du site", - "activity.media": "Médias", - "activity.scripts": "Scripts", - "activity.tags": "Étiquettes", - "activity.templates": "Modèles", - "activity.aiAssistant": "Assistant IA", - "activity.import": "Importation", - "activity.sourceControl": "Contrôle de source", - "common.save": "Enregistrer", - "common.open": "Ouvrir", - "common.cancel": "Annuler", - "common.settings": "Paramètres", - "common.tasks": "Tâches", - "common.running": "en cours", - "common.pending": "en attente", - "tasks.backgroundTasks": "Tâches en arrière-plan", - "tasks.clearCompleted": "Effacer terminé", - "tasks.noActive": "Aucune tâche active", - "tasks.cancelTask": "Annuler la tâche", - "tasks.triggerTitle": "{running} en cours, {pending} en attente", - "app.taskCompleted": "Tâche terminée : {message}", - "app.taskFailed": "Échec de la tâche : {message}", - "app.databaseRebuildFailed": "Échec de la reconstruction de la base de données", - "app.textReindexFailed": "Échec de la réindexation du texte", - "panel.output": "Sortie", - "panel.postLinks": "Liens d'articles", - "panel.gitLog": "Historique Git", - "panel.postLinksPlaceholder": "Aucun lien d'article à afficher", - "panel.gitLogPlaceholder": "Aucun historique Git à afficher", - "panel.closeTitle": "Fermer le panneau", - "panel.noRecentTasks": "Aucune tâche récente", - "panel.noOutput": "Aucune sortie", - "statusBar.posts": "{count} articles", - "statusBar.media": "{count} médias", - "statusBar.ui": "UI", - "statusBar.uiLanguage": "Langue de l'interface", - "statusBar.offlineMode": "Mode avion", - "statusBar.offlineModeActive": "Mode avion (actif)", - "projectSelector.switchProject": "Changer de projet", - "projectSelector.projectsHeader": "Projets", - "projectSelector.newProject": "Nouveau projet", - "projectSelector.createProject": "Créer le projet", - "projectSelector.projectName": "Nom du projet", - "projectSelector.projectNamePlaceholder": "Mon blog", - "projectSelector.chooseFolder": "Choisir un dossier...", - "projectSelector.useDefaultLocation": "Utiliser l'emplacement par défaut", - "projectSelector.deleteProject": "Supprimer le projet", - "projectSelector.toast.switched": "Projet actif : {name}", - "projectSelector.toast.switchFailed": "Échec du changement de projet", - "projectSelector.toast.created": "Projet \"{name}\" créé", - "projectSelector.toast.createFailed": "Impossible de créer le projet", - "projectSelector.toast.deleteFailed": "Impossible de supprimer le projet", - "tabBar.closeHint": "Fermer", - "tabBar.loading": "Chargement...", - "tabBar.unknown": "Inconnu", - "tabBar.style": "Style", - "tabBar.menuEditor": "Éditeur de menu", - "tabBar.metadataDiff": "Diff métadonnées", - "tabBar.siteValidation": "Validation du site", - "tabBar.translationValidation": "Validation des traductions", - "siteValidation.run": "Lancer la validation", - "siteValidation.apply": "Appliquer la validation", - "siteValidation.applying": "Application en cours...", - "siteValidation.idle": "Lancez la validation du site pour comparer les fichiers générés à la sortie attendue.", - "siteValidation.running": "Validation en cours...", - "siteValidation.clean": "Aucun fichier généré manquant, supplémentaire ou obsolète n'a été trouvé.", - "siteValidation.error": "La validation a échoué", - "siteValidation.missing": "Fichiers manquants", - "siteValidation.extra": "Fichiers supplémentaires", - "siteValidation.stale": "Fichiers obsolètes", - "tabBar.documentation": "Documentation", - "tabBar.apiDocumentation": "Documentation API", - "tabBar.findDuplicates": "Trouver les doublons", - "tabBar.tags": "Tags", - "tabBar.preview": "Aperçu", - "tabBar.modified": "Modifié", - "sidebar.noPostsYet": "Aucun article pour le moment", - "sidebar.noPagesYet": "Aucune page pour le moment", - "sidebar.noMediaYet": "Aucun média pour le moment", - "sidebar.noScriptsYet": "Aucun script", - "sidebar.noTemplatesYet": "Aucun modèle", - "sidebar.chatPlaceholder": "L'assistant IA apparaîtra ici", - "sidebar.importPlaceholder": "Importer du contenu depuis des sources externes", - "sidebar.gitPlaceholder": "Intégration du contrôle de source", - "sidebar.loading": "Chargement...", - "sidebar.settingsHeader": "Paramètres", - "sidebar.tagsHeader": "Étiquettes", - "sidebar.drafts": "Brouillons", - "sidebar.published": "Publiés", - "sidebar.archived": "Archivés", - "sidebar.loadMore": "Charger plus…", - "language.en": "Anglais", - "language.de": "Allemand", - "language.fr": "Français", - "language.it": "Italien", - "language.es": "Espagnol", - "welcome.title": "Bienvenue dans bDS", - "welcome.subtitle": "Ouvrez un projet ou créez un nouvel article pour commencer.", - "post.untitled": "Sans titre", - "post.createFailed": "Impossible de créer l'article : {error}", - "engine.rebuildStarted": "Reconstruction de la base de données à partir des fichiers...", - "engine.rebuildComplete": "Base de données reconstruite : {posts} articles, {media} médias, {templates} modèles, {scripts} scripts", - "engine.rebuildFailed": "Échec de la reconstruction de la base de données : {error}", - "engine.reindexStarted": "Réindexation du texte de recherche...", - "engine.reindexComplete": "Texte de recherche réindexé : {posts} articles, {media} médias", - "engine.reindexFailed": "Échec de la réindexation du texte de recherche : {error}", - "engine.calendarStarted": "Régénération du calendrier...", - "engine.calendarComplete": "Calendrier régénéré", - "engine.calendarFailed": "Échec de la régénération du calendrier : {error}", - "engine.calendarNoProject": "Aucun projet actif", - "engine.validateTranslationsStarted": "Validation des traductions...", - "engine.validateMediaStarted": "Validation des médias...", - "engine.validateTranslationsComplete": "Validation des traductions : {dbIssues} problèmes en base, {fsIssues} problèmes sur le système de fichiers", - "engine.validateTranslationsFailed": "Échec de la validation des traductions : {error}", - "engine.fillMissingTranslationsOffline": "Impossible de compléter les traductions : l'IA n'est pas disponible en mode avion", - "engine.fillMissingTranslationsNoAi": "Impossible de compléter les traductions : l'IA n'est pas encore disponible", - "engine.uploadStarted": "Publication du site...", - "engine.uploadMissingCredentials": "Identifiants de publication incomplets. Configurez-les dans les paramètres du projet.", - "engine.uploadOffline": "Impossible de publier : le mode avion est actif", - "engine.generateSiteStarted": "Génération du site...", - "engine.generateSiteNoProject": "Aucun projet actif", - "engine.previewDataDirUnavailable": "Le répertoire de données du projet est indisponible", - "engine.previewPortInUse": "Le port du serveur d'aperçu est déjà utilisé", - "dialog.selectFolder": "Sélectionner un dossier", - "dialog.importMedia": "Importer des médias", - "dialog.imageFilter": "Images", - "settings.nav.project": "Projet", - "settings.nav.editor": "Éditeur", - "settings.nav.content": "Contenu", - "settings.nav.ai": "IA", - "settings.nav.technology": "Technologie", - "settings.nav.publishing": "Publication", - "settings.nav.data": "Données", - "settings.nav.mcp": "MCP", - "settings.nav.style": "Style", - "tags.nav.cloud": "Nuage de tags", - "tags.nav.manage": "Gérer les tags", - "tags.nav.merge": "Fusionner les tags", - "tags.nav.discover": "Découvrir les tags", - "sidebar.chatYesterday": "Hier", - "modal.confirmDelete.title": "Confirmer la suppression", - "modal.confirmDelete.warning": "Cette action est irréversible.", - "modal.confirmDelete.cancel": "Annuler", - "modal.confirmDelete.delete": "Supprimer", - "modal.confirm.title": "Confirmer", - "modal.confirm.cancel": "Annuler", - "modal.confirm.confirm": "Confirmer", - "modal.postInsertLink.title": "Insérer un lien", - "modal.postInsertLink.description": "Sélectionnez un article à lier.", - "modal.postInsertLink.cancel": "Annuler", - "modal.postInsertLink.tabInternal": "Interne", - "modal.postInsertLink.tabExternal": "Externe", - "modal.postInsertLink.searchPlaceholder": "Rechercher les articles...", - "modal.postInsertLink.emptyState": "Commencez à taper pour rechercher des articles ou utilisez des articles similaires", - "modal.postInsertLink.createPost": "Créer l'article", - "modal.postInsertLink.insert": "Insérer", - "modal.postInsertLink.externalUrlPlaceholder": "https://example.com", - "modal.postInsertLink.externalTextPlaceholder": "Texte affiché (optionnel)", - "modal.postInsertLink.urlRequired": "Une URL est requise.", - "modal.postInsertLink.titleRequired": "Saisissez un titre pour créer un article lié.", - "modal.postInsertLink.createFailed": "Impossible de créer l'article lié.", - "modal.postInsertLink.loadFailed": "Impossible de charger l'article sélectionné.", - "modal.insertMedia.title": "Insérer un média", - "modal.insertMedia.description": "Sélectionnez un média à insérer.", - "modal.insertMedia.cancel": "Annuler", - "modal.insertMedia.searchPlaceholder": "Rechercher les médias...", - "modal.insertMedia.loadFailed": "Impossible de charger le média sélectionné.", - "modal.postGallery.title": "Galerie média", - "modal.postGallery.description": "Cliquez sur une image pourvoir en taille réelle.", - "modal.postGallery.close": "Fermer", - "modal.postGallery.backToGrid": "Retour à la grille", - "modal.postGallery.unavailable": "Aperçu indisponible", - "modal.aiSuggestions.title": "Suggestions IA", - "modal.aiSuggestions.applySelected": "Appliquer la sélection", - "modal.languagePicker.title": "Traduire vers", - "sidebar.filter.search": "Rechercher...", - "sidebar.filter.toggle": "Filtres", - "sidebar.filter.clearAll": "Effacer tous les filtres", - "sidebar.filter.status": "Statut", - "sidebar.filter.language": "Langue", - "sidebar.filter.dateRange": "Plage de dates", - "sidebar.filter.from": "Depuis (AAAA-MM-JJ)", - "sidebar.filter.to": "Jusqu'au (AAAA-MM-JJ)", - "editor.insertLink": "Insérer un lien", - "editor.insertMedia": "Insérer un média", - "editor.gallery": "Galerie", - "sidebar.filter.tags": "Tags", - "sidebar.filter.categories": "Catégories", - "sidebar.filter.calendar": "Archives", - "sidebar.filter.noResults": "Aucun résultat", - "editor.title": "Titre", - "editor.titlePlaceholder": "Saisir le titre...", - "editor.slug": "Slug", - "editor.slugPlaceholder": "saisir-slug", - "editor.content": "Contenu", - "editor.contentPlaceholder": "Rédigez votre contenu...", - "editor.excerpt": "Extrait", - "editor.excerptPlaceholder": "Bref résumé...", - "editor.author": "Auteur", - "editor.language": "Langue", - "editor.aiAnalyze": "Analyser avec l'IA", - "editor.detectLanguage": "Détecter la langue", - "editor.quickActions": "Actions rapides", - "editor.modeMarkdown": "Markdown", - "editor.modePreview": "Aperçu", - "editor.suggestTaxonomy": "Suggérer la taxonomie", - "editor.translate": "Traduire", - "editor.templateSlug": "Modèle", - "editor.doNotTranslate": "Ne pas traduire", - "editor.publish": "Publier", - "editor.discard": "Annuler les modifications", - "editor.duplicate": "Dupliquer", - "editor.validate": "Valider", - "editor.run": "Exécuter", - "editor.checkSyntax": "Vérifier la syntaxe", - "editor.kind": "Type", - "editor.enabled": "Activé", - "editor.entrypoint": "Point d'entrée", - "editor.alt": "Texte alternatif", - "editor.altPlaceholder": "Décrivez l'image...", - "editor.caption": "Légende", - "editor.metadata": "Métadonnées", - "editor.tags": "Tags", - "editor.tagsPlaceholder": "Ajouter un tag...", - "editor.categories": "Catégories", - "editor.categoriesPlaceholder": "Ajouter une catégorie...", - "editor.outlinks": "Liens sortants", - "editor.backlinks": "Liens entrants", - "editor.linkedMedia": "Médias liés", - "editor.linkedMediaEmpty": "Aucun média lié pour le moment.", - "editor.linkExistingMedia": "Lier un existant", - "editor.linkToPost": "Lier à un article", - "editor.linkedPosts": "Articles liés", - "editor.linkedPostsEmpty": "Lié à aucun article.", - "editor.postPickerSearch": "Rechercher des articles", - "editor.postPickerSearchPlaceholder": "Rechercher des articles...", - "editor.unlinkMedia": "Dissocier", - "editor.linkedMediaKindImage": "Image", - "editor.linkedMediaKindFile": "Fichier", - "editor.untitled": "Sans titre", - "editor.createdAt": "Créé", - "editor.updatedAt": "Mis à jour", - "editor.publishedAt": "Publié", - "tags.noTags": "Aucun tag", - "tags.cloudSection": "Nuage", - "tags.cloudHelp": "Sélectionnez un ou plusieurs tags pour les modifier, les supprimer ou les fusionner.", - "tags.selectedCount": "{count} sélectionnés", - "tags.clearSelection": "Effacer la sélection", - "tags.createSection": "Créer un tag", - "tags.createPlaceholder": "nouveau-tag", - "tags.createButton": "Créer", - "tags.editTag": "Modifier le tag", - "tags.manageSection": "Gérer", - "tags.name": "Nom", - "tags.color": "Couleur", - "tags.colorPresets": "Couleurs prédéfinies", - "tags.postTemplate": "Modèle d'article", - "tags.noTemplate": "Aucun", - "tags.merge": "Fusionner", - "tags.mergeTarget": "Tag cible", - "tags.mergeSection": "Fusionner", - "tags.mergeHelp": "Sélectionnez au moins deux tags dans le nuage ou la liste pour les fusionner.", - "tags.mergePreview": "Tags à supprimer : {tags}", - "tags.mergeConfirmTitle": "Fusionner les tags", - "tags.mergeConfirmMessage": "Fusionner {count} tags dans {target} ? Cette action est irréversible.", - "tags.deleteUsage": "Ce tag est utilisé dans {count} articles.", - "tags.discoverSection": "Découvrir", - "tags.discoverDescription": "Découvrir les tags à partir des articles actuels et réécrire tags.json pour refléter la base de données.", - "tags.discoverButton": "Découvrir", - "tags.selectTag": "Sélectionnez un tag à modifier", - "template.forceDeleteTitle": "Forcer la suppression du modèle", - "template.forceDeleteMessage": "Ce modèle est utilisé par {posts} articles et {tags} tags. Forcer la suppression ?", - "common.add": "Ajouter", - "common.remove": "Supprimer", - "common.clear": "Effacer", - "common.noResults": "Aucun résultat", - "settings.projectName": "Nom du projet", - "settings.projectDescription": "Description", - "settings.dataPath": "Dossier de données", - "settings.browse": "Parcourir...", - "settings.reset": "Réinitialiser", - "settings.publicUrl": "URL publique", - "settings.mainLanguage": "Langue principale", - "settings.mainLanguageRequired": "requise", - "settings.blogLanguages": "Langues du blog", - "settings.defaultAuthor": "Auteur par défaut", - "settings.maxPostsPerPage": "Articles par page", - "settings.blogmarkCategory": "Catégorie Blogmark", - "settings.defaultMode": "Mode d'édition par défaut", - "settings.diffViewStyle": "Style de diff", - "settings.categoryTitle": "Titre pour {category}", - "settings.categoryPostTemplate": "Modèle d'article", - "settings.categoryListTemplate": "Modèle de liste", - "settings.categoryRenderInLists": "Afficher dans les listes", - "settings.categoryShowTitles": "Afficher les titres", - "settings.addCategory": "Ajouter une catégorie", - "settings.resetCategories": "Rétablir les catégories par défaut", - "settings.wrapLongLines": "Retour à la ligne automatique", - "settings.hideUnchangedRegions": "Masquer les régions inchangées", - "settings.offlineMode": "Mode avion", - "settings.onlineEndpointSection": "Point de terminaison en ligne", - "settings.onlineEndpointUrl": "URL du point de terminaison en ligne", - "settings.onlineEndpointModel": "Modèle du point de terminaison en ligne", - "settings.onlineApiKey": "Clé API en ligne", - "settings.airplaneEndpointSection": "Point de terminaison mode avion", - "settings.airplaneEndpointUrl": "URL du point de terminaison mode avion", - "settings.airplaneEndpointModel": "Modèle du point de terminaison mode avion", - "settings.refreshModels": "Rafraîchir les modèles", - "settings.defaultModel": "Modèle par défaut", - "settings.titleModel": "Modèle de titres", - "settings.imageAnalysisModel": "Modèle d'analyse d'image", - "settings.keychainConfigured": "Stocké dans le trousseau", - "settings.systemPrompt": "Prompt système", - "settings.resetToDefault": "Rétablir les valeurs par défaut", - "settings.luaRuntimeOnly": "Lua est l'unique moteur de script dans l'application Rust.", - "settings.semanticSimilarityEnabled": "Similarité sémantique", - "settings.sshHost": "Hôte SSH", - "settings.sshUsername": "Nom d'utilisateur SSH", - "settings.sshRemotePath": "Chemin distant", - "settings.clear": "Effacer", - "settings.rebuildPosts": "Reconstruire les articles", - "settings.rebuildMedia": "Reconstruire les médias", - "settings.rebuildScripts": "Reconstruire les scripts", - "settings.rebuildTemplates": "Reconstruire les modèles", - "settings.rebuildLinks": "Reconstruire les liens", - "settings.regenerateThumbnails": "Régénérer les miniatures", - "settings.openDataFolder": "Ouvrir le dossier de données", - "settings.contentPlaceholder": "Les paramètres de contenu apparaîtront ici", - "settings.technologyPlaceholder": "Les paramètres technologiques apparaîtront ici", - "settings.mcpPlaceholder": "Les paramètres du serveur MCP apparaîtront ici", - "dashboard.overview": "Aperçu", - "dashboard.posts": "Articles", - "dashboard.media": "Médias", - "dashboard.tags": "Tags", - "dashboard.categories": "Catégories", - "dashboard.images": "Images", - "dashboard.drafts": "Brouillons", - "dashboard.published": "Publiés", - "dashboard.archived": "Archivés", - "dashboard.statCards": "Instantané", - "dashboard.timeline": "Chronologie", - "dashboard.noTimelineData": "Aucune donnée de chronologie", - "dashboard.tagCloud": "Nuage de tags", - "dashboard.noTags": "Aucun tag pour le moment", - "dashboard.categoryCloud": "Nuage de catégories", - "dashboard.recentPosts": "Articles récents", - "dashboard.noRecentPosts": "Aucun article récent", - "dashboard.and": "et", - "dashboard.pin": "Épingler", - "common.tabNotImplemented": "Cette section sera mise en œuvre lors d’une étape ultérieure.", - "editor.noPreviewAvailable": "Aucun aperçu disponible" -} diff --git a/locales/ui/it.ftl b/locales/ui/it.ftl new file mode 100644 index 0000000..db7ad58 --- /dev/null +++ b/locales/ui/it.ftl @@ -0,0 +1,385 @@ +menu-group-file = Archivio +menu-group-edit = Modifica +menu-group-view = Vista +menu-group-blog = Blog +menu-group-help = Aiuto +menu-item-newPost = Nuovo post +menu-item-importMedia = Importa media... +menu-item-save = Salva +menu-item-openInBrowser = Apri nel browser +menu-item-openDataFolder = Apri cartella dati +menu-item-find = Trova +menu-item-replace = Sostituisci +menu-item-editPreferences = Modifica preferenze +menu-item-viewPosts = Post +menu-item-viewMedia = Contenuti media +menu-item-toggleSidebar = Attiva/disattiva barra laterale +menu-item-togglePanel = Attiva/disattiva pannello +menu-item-publishSelected = Pubblica selezionato +menu-item-previewPost = Anteprima post +menu-item-rebuildDatabase = Ricostruisci database dai file +menu-item-reindexText = Reindicizza testo di ricerca +menu-item-metadataDiff = Strumento diff metadati +menu-item-editMenu = Modifica menu blog +menu-item-generateSitemap = Renderizza sito +menu-item-regenerateCalendar = Rigenera calendario +menu-item-validateSite = Valida sito +menu-item-validateTranslations = Valida traduzioni +menu-item-fillMissingTranslations = Completa le traduzioni mancanti +menu-item-uploadSite = Carica sito +menu-item-about = Informazioni su Blogging Desktop Server +menu-item-openDocumentation = Apri documentazione +menu-item-viewOnGitHub = Visualizza su GitHub +menu-item-reportIssue = Segnala problema +activity-posts = Post +activity-pages = Pagine +activity-media = Contenuti media +activity-scripts = Script +activity-tags = Tag +activity-templates = Modelli +activity-aiAssistant = Assistente IA +activity-import = Importa +activity-sourceControl = Controllo sorgente +common-save = Salva +common-open = Apri +common-cancel = Annulla +common-settings = Impostazioni +common-tasks = Attività +common-running = in esecuzione +common-pending = in attesa +tasks-backgroundTasks = Attività in background +tasks-clearCompleted = Cancella completate +tasks-noActive = Nessuna attività attiva +tasks-cancelTask = Annulla attività +tasks-triggerTitle = { $running } in esecuzione, { $pending } in attesa +app-taskCompleted = Attività completata: { $message } +app-taskFailed = Attività non riuscita: { $message } +app-databaseRebuildFailed = Ricostruzione database non riuscita +app-textReindexFailed = Reindicizzazione testo non riuscita +panel-output = Uscita +panel-postLinks = Link ai post +panel-gitLog = Cronologia Git +panel-postLinksPlaceholder = Nessun link ai post da visualizzare +panel-gitLogPlaceholder = Nessuna cronologia Git da visualizzare +panel-closeTitle = Chiudi pannello +panel-noRecentTasks = Nessuna attività recente +panel-noOutput = Nessun output +statusBar-posts = { $count } articoli +statusBar-media = { $count } media +statusBar-ui = UI +statusBar-uiLanguage = Lingua interfaccia +statusBar-offlineMode = Modalità aereo +statusBar-offlineModeActive = Modalità aereo (attiva) +projectSelector-switchProject = Cambia progetto +projectSelector-projectsHeader = Progetti +projectSelector-newProject = Nuovo progetto +projectSelector-createProject = Crea progetto +projectSelector-projectName = Nome progetto +projectSelector-projectNamePlaceholder = Il mio blog +projectSelector-chooseFolder = Scegli cartella... +projectSelector-useDefaultLocation = Usa percorso predefinito +projectSelector-deleteProject = Elimina progetto +projectSelector-toast-switched = Passato a { $name } +projectSelector-toast-switchFailed = Cambio progetto non riuscito +projectSelector-toast-created = Progetto "{ $name }" creato +projectSelector-toast-createFailed = Creazione progetto non riuscita +projectSelector-toast-deleteFailed = Eliminazione progetto non riuscita +tabBar-closeHint = Chiudi +tabBar-loading = Caricamento... +tabBar-unknown = Sconosciuto +tabBar-style = Stile +tabBar-menuEditor = Editor menu +tabBar-metadataDiff = Diff metadati +tabBar-siteValidation = Validazione sito +tabBar-translationValidation = Validazione traduzioni +siteValidation-run = Esegui validazione +siteValidation-apply = Applica validazione +siteValidation-applying = Applicazione in corso... +siteValidation-idle = Esegui la validazione del sito per confrontare i file generati con l'output previsto. +siteValidation-running = Validazione in corso... +siteValidation-clean = Non sono stati trovati file generati mancanti, aggiuntivi o obsoleti. +siteValidation-error = Validazione non riuscita +siteValidation-missing = File mancanti +siteValidation-extra = File aggiuntivi +siteValidation-stale = File obsoleti +tabBar-documentation = Documentazione +tabBar-apiDocumentation = Documentazione API +tabBar-findDuplicates = Trova duplicati +tabBar-tags = Tag +tabBar-preview = Anteprima +tabBar-modified = Modificato +sidebar-noPostsYet = Nessun post +sidebar-noPagesYet = Nessuna pagina +sidebar-noMediaYet = Nessun media +sidebar-noScriptsYet = Nessuno script +sidebar-noTemplatesYet = Nessun modello +sidebar-chatPlaceholder = L'assistente IA apparirà qui +sidebar-importPlaceholder = Importa contenuti da fonti esterne +sidebar-gitPlaceholder = Integrazione del controllo sorgente +sidebar-loading = Caricamento... +sidebar-settingsHeader = Impostazioni +sidebar-tagsHeader = Tag +sidebar-drafts = Bozze +sidebar-published = Pubblicati +sidebar-archived = Archiviati +sidebar-loadMore = Carica di più… +language-en = Inglese +language-de = Tedesco +language-fr = Francese +language-it = Italiano +language-es = Spagnolo +welcome-title = Benvenuto in bDS +welcome-subtitle = Apri un progetto o crea un nuovo post per iniziare. +post-untitled = Senza titolo +post-createFailed = Impossibile creare il post: { $error } +engine-rebuildStarted = Ricostruzione del database dai file... +engine-rebuildComplete = Database ricostruito: { $posts } post, { $media } media, { $templates } modelli, { $scripts } script +engine-rebuildFailed = Ricostruzione del database non riuscita: { $error } +engine-reindexStarted = Reindicizzazione del testo di ricerca... +engine-reindexComplete = Testo di ricerca reindicizzato: { $posts } post, { $media } media +engine-reindexFailed = Reindicizzazione del testo di ricerca non riuscita: { $error } +engine-calendarStarted = Rigenerazione del calendario... +engine-calendarComplete = Calendario rigenerato +engine-calendarFailed = Rigenerazione del calendario non riuscita: { $error } +engine-calendarNoProject = Nessun progetto attivo +engine-validateTranslationsStarted = Validazione delle traduzioni... +engine-validateMediaStarted = Validazione dei media... +engine-validateTranslationsComplete = Validazione traduzioni: { $dbIssues } problemi nel database, { $fsIssues } problemi nel filesystem +engine-validateTranslationsFailed = Validazione delle traduzioni non riuscita: { $error } +engine-fillMissingTranslationsOffline = Impossibile completare le traduzioni: l'IA non è disponibile in modalità aereo +engine-fillMissingTranslationsNoAi = Impossibile completare le traduzioni: l'IA non è ancora disponibile +engine-uploadStarted = Caricamento del sito... +engine-uploadMissingCredentials = Credenziali di pubblicazione incomplete. Configurale nelle impostazioni del progetto. +engine-uploadOffline = Impossibile caricare: la modalità aereo è attiva +engine-generateSiteStarted = Generazione del sito... +engine-generateSiteNoProject = Nessun progetto attivo +engine-previewDataDirUnavailable = Directory dati del progetto non disponibile +engine-previewPortInUse = La porta del server di anteprima è già in uso +dialog-selectFolder = Seleziona cartella +dialog-importMedia = Importa media +dialog-imageFilter = Immagini +settings-nav-project = Progetto +settings-nav-editor = Editor +settings-nav-content = Contenuto +settings-nav-ai = IA +settings-nav-technology = Tecnologia +settings-nav-publishing = Pubblicazione +settings-nav-data = Dati +settings-nav-mcp = MCP +settings-nav-style = Stile +tags-nav-cloud = Nuvola di tag +tags-nav-manage = Gestisci tag +tags-nav-merge = Unisci tag +tags-nav-discover = Scopri tag +sidebar-chatYesterday = Ieri +modal-confirmDelete-title = Conferma eliminazione +modal-confirmDelete-warning = Questa azione non può essere annullata. +modal-confirmDelete-cancel = Annulla +modal-confirmDelete-delete = Elimina +modal-confirm-title = Conferma +modal-confirm-cancel = Annulla +modal-confirm-confirm = Conferma +modal-postInsertLink-title = Inserisci link +modal-postInsertLink-description = Seleziona un post a cui collegarti. +modal-postInsertLink-cancel = Annulla +modal-postInsertLink-tabInternal = Interno +modal-postInsertLink-tabExternal = Esterno +modal-postInsertLink-searchPlaceholder = Cerca post... +modal-postInsertLink-emptyState = Digita per cercare post o usa post correlati +modal-postInsertLink-createPost = Crea post +modal-postInsertLink-insert = Inserisci +modal-postInsertLink-externalUrlPlaceholder = https://example.com +modal-postInsertLink-externalTextPlaceholder = Testo visualizzato (opzionale) +modal-postInsertLink-urlRequired = È richiesto un URL. +modal-postInsertLink-titleRequired = Inserisci un titolo per creare un post collegato. +modal-postInsertLink-createFailed = Impossibile creare il post collegato. +modal-postInsertLink-loadFailed = Impossibile caricare il post selezionato. +modal-insertMedia-title = Inserisci media +modal-insertMedia-description = Seleziona un elemento media da inserire. +modal-insertMedia-cancel = Annulla +modal-insertMedia-searchPlaceholder = Cerca media... +modal-insertMedia-loadFailed = Impossibile caricare l'elemento media selezionato. +modal-postGallery-title = Galleria media +modal-postGallery-description = Clicca un'immagine per vederla a grandezza piena. +modal-postGallery-close = Chiudi +modal-postGallery-backToGrid = Torna alla griglia +modal-postGallery-unavailable = Anteprima non disponibile +modal-aiSuggestions-title = Suggerimenti IA +modal-aiSuggestions-applySelected = Applica selezione +modal-languagePicker-title = Traduci in +sidebar-filter-search = Cerca... +sidebar-filter-toggle = Filtri +sidebar-filter-clearAll = Cancella tutti i filtri +sidebar-filter-status = Stato +sidebar-filter-language = Lingua +sidebar-filter-dateRange = Intervallo date +sidebar-filter-from = Da (AAAA-MM-GG) +sidebar-filter-to = A (AAAA-MM-GG) +editor-insertLink = Inserisci link +editor-insertMedia = Inserisci media +editor-gallery = Galleria +sidebar-filter-tags = Tag +sidebar-filter-categories = Categorie +sidebar-filter-calendar = Archivio +sidebar-filter-noResults = Nessun risultato +editor-title = Titolo +editor-titlePlaceholder = Inserisci titolo... +editor-slug = Slug +editor-slugPlaceholder = inserisci-slug +editor-content = Contenuto +editor-contentPlaceholder = Scrivi il tuo contenuto... +editor-excerpt = Estratto +editor-excerptPlaceholder = Breve riassunto... +editor-author = Autore +editor-language = Lingua +editor-aiAnalyze = Analizza con IA +editor-detectLanguage = Rileva lingua +editor-quickActions = Azioni rapide +editor-modeMarkdown = Markdown +editor-modePreview = Anteprima +editor-suggestTaxonomy = Suggerisci tassonomia +editor-translate = Traduci +editor-templateSlug = Modello +editor-doNotTranslate = Non tradurre +editor-publish = Pubblica +editor-discard = Scarta +editor-duplicate = Duplica +editor-validate = Valida +editor-run = Esegui +editor-checkSyntax = Controlla sintassi +editor-kind = Tipo +editor-enabled = Abilitato +editor-entrypoint = Punto di ingresso +editor-alt = Testo alternativo +editor-altPlaceholder = Descrivi l'immagine... +editor-caption = Didascalia +editor-metadata = Metadati +editor-tags = Tag +editor-tagsPlaceholder = Aggiungi tag... +editor-categories = Categorie +editor-categoriesPlaceholder = Aggiungi categoria... +editor-outlinks = Link in uscita +editor-backlinks = Link in entrata +editor-linkedMedia = Media collegati +editor-linkedMediaEmpty = Nessun media collegato. +editor-linkExistingMedia = Collega esistente +editor-linkToPost = Collega a articolo +editor-linkedPosts = Articoli collegati +editor-linkedPostsEmpty = Non collegato ad alcun articolo. +editor-postPickerSearch = Cerca articoli +editor-postPickerSearchPlaceholder = Cerca articoli... +editor-unlinkMedia = Scollega +editor-linkedMediaKindImage = Immagine +editor-linkedMediaKindFile = File +editor-untitled = Senza titolo +editor-createdAt = Creato +editor-updatedAt = Aggiornato +editor-publishedAt = Pubblicato +tags-noTags = Nessun tag +tags-cloudSection = Nuvola +tags-cloudHelp = Seleziona uno o più tag per modificarli, eliminarli o unirli. +tags-selectedCount = { $count } selezionati +tags-clearSelection = Cancella selezione +tags-createSection = Crea tag +tags-createPlaceholder = nuovo-tag +tags-createButton = Crea +tags-editTag = Modifica tag +tags-manageSection = Gestisci +tags-name = Nome +tags-color = Colore +tags-colorPresets = Colori predefiniti +tags-postTemplate = Modello articolo +tags-noTemplate = Nessuno +tags-merge = Unisci +tags-mergeTarget = Tag destinazione +tags-mergeSection = Unisci +tags-mergeHelp = Seleziona almeno due tag dalla nuvola o dall'elenco per unirli. +tags-mergePreview = Tag da eliminare: { $tags } +tags-mergeConfirmTitle = Unisci tag +tags-mergeConfirmMessage = Unire { $count } tag in { $target }? Questa azione non può essere annullata. +tags-deleteUsage = Questo tag è usato in { $count } post. +tags-discoverSection = Scopri +tags-discoverDescription = Scopri i tag dai post correnti e riscrivi tags.json per riflettere il database. +tags-discoverButton = Scopri +tags-selectTag = Seleziona un tag da modificare +template-forceDeleteTitle = Forza eliminazione template +template-forceDeleteMessage = Questo template è usato da { $posts } post e { $tags } tag. Forzare l'eliminazione? +common-add = Aggiungi +common-remove = Rimuovi +common-clear = Cancella +common-noResults = Nessun risultato +settings-projectName = Nome progetto +settings-projectDescription = Descrizione +settings-dataPath = Cartella dati +settings-browse = Sfoglia... +settings-reset = Ripristina +settings-publicUrl = URL pubblica +settings-mainLanguage = Lingua principale +settings-mainLanguageRequired = obbligatoria +settings-blogLanguages = Lingue del blog +settings-defaultAuthor = Autore predefinito +settings-maxPostsPerPage = Articoli per pagina +settings-blogmarkCategory = Categoria Blogmark +settings-defaultMode = Modalità editor predefinita +settings-diffViewStyle = Stile diff +settings-categoryTitle = Titolo per { $category } +settings-categoryPostTemplate = Modello articolo +settings-categoryListTemplate = Modello elenco +settings-categoryRenderInLists = Mostra negli elenchi +settings-categoryShowTitles = Mostra titoli +settings-addCategory = Aggiungi categoria +settings-resetCategories = Ripristina categorie predefinite +settings-wrapLongLines = A capo automatico +settings-hideUnchangedRegions = Nascondi regioni invariate +settings-offlineMode = Modalità aereo +settings-onlineEndpointSection = Endpoint online +settings-onlineEndpointUrl = URL endpoint online +settings-onlineEndpointModel = Modello endpoint online +settings-onlineApiKey = Chiave API online +settings-airplaneEndpointSection = Endpoint modalità aereo +settings-airplaneEndpointUrl = URL endpoint modalità aereo +settings-airplaneEndpointModel = Modello endpoint modalità aereo +settings-refreshModels = Aggiorna modelli +settings-defaultModel = Modello predefinito +settings-titleModel = Modello titoli +settings-imageAnalysisModel = Modello analisi immagini +settings-keychainConfigured = Salvato nel portachiavi +settings-systemPrompt = Prompt di sistema +settings-resetToDefault = Ripristina predefiniti +settings-luaRuntimeOnly = Lua è l'unico runtime di scripting nell'app Rust. +settings-semanticSimilarityEnabled = Similarità semantica +settings-sshHost = Host SSH +settings-sshUsername = Nome utente SSH +settings-sshRemotePath = Percorso remoto +settings-clear = Cancella +settings-rebuildPosts = Ricostruisci articoli +settings-rebuildMedia = Ricostruisci media +settings-rebuildScripts = Ricostruisci script +settings-rebuildTemplates = Ricostruisci modelli +settings-rebuildLinks = Ricostruisci link +settings-regenerateThumbnails = Rigenera miniature +settings-openDataFolder = Apri cartella dati +settings-contentPlaceholder = Le impostazioni del contenuto appariranno qui +settings-technologyPlaceholder = Le impostazioni tecnologiche appariranno qui +settings-mcpPlaceholder = Le impostazioni del server MCP appariranno qui +dashboard-overview = Panoramica +dashboard-posts = Articoli +dashboard-media = Media +dashboard-tags = Tag +dashboard-categories = Categorie +dashboard-images = Immagini +dashboard-drafts = Bozze +dashboard-published = Pubblicati +dashboard-archived = Archiviati +dashboard-statCards = Riepilogo +dashboard-timeline = Cronologia +dashboard-noTimelineData = Nessun dato cronologico disponibile +dashboard-tagCloud = Nuvola di tag +dashboard-noTags = Nessun tag per ora +dashboard-categoryCloud = Nuvola di categorie +dashboard-recentPosts = Post recenti +dashboard-noRecentPosts = Nessun post recente +dashboard-and = e +dashboard-pin = Fissa +common-tabNotImplemented = Questa sezione verrà implementata in una fase successiva. +editor-noPreviewAvailable = Nessuna anteprima disponibile diff --git a/locales/ui/it.json b/locales/ui/it.json deleted file mode 100644 index 52466e8..0000000 --- a/locales/ui/it.json +++ /dev/null @@ -1,387 +0,0 @@ -{ - "menu.group.file": "Archivio", - "menu.group.edit": "Modifica", - "menu.group.view": "Vista", - "menu.group.blog": "Blog", - "menu.group.help": "Aiuto", - "menu.item.newPost": "Nuovo post", - "menu.item.importMedia": "Importa media...", - "menu.item.save": "Salva", - "menu.item.openInBrowser": "Apri nel browser", - "menu.item.openDataFolder": "Apri cartella dati", - "menu.item.find": "Trova", - "menu.item.replace": "Sostituisci", - "menu.item.editPreferences": "Modifica preferenze", - "menu.item.viewPosts": "Post", - "menu.item.viewMedia": "Contenuti media", - "menu.item.toggleSidebar": "Attiva/disattiva barra laterale", - "menu.item.togglePanel": "Attiva/disattiva pannello", - "menu.item.publishSelected": "Pubblica selezionato", - "menu.item.previewPost": "Anteprima post", - "menu.item.rebuildDatabase": "Ricostruisci database dai file", - "menu.item.reindexText": "Reindicizza testo di ricerca", - "menu.item.metadataDiff": "Strumento diff metadati", - "menu.item.editMenu": "Modifica menu blog", - "menu.item.generateSitemap": "Renderizza sito", - "menu.item.regenerateCalendar": "Rigenera calendario", - "menu.item.validateSite": "Valida sito", - "menu.item.validateTranslations": "Valida traduzioni", - "menu.item.fillMissingTranslations": "Completa le traduzioni mancanti", - "menu.item.uploadSite": "Carica sito", - "menu.item.about": "Informazioni su Blogging Desktop Server", - "menu.item.openDocumentation": "Apri documentazione", - "menu.item.viewOnGitHub": "Visualizza su GitHub", - "menu.item.reportIssue": "Segnala problema", - "activity.posts": "Post", - "activity.pages": "Pagine", - "activity.media": "Contenuti media", - "activity.scripts": "Script", - "activity.tags": "Tag", - "activity.templates": "Modelli", - "activity.aiAssistant": "Assistente IA", - "activity.import": "Importa", - "activity.sourceControl": "Controllo sorgente", - "common.save": "Salva", - "common.open": "Apri", - "common.cancel": "Annulla", - "common.settings": "Impostazioni", - "common.tasks": "Attività", - "common.running": "in esecuzione", - "common.pending": "in attesa", - "tasks.backgroundTasks": "Attività in background", - "tasks.clearCompleted": "Cancella completate", - "tasks.noActive": "Nessuna attività attiva", - "tasks.cancelTask": "Annulla attività", - "tasks.triggerTitle": "{running} in esecuzione, {pending} in attesa", - "app.taskCompleted": "Attività completata: {message}", - "app.taskFailed": "Attività non riuscita: {message}", - "app.databaseRebuildFailed": "Ricostruzione database non riuscita", - "app.textReindexFailed": "Reindicizzazione testo non riuscita", - "panel.output": "Uscita", - "panel.postLinks": "Link ai post", - "panel.gitLog": "Cronologia Git", - "panel.postLinksPlaceholder": "Nessun link ai post da visualizzare", - "panel.gitLogPlaceholder": "Nessuna cronologia Git da visualizzare", - "panel.closeTitle": "Chiudi pannello", - "panel.noRecentTasks": "Nessuna attività recente", - "panel.noOutput": "Nessun output", - "statusBar.posts": "{count} articoli", - "statusBar.media": "{count} media", - "statusBar.ui": "UI", - "statusBar.uiLanguage": "Lingua interfaccia", - "statusBar.offlineMode": "Modalità aereo", - "statusBar.offlineModeActive": "Modalità aereo (attiva)", - "projectSelector.switchProject": "Cambia progetto", - "projectSelector.projectsHeader": "Progetti", - "projectSelector.newProject": "Nuovo progetto", - "projectSelector.createProject": "Crea progetto", - "projectSelector.projectName": "Nome progetto", - "projectSelector.projectNamePlaceholder": "Il mio blog", - "projectSelector.chooseFolder": "Scegli cartella...", - "projectSelector.useDefaultLocation": "Usa percorso predefinito", - "projectSelector.deleteProject": "Elimina progetto", - "projectSelector.toast.switched": "Passato a {name}", - "projectSelector.toast.switchFailed": "Cambio progetto non riuscito", - "projectSelector.toast.created": "Progetto \"{name}\" creato", - "projectSelector.toast.createFailed": "Creazione progetto non riuscita", - "projectSelector.toast.deleteFailed": "Eliminazione progetto non riuscita", - "tabBar.closeHint": "Chiudi", - "tabBar.loading": "Caricamento...", - "tabBar.unknown": "Sconosciuto", - "tabBar.style": "Stile", - "tabBar.menuEditor": "Editor menu", - "tabBar.metadataDiff": "Diff metadati", - "tabBar.siteValidation": "Validazione sito", - "tabBar.translationValidation": "Validazione traduzioni", - "siteValidation.run": "Esegui validazione", - "siteValidation.apply": "Applica validazione", - "siteValidation.applying": "Applicazione in corso...", - "siteValidation.idle": "Esegui la validazione del sito per confrontare i file generati con l'output previsto.", - "siteValidation.running": "Validazione in corso...", - "siteValidation.clean": "Non sono stati trovati file generati mancanti, aggiuntivi o obsoleti.", - "siteValidation.error": "Validazione non riuscita", - "siteValidation.missing": "File mancanti", - "siteValidation.extra": "File aggiuntivi", - "siteValidation.stale": "File obsoleti", - "tabBar.documentation": "Documentazione", - "tabBar.apiDocumentation": "Documentazione API", - "tabBar.findDuplicates": "Trova duplicati", - "tabBar.tags": "Tag", - "tabBar.preview": "Anteprima", - "tabBar.modified": "Modificato", - "sidebar.noPostsYet": "Nessun post", - "sidebar.noPagesYet": "Nessuna pagina", - "sidebar.noMediaYet": "Nessun media", - "sidebar.noScriptsYet": "Nessuno script", - "sidebar.noTemplatesYet": "Nessun modello", - "sidebar.chatPlaceholder": "L'assistente IA apparirà qui", - "sidebar.importPlaceholder": "Importa contenuti da fonti esterne", - "sidebar.gitPlaceholder": "Integrazione del controllo sorgente", - "sidebar.loading": "Caricamento...", - "sidebar.settingsHeader": "Impostazioni", - "sidebar.tagsHeader": "Tag", - "sidebar.drafts": "Bozze", - "sidebar.published": "Pubblicati", - "sidebar.archived": "Archiviati", - "sidebar.loadMore": "Carica di più…", - "language.en": "Inglese", - "language.de": "Tedesco", - "language.fr": "Francese", - "language.it": "Italiano", - "language.es": "Spagnolo", - "welcome.title": "Benvenuto in bDS", - "welcome.subtitle": "Apri un progetto o crea un nuovo post per iniziare.", - "post.untitled": "Senza titolo", - "post.createFailed": "Impossibile creare il post: {error}", - "engine.rebuildStarted": "Ricostruzione del database dai file...", - "engine.rebuildComplete": "Database ricostruito: {posts} post, {media} media, {templates} modelli, {scripts} script", - "engine.rebuildFailed": "Ricostruzione del database non riuscita: {error}", - "engine.reindexStarted": "Reindicizzazione del testo di ricerca...", - "engine.reindexComplete": "Testo di ricerca reindicizzato: {posts} post, {media} media", - "engine.reindexFailed": "Reindicizzazione del testo di ricerca non riuscita: {error}", - "engine.calendarStarted": "Rigenerazione del calendario...", - "engine.calendarComplete": "Calendario rigenerato", - "engine.calendarFailed": "Rigenerazione del calendario non riuscita: {error}", - "engine.calendarNoProject": "Nessun progetto attivo", - "engine.validateTranslationsStarted": "Validazione delle traduzioni...", - "engine.validateMediaStarted": "Validazione dei media...", - "engine.validateTranslationsComplete": "Validazione traduzioni: {dbIssues} problemi nel database, {fsIssues} problemi nel filesystem", - "engine.validateTranslationsFailed": "Validazione delle traduzioni non riuscita: {error}", - "engine.fillMissingTranslationsOffline": "Impossibile completare le traduzioni: l'IA non è disponibile in modalità aereo", - "engine.fillMissingTranslationsNoAi": "Impossibile completare le traduzioni: l'IA non è ancora disponibile", - "engine.uploadStarted": "Caricamento del sito...", - "engine.uploadMissingCredentials": "Credenziali di pubblicazione incomplete. Configurale nelle impostazioni del progetto.", - "engine.uploadOffline": "Impossibile caricare: la modalità aereo è attiva", - "engine.generateSiteStarted": "Generazione del sito...", - "engine.generateSiteNoProject": "Nessun progetto attivo", - "engine.previewDataDirUnavailable": "Directory dati del progetto non disponibile", - "engine.previewPortInUse": "La porta del server di anteprima è già in uso", - "dialog.selectFolder": "Seleziona cartella", - "dialog.importMedia": "Importa media", - "dialog.imageFilter": "Immagini", - "settings.nav.project": "Progetto", - "settings.nav.editor": "Editor", - "settings.nav.content": "Contenuto", - "settings.nav.ai": "IA", - "settings.nav.technology": "Tecnologia", - "settings.nav.publishing": "Pubblicazione", - "settings.nav.data": "Dati", - "settings.nav.mcp": "MCP", - "settings.nav.style": "Stile", - "tags.nav.cloud": "Nuvola di tag", - "tags.nav.manage": "Gestisci tag", - "tags.nav.merge": "Unisci tag", - "tags.nav.discover": "Scopri tag", - "sidebar.chatYesterday": "Ieri", - "modal.confirmDelete.title": "Conferma eliminazione", - "modal.confirmDelete.warning": "Questa azione non può essere annullata.", - "modal.confirmDelete.cancel": "Annulla", - "modal.confirmDelete.delete": "Elimina", - "modal.confirm.title": "Conferma", - "modal.confirm.cancel": "Annulla", - "modal.confirm.confirm": "Conferma", - "modal.postInsertLink.title": "Inserisci link", - "modal.postInsertLink.description": "Seleziona un post a cui collegarti.", - "modal.postInsertLink.cancel": "Annulla", - "modal.postInsertLink.tabInternal": "Interno", - "modal.postInsertLink.tabExternal": "Esterno", - "modal.postInsertLink.searchPlaceholder": "Cerca post...", - "modal.postInsertLink.emptyState": "Digita per cercare post o usa post correlati", - "modal.postInsertLink.createPost": "Crea post", - "modal.postInsertLink.insert": "Inserisci", - "modal.postInsertLink.externalUrlPlaceholder": "https://example.com", - "modal.postInsertLink.externalTextPlaceholder": "Testo visualizzato (opzionale)", - "modal.postInsertLink.urlRequired": "È richiesto un URL.", - "modal.postInsertLink.titleRequired": "Inserisci un titolo per creare un post collegato.", - "modal.postInsertLink.createFailed": "Impossibile creare il post collegato.", - "modal.postInsertLink.loadFailed": "Impossibile caricare il post selezionato.", - "modal.insertMedia.title": "Inserisci media", - "modal.insertMedia.description": "Seleziona un elemento media da inserire.", - "modal.insertMedia.cancel": "Annulla", - "modal.insertMedia.searchPlaceholder": "Cerca media...", - "modal.insertMedia.loadFailed": "Impossibile caricare l'elemento media selezionato.", - "modal.postGallery.title": "Galleria media", - "modal.postGallery.description": "Clicca un'immagine per vederla a grandezza piena.", - "modal.postGallery.close": "Chiudi", - "modal.postGallery.backToGrid": "Torna alla griglia", - "modal.postGallery.unavailable": "Anteprima non disponibile", - "modal.aiSuggestions.title": "Suggerimenti IA", - "modal.aiSuggestions.applySelected": "Applica selezione", - "modal.languagePicker.title": "Traduci in", - "sidebar.filter.search": "Cerca...", - "sidebar.filter.toggle": "Filtri", - "sidebar.filter.clearAll": "Cancella tutti i filtri", - "sidebar.filter.status": "Stato", - "sidebar.filter.language": "Lingua", - "sidebar.filter.dateRange": "Intervallo date", - "sidebar.filter.from": "Da (AAAA-MM-GG)", - "sidebar.filter.to": "A (AAAA-MM-GG)", - "editor.insertLink": "Inserisci link", - "editor.insertMedia": "Inserisci media", - "editor.gallery": "Galleria", - "sidebar.filter.tags": "Tag", - "sidebar.filter.categories": "Categorie", - "sidebar.filter.calendar": "Archivio", - "sidebar.filter.noResults": "Nessun risultato", - "editor.title": "Titolo", - "editor.titlePlaceholder": "Inserisci titolo...", - "editor.slug": "Slug", - "editor.slugPlaceholder": "inserisci-slug", - "editor.content": "Contenuto", - "editor.contentPlaceholder": "Scrivi il tuo contenuto...", - "editor.excerpt": "Estratto", - "editor.excerptPlaceholder": "Breve riassunto...", - "editor.author": "Autore", - "editor.language": "Lingua", - "editor.aiAnalyze": "Analizza con IA", - "editor.detectLanguage": "Rileva lingua", - "editor.quickActions": "Azioni rapide", - "editor.modeMarkdown": "Markdown", - "editor.modePreview": "Anteprima", - "editor.suggestTaxonomy": "Suggerisci tassonomia", - "editor.translate": "Traduci", - "editor.templateSlug": "Modello", - "editor.doNotTranslate": "Non tradurre", - "editor.publish": "Pubblica", - "editor.discard": "Scarta", - "editor.duplicate": "Duplica", - "editor.validate": "Valida", - "editor.run": "Esegui", - "editor.checkSyntax": "Controlla sintassi", - "editor.kind": "Tipo", - "editor.enabled": "Abilitato", - "editor.entrypoint": "Punto di ingresso", - "editor.alt": "Testo alternativo", - "editor.altPlaceholder": "Descrivi l'immagine...", - "editor.caption": "Didascalia", - "editor.metadata": "Metadati", - "editor.tags": "Tag", - "editor.tagsPlaceholder": "Aggiungi tag...", - "editor.categories": "Categorie", - "editor.categoriesPlaceholder": "Aggiungi categoria...", - "editor.outlinks": "Link in uscita", - "editor.backlinks": "Link in entrata", - "editor.linkedMedia": "Media collegati", - "editor.linkedMediaEmpty": "Nessun media collegato.", - "editor.linkExistingMedia": "Collega esistente", - "editor.linkToPost": "Collega a articolo", - "editor.linkedPosts": "Articoli collegati", - "editor.linkedPostsEmpty": "Non collegato ad alcun articolo.", - "editor.postPickerSearch": "Cerca articoli", - "editor.postPickerSearchPlaceholder": "Cerca articoli...", - "editor.unlinkMedia": "Scollega", - "editor.linkedMediaKindImage": "Immagine", - "editor.linkedMediaKindFile": "File", - "editor.untitled": "Senza titolo", - "editor.createdAt": "Creato", - "editor.updatedAt": "Aggiornato", - "editor.publishedAt": "Pubblicato", - "tags.noTags": "Nessun tag", - "tags.cloudSection": "Nuvola", - "tags.cloudHelp": "Seleziona uno o più tag per modificarli, eliminarli o unirli.", - "tags.selectedCount": "{count} selezionati", - "tags.clearSelection": "Cancella selezione", - "tags.createSection": "Crea tag", - "tags.createPlaceholder": "nuovo-tag", - "tags.createButton": "Crea", - "tags.editTag": "Modifica tag", - "tags.manageSection": "Gestisci", - "tags.name": "Nome", - "tags.color": "Colore", - "tags.colorPresets": "Colori predefiniti", - "tags.postTemplate": "Modello articolo", - "tags.noTemplate": "Nessuno", - "tags.merge": "Unisci", - "tags.mergeTarget": "Tag destinazione", - "tags.mergeSection": "Unisci", - "tags.mergeHelp": "Seleziona almeno due tag dalla nuvola o dall'elenco per unirli.", - "tags.mergePreview": "Tag da eliminare: {tags}", - "tags.mergeConfirmTitle": "Unisci tag", - "tags.mergeConfirmMessage": "Unire {count} tag in {target}? Questa azione non può essere annullata.", - "tags.deleteUsage": "Questo tag è usato in {count} post.", - "tags.discoverSection": "Scopri", - "tags.discoverDescription": "Scopri i tag dai post correnti e riscrivi tags.json per riflettere il database.", - "tags.discoverButton": "Scopri", - "tags.selectTag": "Seleziona un tag da modificare", - "template.forceDeleteTitle": "Forza eliminazione template", - "template.forceDeleteMessage": "Questo template è usato da {posts} post e {tags} tag. Forzare l'eliminazione?", - "common.add": "Aggiungi", - "common.remove": "Rimuovi", - "common.clear": "Cancella", - "common.noResults": "Nessun risultato", - "settings.projectName": "Nome progetto", - "settings.projectDescription": "Descrizione", - "settings.dataPath": "Cartella dati", - "settings.browse": "Sfoglia...", - "settings.reset": "Ripristina", - "settings.publicUrl": "URL pubblica", - "settings.mainLanguage": "Lingua principale", - "settings.mainLanguageRequired": "obbligatoria", - "settings.blogLanguages": "Lingue del blog", - "settings.defaultAuthor": "Autore predefinito", - "settings.maxPostsPerPage": "Articoli per pagina", - "settings.blogmarkCategory": "Categoria Blogmark", - "settings.defaultMode": "Modalità editor predefinita", - "settings.diffViewStyle": "Stile diff", - "settings.categoryTitle": "Titolo per {category}", - "settings.categoryPostTemplate": "Modello articolo", - "settings.categoryListTemplate": "Modello elenco", - "settings.categoryRenderInLists": "Mostra negli elenchi", - "settings.categoryShowTitles": "Mostra titoli", - "settings.addCategory": "Aggiungi categoria", - "settings.resetCategories": "Ripristina categorie predefinite", - "settings.wrapLongLines": "A capo automatico", - "settings.hideUnchangedRegions": "Nascondi regioni invariate", - "settings.offlineMode": "Modalità aereo", - "settings.onlineEndpointSection": "Endpoint online", - "settings.onlineEndpointUrl": "URL endpoint online", - "settings.onlineEndpointModel": "Modello endpoint online", - "settings.onlineApiKey": "Chiave API online", - "settings.airplaneEndpointSection": "Endpoint modalità aereo", - "settings.airplaneEndpointUrl": "URL endpoint modalità aereo", - "settings.airplaneEndpointModel": "Modello endpoint modalità aereo", - "settings.refreshModels": "Aggiorna modelli", - "settings.defaultModel": "Modello predefinito", - "settings.titleModel": "Modello titoli", - "settings.imageAnalysisModel": "Modello analisi immagini", - "settings.keychainConfigured": "Salvato nel portachiavi", - "settings.systemPrompt": "Prompt di sistema", - "settings.resetToDefault": "Ripristina predefiniti", - "settings.luaRuntimeOnly": "Lua è l'unico runtime di scripting nell'app Rust.", - "settings.semanticSimilarityEnabled": "Similarità semantica", - "settings.sshHost": "Host SSH", - "settings.sshUsername": "Nome utente SSH", - "settings.sshRemotePath": "Percorso remoto", - "settings.clear": "Cancella", - "settings.rebuildPosts": "Ricostruisci articoli", - "settings.rebuildMedia": "Ricostruisci media", - "settings.rebuildScripts": "Ricostruisci script", - "settings.rebuildTemplates": "Ricostruisci modelli", - "settings.rebuildLinks": "Ricostruisci link", - "settings.regenerateThumbnails": "Rigenera miniature", - "settings.openDataFolder": "Apri cartella dati", - "settings.contentPlaceholder": "Le impostazioni del contenuto appariranno qui", - "settings.technologyPlaceholder": "Le impostazioni tecnologiche appariranno qui", - "settings.mcpPlaceholder": "Le impostazioni del server MCP appariranno qui", - "dashboard.overview": "Panoramica", - "dashboard.posts": "Articoli", - "dashboard.media": "Media", - "dashboard.tags": "Tag", - "dashboard.categories": "Categorie", - "dashboard.images": "Immagini", - "dashboard.drafts": "Bozze", - "dashboard.published": "Pubblicati", - "dashboard.archived": "Archiviati", - "dashboard.statCards": "Riepilogo", - "dashboard.timeline": "Cronologia", - "dashboard.noTimelineData": "Nessun dato cronologico disponibile", - "dashboard.tagCloud": "Nuvola di tag", - "dashboard.noTags": "Nessun tag per ora", - "dashboard.categoryCloud": "Nuvola di categorie", - "dashboard.recentPosts": "Post recenti", - "dashboard.noRecentPosts": "Nessun post recente", - "dashboard.and": "e", - "dashboard.pin": "Fissa", - "common.tabNotImplemented": "Questa sezione verrà implementata in una fase successiva.", - "editor.noPreviewAvailable": "Nessuna anteprima disponibile" -}