Merge track r1-i18nci into next

This commit is contained in:
aiongg committed 2026-10-21 14:54:41 +00:00
commit 5443225c3c
30 files changed
+1119 -243

No files matched your search

+1 -1
View File
@@ -33,4 +33,4 @@ jobs:
uses: storytold/craft-common-actions/.github/workflows/freebsd.yml@main
with:
require-craft-fonts: true
craft-fonts-ref: 3d9ab3a132ed0eff457e424226a435a901da30d3
craft-fonts-ref: a71c20e30af613287c504f7e685ca8fad77752bc
+1 -1
View File
@@ -26,7 +26,7 @@ jobs:
with:
app-name: lightcraft
app-title: LightCraft
craft-fonts-ref: 3d9ab3a132ed0eff457e424226a435a901da30d3
craft-fonts-ref: a71c20e30af613287c504f7e685ca8fad77752bc
version: ${{ inputs.version }}
secrets:
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
+29
View File
@@ -667,11 +667,40 @@ impl eframe::App for WebApp {
}
}
/// "Auto" follows the browser's languages (issue #2085): the first of `navigator.languages` (else
/// `navigator.language`) that LightCraft ships becomes the UI's default. Every step is fallible
/// (as in [`crate::safety::acquire_tab_lock`]): without a usable navigator Auto stays English,
/// as before.
fn install_browser_language() {
let Ok(navigator) = js_sys::Reflect::get(&js_sys::global(), &"navigator".into()) else { return };
let mut tags: Vec<String> = Vec::new();
if let Ok(languages) = js_sys::Reflect::get(&navigator, &"languages".into())
&& let Some(languages) = languages.dyn_ref::<js_sys::Array>()
{
for tag in languages.iter() {
if let Some(tag) = tag.as_string() {
tags.push(tag);
}
}
}
if tags.is_empty()
&& let Ok(language) = js_sys::Reflect::get(&navigator, &"language".into())
&& let Some(language) = language.as_string()
{
tags.push(language);
}
if let Some(language) = lightcraft_ui_egui::i18n::locale_from_tags(&tags) {
lightcraft_ui_egui::i18n::set_default_language(language);
log::info!("lightcraft: default language {language:?} from the browser's languages");
}
}
/// Start the app with the separately fetched Simplified Chinese font (empty in font-free builds).
#[wasm_bindgen]
pub fn start(chinese_font: Vec<u8>) {
eframe::WebLogger::init(log::LevelFilter::Info).ok();
safety::install_panic_hook();
install_browser_language();
log::info!("lightcraft: wasm instantiated at {:.0} ms", perf_now());
if chinese_font.is_empty() {
log::warn!("lightcraft: no Simplified Chinese font supplied; Chinese-only glyphs will show as boxes");
+4
View File
@@ -57,3 +57,7 @@ sync_github_name = false
[people.egegl]
real_name = "Ege Gursel"
sync_github_name = true
[people.mahmatias]
display_name = "Márcio Matias de Andrade"
sync_github_name = true
+1 -1
View File
@@ -242,7 +242,7 @@ impl Store for MemStore {
}
}
#[cfg(test)]
#[cfg(all(test, unix))]
mod tests_staging {
use super::*;
+2 -2
View File
@@ -3,7 +3,7 @@
//! Recipe from craft-fonts' docs/integration.md; craft-fonts is never a Cargo dependency, and this
//! script only reads a local directory (no network).
//!
//! wasm32 embeds BIZ UDPGothic Regular (~4.5 MB) and Noto Sans Thai (~214 KiB), to keep the
//! wasm32 embeds BIZ UDPGothic Regular (~4.5 MB) and Noto Sans Thai (~214 KiB) and Noto Sans Georgian, to keep the
//! `.wasm` within the web size budget (Cloudflare serves at most 25 MiB per file); the export
//! watermark falls back to it there. Native builds embed every font.
use std::fmt::Write as _;
@@ -78,7 +78,7 @@ fn craft_fonts(dir: &Path, required: bool) -> Result<String, String> {
has_japanese_ui |= (*family, *style) == ("BIZ UDPGothic", "Regular");
has_chinese_ui |= (*family, *style) == ("Noto Sans CJK SC", "Regular") && scripts.split(',').any(|script| script.trim() == "Hans");
has_thai_ui |= (*family, *style) == ("Noto Sans Thai", "Regular") && scripts.split(',').any(|script| script.trim() == "Thai");
if wasm && !matches!((*family, *style), ("BIZ UDPGothic" | "Noto Sans Thai", "Regular")) {
if wasm && !matches!((*family, *style), ("BIZ UDPGothic" | "Noto Sans Thai" | "Noto Sans Georgian", "Regular")) {
continue;
}
let path = dir.join(file).canonicalize().map_err(|e| format!("{file}: {e}"))?;
+1 -1
View File
@@ -105,7 +105,7 @@ mod tests {
assert!(japanese(CRAFT_FONTS).next().is_some(), "craft-fonts carries Japanese faces");
// Every script face that ships is a UI fallback, and has the glyphs of its script (#736).
use ab_glyph::Font;
for (script, text) in [("Thai", "ภาพถ่ายสวัสดี๑๒๓"), ("Arab", "صورة")] {
for (script, text) in [("Thai", "ภาพถ่ายสวัสดี๑๒๓"), ("Arab", "صورة"), ("Geor", "ფოტო")] {
let Some(face) = ui_fallback(CRAFT_FONTS, "Latn", "Regular").into_iter().find(|f| f.covers(script)) else { continue };
let font = ab_glyph::FontRef::try_from_slice(face.bytes).expect("parses");
assert!(text.chars().all(|c| font.glyph_id(c).0 != 0), "{} draws {script}", face.family);
+2 -1
View File
@@ -1028,7 +1028,8 @@ fn same_folder_as_original_exports_next_to_each_photo() {
let exists = |p: &str| std::path::Path::new(p).exists();
let files = crate::export::export_batch(&mut s, &ids, &o, &to, &mut crate::export::write_file, &exists).unwrap();
let written: Vec<&str> = files.iter().map(|f| f["path"].as_str().unwrap()).collect();
let mut want = vec![a.join("Exports/IMG_1.jpg").to_string_lossy().to_string(), b.join("Exports/IMG_1.jpg").to_string_lossy().to_string()];
// `export` joins the subfolder and name with `/` (`join_path`), on Windows too.
let mut want = vec![format!("{}/Exports/IMG_1.jpg", a.to_string_lossy()), format!("{}/Exports/IMG_1.jpg", b.to_string_lossy())];
let mut got: Vec<String> = written.iter().map(|p| p.to_string()).collect();
want.sort();
got.sort();
@@ -248,6 +248,9 @@ fn bad_files_are_reported_and_skipped() {
}
std::fs::create_dir_all(folder.join("folder.json")).unwrap();
std::fs::write(folder.join("notes.txt"), b"ignored").unwrap();
// written by hand, not through LightCraft: the folder's time may not have moved since the
// save's listing (same clock tick), so the cached listing is dropped as a write would drop it
s.slide_templates_cache = None;
let r = run(&mut s, "slideshow.templates.list", json!({}));
let user: Vec<_> = r["templates"].as_array().unwrap().iter().filter(|t| t["builtin"] == false).collect();
assert_eq!(user.len(), 1, "only the good one: {r}");
+4
View File
@@ -193,6 +193,7 @@ mod tests {
use std::sync::atomic::{AtomicUsize, Ordering};
fn with_reply(reply: &[u8], check: impl FnOnce(&mut Remote, Result<Value, String>)) {
let _serial = crate::serial_sockets_and_children();
let listener = TcpListener::bind("127.0.0.1:0").unwrap();
let addr = listener.local_addr().unwrap().to_string();
let reply = reply.to_vec();
@@ -307,6 +308,7 @@ mod tests {
#[test]
fn consecutive_replies_match_their_requests_on_one_connection() {
let _serial = crate::serial_sockets_and_children();
let listener = TcpListener::bind("127.0.0.1:0").unwrap();
let addr = listener.local_addr().unwrap().to_string();
let worker = std::thread::spawn(move || {
@@ -331,6 +333,7 @@ mod tests {
#[test]
fn lost_reply_is_not_resent() {
let _serial = crate::serial_sockets_and_children();
let listener = TcpListener::bind("127.0.0.1:0").unwrap();
let addr = listener.local_addr().unwrap().to_string();
let seen = Arc::new(AtomicUsize::new(0));
@@ -353,6 +356,7 @@ mod tests {
#[test]
fn connection_closed_by_app_reconnects_before_sending() {
let _serial = crate::serial_sockets_and_children();
let listener = TcpListener::bind("127.0.0.1:0").unwrap();
let addr = listener.local_addr().unwrap().to_string();
let seen = Arc::new(AtomicUsize::new(0));
+11
View File
@@ -33,3 +33,14 @@ pub const DEFAULT_ADDR: &str = "127.0.0.1:7980";
#[cfg(test)]
mod tests;
/// Held by tests that start a child process (a copy of the test binary) and by tests that run a
/// loopback socket server, so the two never overlap. On Windows the child can inherit a socket the
/// server just accepted; when the child exits, Windows closes its copy abortively and the test's
/// connection is reset ("An existing connection was forcibly closed"), which failed the
/// `backend` reply tests whenever they ran alongside a child-process test.
#[cfg(test)]
pub(crate) fn serial_sockets_and_children() -> std::sync::MutexGuard<'static, ()> {
static LOCK: std::sync::Mutex<()> = std::sync::Mutex::new(());
LOCK.lock().unwrap_or_else(std::sync::PoisonError::into_inner)
}
+1
View File
@@ -100,6 +100,7 @@ fn progress_flush_failure_does_not_wait_for_input_eof() {
}
fn run_shutdown_case(mode: &str) {
let _serial = crate::serial_sockets_and_children();
let mut child = Command::new(std::env::current_exe().unwrap())
.args(["--exact", "server::progress::shutdown_tests::output_failure_child", "--ignored", "--nocapture"])
.env("LIGHTCRAFT_MCP_SHUTDOWN_CASE", mode)
+1
View File
@@ -262,6 +262,7 @@ fn a_one_shot_process_never_ends_during_a_photos_import() {
drop(h); // what lightcraft-cli does before it exits
return;
}
let _serial = crate::serial_sockets_and_children();
for mode in ["default", "nowait"] {
let dir = std::env::temp_dir().join(format!("lc-mcp-photos-child-{mode}-{}", std::process::id()));
let _ = std::fs::remove_dir_all(&dir);
+44 -44
View File
@@ -248,50 +248,50 @@
"“{parent}” has a “{name}” already. Merge the two?": "„{parent}“ již obsahuje „{name}“. Sloučit obě slova?",
"• {assumption}": "• {assumption}",
"… and {more} more": "… a dalších {more}",
"The XMP sidecars of {n} photos couldn't be written (is their folder offline?). LightCraft keeps trying.": "The XMP sidecars of {n} photos couldn't be written (is their folder offline?). LightCraft keeps trying.",
"Create the keyword “{name}”": "Create the keyword “{name}”",
"new, inside {parent}": "new, inside {parent}",
"Keywords of {n} selected photos": "Keywords of {n} selected photos",
"Removed “{name}” from {n} photos. Edit ▸ Undo puts it back.": "Removed “{name}” from {n} photos. Edit → Undo puts it back.",
" in {g} group{}": " in {g} group{}",
" · kept, not applied: {}": " · kept, not applied: {}",
" — kept but not applied: {}": " — kept but not applied: {}",
"Apply to “{mask}” on Selected Photos": "Apply to “{mask}” on Selected Photos",
"Delete the effect preset “{name}”?": "Delete the effect preset “{name}”?",
"Delete these {n} effect presets?": "Delete these {n} effect presets?",
"Delete {n} effect preset{}? This can't be undone.": "Delete {n} effect preset{}? This can't be undone.",
"Effect: {name}": "Effect: {name}",
"Exported {} effect preset{}": "Exported {} effect preset{}",
"Imported {e} mask effect{} (Masking ▸ Effect)": "Imported {e} mask effect{} (Masking → Effect)",
"Update “{name}” with Current Settings": "Update “{name}” with Current Settings",
"{n} preset{}": "{n} preset{}",
"{count} more warnings.": "{count} more warnings.",
"{photos} catalog records processed; {collections} collections.": "{photos} catalog records processed; {collections} collections.",
"{missing} originals are missing. Their catalog records are available; use Find Missing Photos to relink them.": "{missing} originals are missing. Their catalog records are available; use Find Missing Photos to relink them.",
"Applied {name}": "Applied {name}",
"Delete “{name}”?": "Delete “{name}”?",
"Updated {name}": "Updated {name}",
"Exported to {path}": "Exported to {path}",
"Saved template {name}": "Saved template {name}",
"Imported {name}": "Imported {name}",
"Skipped {problem}": "Skipped {problem}",
"…and {more} more": "…and {more} more",
"Template preview: {name}": "Template preview: {name}",
"{n} photos in view · {slides} slides · {time}": "{n} photos in view · {slides} slides · {time}",
"{n} pages": "{n} pages",
"{n} JPEG files": "{n} JPEG files",
"{s} s of AV1 video": "{s} s of AV1 video",
"Slideshow exported: {what}": "Slideshow exported: {what}",
" · {n} skipped (could not be rendered)": " · {n} skipped (could not be rendered)",
"{n} raws can now be developed from their raw data": "{n} raws can now be developed from their raw data",
"LightCraft stopped unexpectedly: {e}\n\nThe log file has the details: {path}": "LightCraft stopped unexpectedly: {e}\n\nThe log file has the details: {path}",
"LightCraft stopped unexpectedly: {e}": "LightCraft stopped unexpectedly: {e}",
"Renames {n} face{} across the library. The files are not changed.": "Renames {n} face{} across the library. The files are not changed.",
"“{to}” is already a person. Combining them makes one person; Undo separates them again.": "“{to}” is already a person. Combining them makes one person; Undo separates them again.",
"{what} merge added at {mp}: its full size, {full}, needs more memory than this computer has": "{what} merge added at {mp}: its full size, {full}, needs more memory than this computer has",
"{what} merge added at {mp}, the largest a panorama can be (its full size is {full})": "{what} merge added at {mp}, the largest a panorama can be (its full size is {full})",
"Color space: Rec. 2020 {curve} (HDR AVIF)": "Color space: Rec. 2020 {curve} (HDR AVIF)",
"{n} selected photos · {pages} pages": "{n} selected photos · {pages} pages",
"The XMP sidecars of {n} photos couldn't be written (is their folder offline?). LightCraft keeps trying.": "Nepodařilo se zapsat přidružené soubory XMP u fotografií v počtu {n} (není jejich složka offline?). LightCraft to bude zkoušet dál.",
"Create the keyword “{name}”": "Vytvořit klíčové slovo „{name}“",
"new, inside {parent}": "nové, pod {parent}",
"Keywords of {n} selected photos": "Klíčová slova vybraných fotografií (počet: {n})",
"Removed “{name}” from {n} photos. Edit ▸ Undo puts it back.": "Klíčové slovo „{name}“ bylo odebráno z fotografií v počtu {n}. Úpravy → Zpět jej vrátí.",
" in {g} group{}": " ve skupinách: {g}{:.0}",
" · kept, not applied: {}": " · zachováno, nepoužito: {}",
" — kept but not applied: {}": " — zachováno, ale nepoužito: {}",
"Apply to “{mask}” on Selected Photos": "Použít na masku „{mask}“ u vybraných fotografií",
"Delete the effect preset “{name}”?": "Odstranit přednastavení efektu „{name}“?",
"Delete these {n} effect presets?": "Odstranit tato přednastavení efektů (počet: {n})?",
"Delete {n} effect preset{}? This can't be undone.": "Odstranit přednastavení efektů v počtu {n}{:.0}? Tuto akci nelze vrátit zpět.",
"Effect: {name}": "Efekt: {name}",
"Exported {} effect preset{}": "Exportováno přednastavení efektů: {0}{1:.0}",
"Imported {e} mask effect{} (Masking ▸ Effect)": "Importováno efektů masek: {e}{:.0} (Maskování → Efekt)",
"Update “{name}” with Current Settings": "Aktualizovat „{name}“ podle aktuálního nastavení",
"{n} preset{}": "Přednastavení: {n}{:.0}",
"{count} more warnings.": "Další varování: {count}.",
"{photos} catalog records processed; {collections} collections.": "Zpracováno záznamů katalogu: {photos}; kolekcí: {collections}.",
"{missing} originals are missing. Their catalog records are available; use Find Missing Photos to relink them.": "Chybějící originály: {missing}. Jejich záznamy jsou v katalogu dostupné; použijte Najít chybějící fotografie a znovu je propojte.",
"Applied {name}": "Použito: {name}",
"Delete “{name}”?": "Odstranit „{name}“?",
"Updated {name}": "Aktualizováno: {name}",
"Exported to {path}": "Exportováno do {path}",
"Saved template {name}": "Uložena šablona {name}",
"Imported {name}": "Importováno: {name}",
"Skipped {problem}": "Přeskočeno: {problem}",
"…and {more} more": "…a další: {more}",
"Template preview: {name}": "Náhled šablony: {name}",
"{n} photos in view · {slides} slides · {time}": "Fotografie v zobrazení: {n} · snímky: {slides} · {time}",
"{n} pages": "Stránky: {n}",
"{n} JPEG files": "Soubory JPEG: {n}",
"{s} s of AV1 video": "Video AV1: {s} s",
"Slideshow exported: {what}": "Prezentace byla exportována: {what}",
" · {n} skipped (could not be rendered)": " · přeskočeno: {n} (nepodařilo se vykreslit)",
"{n} raws can now be developed from their raw data": "Soubory RAW, které lze nyní vyvolat z dat RAW: {n}",
"LightCraft stopped unexpectedly: {e}\n\nThe log file has the details: {path}": "LightCraft se neočekávaně ukončil: {e}\n\nPodrobnosti najdete v souboru protokolu: {path}",
"LightCraft stopped unexpectedly: {e}": "LightCraft se neočekávaně ukončil: {e}",
"Renames {n} face{} across the library. The files are not changed.": "Přejmenuje obličeje v celé knihovně (počet: {n}{:.0}). Soubory se nezmění.",
"“{to}” is already a person. Combining them makes one person; Undo separates them again.": "Osoba „{to}“ již existuje. Sloučením vznikne jedna osoba; příkaz Zpět je znovu oddělí.",
"{what} merge added at {mp}: its full size, {full}, needs more memory than this computer has": "Přidáno sloučení {what} v rozlišení {mp}: plné rozlišení {full} vyžaduje více paměti, než má tento počítač",
"{what} merge added at {mp}, the largest a panorama can be (its full size is {full})": "Přidáno sloučení {what} v rozlišení {mp}, což je nejvyšší možné rozlišení panoramatu (plné rozlišení je {full})",
"Color space: Rec. 2020 {curve} (HDR AVIF)": "Barevný prostor: Rec. 2020 {curve} (HDR AVIF)",
"{n} selected photos · {pages} pages": "Vybrané fotografie: {n} · stránky: {pages}",
"Already in “{}”": "Již v „{}“",
"Move {n} photo{} to “{}”": "Přesunout do „{1}“ fotografie: {n}{0:.0}",
"Move {n} photo{} to “{}”?": "Přesunout do „{1}“ fotografie: {n}{0:.0}?",
+330 -1
View File
@@ -11,6 +11,7 @@
", rejected": ", odmítnuto",
"0: nothing is rejected.": "0: nic se neodmítá.",
"1 day": "1 den",
"150 dpi · sRGB · current edits · fit without cropping": "150 dpi · sRGB · aktuální úpravy · přizpůsobit bez ořezu",
"2026-04 or 2026-04-12": "2026-04 nebo 2026-04-12",
"= exactly": "= přesně",
"A blank template keeps the original names.": "Prázdná šablona zachová původní názvy.",
@@ -19,6 +20,7 @@
"A folder is being synchronized": "Probíhá synchronizace složky",
"A keyword set needs a name": "Sada klíčových slov musí mít název",
"A one-time download of about": "Jednorázové stažení přibližně",
"A pen's pressure sets the size and flow of the brush": "Přítlak pera určuje velikost a tok štětce",
"AI Denoise": "Redukce šumu pomocí AI",
"AI Denoise Model": "Model pro redukci šumu pomocí AI",
"AI Denoise is enabled on the requesting photo": "Redukce šumu pomocí AI je u požadované fotografie zapnutá",
@@ -53,6 +55,9 @@
"Add to Favorites": "Přidat do oblíbených",
"Add to Local": "Přidat do místních souborů",
"Add to My Photos": "Přidat do mých fotografií",
"Can't be moved here": "Sem nelze přesunout",
"This row covers more than one disk: drop on a folder inside it": "Tento řádek zahrnuje více disků: přetáhněte položky na některou ze složek v něm",
"Local photos aren't in the library yet: Add to My Photos first, then move them": "Místní fotografie zatím nejsou v knihovně: nejprve použijte Přidat do mých fotografií a pak je přesuňte",
"Add to My Photos First": "Nejprve přidat do mých fotografií",
"Add to Selected Photos": "Přidat k vybraným fotografiím",
"Add to Target Album": "Přidat do cílového alba",
@@ -66,6 +71,108 @@
"No graphics processor found: LightCraft renders on the CPU, which is much slower. Details in Help → System Info.": "Nebyl nalezen grafický procesor: LightCraft vykresluje na CPU, což je mnohem pomalejší. Podrobnosti najdete v nabídce Nápověda → Informace o systému.",
"On NixOS, start it from `nix develop`.": "V NixOS ho spusťte z `nix develop`.",
"Files with the same content as another file in this import: only the first is imported.": "Soubory se stejným obsahem jako jiný soubor v tomto importu: importuje se jen první z nich.",
"Lightroom Catalog Import": "Import katalogu Lightroom",
"Destination library": "Cílová knihovna",
"Show in Library": "Zobrazit v knihovně",
"Lightroom catalogs import into the open library; no separate catalog folder is created.": "Katalogy Lightroom se importují do otevřené knihovny; samostatná složka katalogu se nevytváří.",
"These photos are only in memory. Open a library on disk and import the catalog again to save them.": "Tyto fotografie jsou pouze v paměti. Chcete-li je uložit, otevřete knihovnu na disku a importujte katalog znovu.",
"Playback": "Přehrávání",
"Layout": "Rozložení",
"Link all margins": "Propojit všechny okraje",
"Margins": "Okraje",
"Left": "Vlevo",
"Right": "Vpravo",
"Top": "Nahoře",
"Bottom": "Dole",
"Margins are a share of the slide's shorter side, so slides look the same on any screen.": "Okraje se zadávají jako podíl kratší strany snímku, takže snímky vypadají na každé obrazovce stejně.",
"Show guides": "Zobrazit vodítka",
"Aspect preview": "Poměr stran náhledu",
"Zoom to fill frame": "Přiblížit pro vyplnění rámečku",
"Stroke border": "Obrysový rámeček",
"Colour": "Barva",
"Cast shadow": "Vržený stín",
"Offset": "Posun",
"Backdrop": "Pozadí",
"Background colour": "Barva pozadí",
"Colour wash": "Barevný přechod",
"Background image": "Obrázek na pozadí",
"(not in the library)": "(není v knihovně)",
"Use selected photo": "Použít vybranou fotografii",
"Select a photo, then turn this on to fill the slide behind every photo with it.": "Vyberte fotografii a zapněte tuto volbu, aby vyplnila pozadí snímku za každou fotografií.",
"Reset layout": "Obnovit rozložení",
"Select a photo to preview its slide": "Vyberte fotografii pro náhled jejího snímku",
"The selected photo as a slide. Playback fills the screen; the aspect preview only changes this preview.": "Vybraná fotografie jako snímek. Přehrávání vyplní obrazovku; poměr stran náhledu mění pouze tento náhled.",
"Overlays": "Překrytí",
"Identity plate": "Označení autora",
"Your name or studio": "Vaše jméno nebo studio",
"Anchored to": "Ukotveno k",
"Slide": "Snímek",
"Render behind image": "Vykreslit za obrázkem",
"Rating stars": "Hvězdičky hodnocení",
"Text overlays": "Textová překrytí",
"Add text overlay": "Přidat textové překrytí",
"Tokens: {file}, {name}, {title}, {caption}, {date}, {exposure}, {iso}, {focal}, {camera}, {lens}, {rating}, {creator}, {copyright}. Other text shows as typed.": "Značky: {file}, {name}, {title}, {caption}, {date}, {exposure}, {iso}, {focal}, {camera}, {lens}, {rating}, {creator}, {copyright}. Ostatní text se zobrazí tak, jak jej zadáte.",
"Use export watermark": "Použít exportní vodoznak",
"The export watermark, drawn on the photo and sized relative to it.": "Exportní vodoznak, vykreslený na fotografii s velikostí vztaženou k ní.",
"Titles": "Titulky",
"Intro screen": "Úvodní obrazovka",
"Ending screen": "Závěrečná obrazovka",
"Shows": "Obsah",
"Colour only": "Pouze barva",
"Override colour": "Vlastní barva",
"Own duration (off: the slide duration)": "Vlastní délka (vypnuto: délka snímku)",
"Duration": "Délka",
"Title text": "Text titulku",
"Intro": "Úvod",
"Ending": "Závěr",
"End": "Závěr",
"The intro plays once before the first photo; the ending after the last photo when Repeat is off. The identity plate is the one set under Overlays. Titles fade like slides and random order never moves them.": "Úvod se přehraje jednou před první fotografií; závěr po poslední fotografii, pokud je vypnuto opakování. Označení autora se přebírá z nastavení Překrytí. Titulky se prolínají jako snímky a náhodné pořadí je nikdy nepřesouvá.",
"This screen is off: turn it on under Titles to play it.": "Tato obrazovka je vypnutá: chcete-li ji přehrát, zapněte ji v části Titulky.",
"The intro screen, before the first photo.": "Úvodní obrazovka, před první fotografií.",
"The ending screen, after the last photo.": "Závěrečná obrazovka, po poslední fotografii.",
"Templates": "Šablony",
"Built-in": "Vestavěné",
"Your templates": "Vaše šablony",
"None yet: save the current settings as a template below.": "Zatím žádné: níže uložte aktuální nastavení jako šablonu.",
"Before the last template": "Před použitím poslední šablony",
"Previous settings": "Předchozí nastavení",
"New template name": "Název nové šablony",
"Save as Template": "Uložit jako šablonu",
"Import…": "Importovat…",
"Your own templates need a settings folder, which this build doesn't have; the built-in ones work.": "Vlastní šablony vyžadují složku nastavení, kterou toto sestavení nemá; vestavěné šablony fungují.",
"Click a template to apply it; point at one to preview it on the selected photo. Right-click your own to update, rename, export or delete it.": "Kliknutím šablonu použijete; najetím ukazatele zobrazíte její náhled na vybrané fotografii. Vlastní šablonu můžete kliknutím pravým tlačítkem aktualizovat, přejmenovat, exportovat nebo odstranit.",
"Import Slideshow Templates": "Importovat šablony prezentace",
"Export Slideshow Template": "Exportovat šablonu prezentace",
"Slideshow Templates": "Šablony prezentace",
"Plain Black": "Prostá černá",
"Gallery Wall": "Stěna galerie",
"Edge to Edge": "Od kraje ke kraji",
"Cinema Wide": "Širokoúhlé kino",
"Shooting Data": "Údaje o pořízení",
"Each photo as large as it fits, on black, with a short crossfade. Nothing drawn over it.": "Každá fotografie co největší na černém pozadí, s krátkým prolnutím. Nic se přes ni nekreslí.",
"A light grey wall with a white mat and a soft shadow; the caption and the rating under the photo.": "Světle šedá stěna s bílou paspartou a jemným stínem; popisek a hodnocení pod fotografií.",
"Every photo cropped to fill the whole screen, with slow crossfades.": "Každá fotografie oříznutá tak, aby vyplnila celou obrazovku, s pomalým prolnutím.",
"A 16:9 frame with black bars above and below, the title in the corner, fades through black and a closing card.": "Rám 16:9 s černými pruhy nahoře a dole a titulem v rohu; přechody přes černou a na konci závěrečná obrazovka.",
"A dark slate backdrop with the exposure, ISO and focal length, then the camera and lens, under each photo.": "Tmavé břidlicové pozadí; pod každou fotografií expozice, ISO a ohnisková vzdálenost a dále fotoaparát a objektiv.",
"Exporting slideshow": "Exportování prezentace",
"Export Slideshow…": "Exportovat prezentaci…",
"Export Slideshow": "Exportovat prezentaci",
"Export Slideshow: folder for the JPEG files": "Exportovat prezentaci: složka pro soubory JPEG",
"Frame rate": "Snímková frekvence",
"Container": "Kontejner",
"Export PDF…": "Exportovat PDF…",
"Export JPEG…": "Exportovat JPEG…",
"Export Video…": "Exportovat video…",
"Automatically show full screen": "Automaticky zobrazit na celou obrazovku",
"One page per slide (the long side in pixels = points), with the slide duration and fade for the viewer's presentation mode.": "Jeden snímek na stránku (delší strana v pixelech = body), s délkou zobrazení snímku a prolnutím pro režim prezentace v prohlížeči PDF.",
"Numbered JPEG files (name-001.jpg…) in a new folder named in the next step.": "Číslované soubory JPEG (name-001.jpg…) v nové složce, kterou pojmenujete v dalším kroku.",
"AV1 video, each slide held for its duration with its fades. No sound: music is not exported yet.": "Video AV1, každý snímek se zobrazuje po nastavenou dobu včetně prolnutí. Bez zvuku: hudba se zatím neexportuje.",
"Slides use the slideshow's layout, overlays and intro and ending screens, in view order.": "Snímky používají rozložení, překrytí a úvodní i závěrečnou obrazovku prezentace a řadí se podle aktuálního zobrazení.",
"The photos in view as slides, with the settings above. Progress shows in the activity stack.": "Fotografie v aktuálním zobrazení jako snímky s výše uvedeným nastavením. Průběh se zobrazuje v seznamu úloh na pozadí.",
"Checking raw files": "Kontrola souborů RAW",
"1 raw can now be developed from its raw data": "1 soubor RAW lze nyní vyvolat z dat RAW",
"This raw is now developed from its raw data": "Tento soubor RAW se nyní vyvolává z dat RAW",
"This raw variant still can't be decoded": "Tuto variantu RAW stále nelze dekódovat",
"Adding to Apple Photos…": "Přidávání do Apple Photos…",
"Advanced search…": "Rozšířené hledání…",
"After": "Po",
@@ -324,7 +431,14 @@
"Concrete Cool": "Chladný beton",
"Confirm before deleting": "Potvrdit před odstraněním",
"Confirm before moving photos to Recently Deleted": "Potvrdit před přesunem fotografií do nedávno odstraněných",
"Move Photos": "Přesunout fotografie",
"Their files and XMP sidecars move on disk. Edit → Undo moves them back.": "Jejich soubory a přidružené soubory XMP se přesunou na disku. Úpravy → Zpět je přesune zpět.",
"Don't ask again": "Znovu se neptat",
"Another library was opened since the photos were dropped: nothing was moved": "Od přetažení fotografií byla otevřena jiná knihovna: nic nebylo přesunuto",
"Settings → Confirm before moving photos to another folder on disk turns it back on": "Znovu zapnete v Nastavení → Potvrdit před přesunem fotografií do jiné složky na disku",
"Confirm before moving photos to another folder on disk": "Potvrdit před přesunem fotografií do jiné složky na disku",
"Constrain Crop": "Omezit oříznutí",
"Contact Sheet PDF": "Přehled snímků PDF",
"Content-Aware": "Podle obsahu",
"Continue": "Pokračovat",
"Continue Without Saving": "Pokračovat bez uložení",
@@ -603,6 +717,7 @@
"File name": "Název výstupního souboru",
"File types:": "Typy souborů:",
"Filename": "Jméno souboru",
"Filename captions": "Popisky s názvy souborů",
"Fill": "Vyplnit",
"Fill Edges": "Vyplnit okraje",
"Fill Location": "Doplnit místo",
@@ -671,6 +786,7 @@
"Friday": "Pátek",
"Full": "Plné",
"Full Screen Preview": "Náhled na celé obrazovce",
"Hold View Until Refreshed": "Ponechat zobrazení do obnovení",
"Full screen mode": "Režim celé obrazovky",
"Full size": "Plná velikost",
"GPS Track Log": "Záznam trasy GPS",
@@ -728,6 +844,7 @@
"HDR panorama": "Panorama HDR",
"HDR panoramas": "Panoramata HDR",
"HDR with Last Settings": "HDR s posledním nastavením",
"HDR for Each Bracket Set": "Sloučit každou expoziční řadu do HDR",
"HDR…": "HDR…",
"Has Edits": "Obsahuje úpravy",
"Has GPS": "Obsahuje GPS",
@@ -800,6 +917,7 @@
"In memory — nothing is saved": "V paměti — nic není uloženo",
"In use": "Používané",
"In-memory session: these settings last until LightCraft quits.": "Relace v paměti: tato nastavení platí do ukončení LightCraft.",
"Include selected photos": "Zahrnout vybrané fotografie",
"Include on Export": "Zahrnout do exportu",
"Include subfolders": "Zahrnout podsložky",
"Increase Brush Feather": "Zvětšit prolnutí štětce",
@@ -1096,12 +1214,26 @@
"No edits yet.": "Zatím žádné úpravy.",
"No exposure information": "Žádné informace o expozici",
"No filter presets yet": "Zatím žádná přednastavení filtrů",
"No lens data embedded in this file.": "V tomto souboru nejsou vložena data objektivu.",
"No folders to browse": "Žádné složky k procházení",
"No imported folders yet": "Zatím žádné importované složky",
"No keywords are exported": "Neexportují se žádná klíčová slova",
"No keywords match": "Žádné klíčové slovo neodpovídá",
"No keywords yet": "Zatím žádná klíčová slova",
"Show fewer": "Zobrazit méně",
"Whole names": "Úplné názvy",
"Grouped by parent": "Seskupené podle nadřazeného slova",
"Keywords of the selection": "Klíčová slova výběru",
"Grouped: keywords inside the same keyword share a line naming it, and long lists and the suggestions are shortened.": "Seskupené: klíčová slova se stejným nadřazeným slovem sdílejí řádek s jeho názvem; dlouhé seznamy a návrhy se zkracují.",
"Show every keyword of the selected photos": "Zobrazit všechna klíčová slova vybraných fotografií",
"new keyword": "nové klíčové slovo",
"Return creates this keyword and gives it to the selected photos": "Klávesou Return vytvoříte toto klíčové slovo a přiřadíte je vybraným fotografiím",
"Separate several keywords with commas. Return gives them to the selected photos.": "Více klíčových slov oddělte čárkami. Klávesou Return je přiřadíte vybraným fotografiím.",
"No lens data embedded in this file (DNG lens opcodes only).": "V tomto souboru nejsou vložena data objektivu (pouze operační kódy objektivu DNG).",
"Export to": "Exportovat do",
"Specific folder": "Konkrétní složka",
"Same folder as original photo": "Stejná složka jako původní fotografie",
"Tidying the thumbnail cache": "Úklid mezipaměti miniatur",
"No masks yet. Choose a mask type above.": "Zatím žádné masky. Vyberte typ masky nahoře.",
"No matching commands": "Žádné odpovídající příkazy",
"No matching photos": "Žádné odpovídající fotografie",
@@ -1113,6 +1245,11 @@
"No photo has it; the keywords below it go too.": "Není přiřazeno žádné fotografii; odstraní se i podřízená klíčová slova.",
"No photo selected": "Není vybrána fotografie",
"No photos": "Žádné fotografie",
"Your library is empty": "Vaše knihovna je prázdná",
"Photos you import show up here. Nothing is copied or moved unless you choose to.": "Zde se zobrazí importované fotografie. Nic se nekopíruje ani nepřesouvá, pokud to sami nezvolíte.",
"or drop photos and folders into this window": "nebo do tohoto okna přetáhněte fotografie a složky",
"Import photos to get started": "Začněte importem fotografií",
"or drop photos into this window": "nebo do tohoto okna přetáhněte fotografie",
"No photos found": "Nebyly nalezeny fotografie",
"No photos in this folder": "V této složce nejsou fotografie",
"No photos match the active filters": "Žádné fotografie neodpovídají aktivním filtrům",
@@ -1203,6 +1340,7 @@
"Paste from Previous": "Vložit z předchozí fotografie",
"Paste pages": "Vložit stránky",
"Pastel Haze": "Pastelový opar",
"Pen Pressure": "Přítlak pera",
"Pending photo action cancelled": "Čekající akce s fotografií byla zrušena",
"Pending photo action cancelled because its library or photo changed": "Čekající akce byla zrušena, protože se změnila knihovna nebo fotografie",
"People": "Lidé",
@@ -1223,6 +1361,7 @@
"Photo ▸ Edit in External Editor (⇧⌘E) renders a 16-bit TIFF copy, stacks it with the original and opens it here (an app name on macOS, a program path elsewhere).": "Fotografie → Upravit v externím editoru (⇧⌘E) vykreslí 16bitovou kopii TIFF, přidá ji do sady s originálem a otevře v této aplikaci (název aplikace v macOS, jinde cesta k programu).",
"PhotoCraft": "PhotoCraft",
"Photos": "Fotografie",
"Photos edited in HDR: JPEG with an HDR gain map (looks right everywhere, brighter highlights on HDR displays), AVIF as 10-bit, PNG and JPEG XL as 16-bit Rec. 2020 PQ; TIFF needs 32-bit float": "Fotografie upravené v HDR: JPEG s mapou zisku HDR (správné zobrazení všude, jasnější světla na displejích HDR), AVIF jako 10bitový, PNG a JPEG XL jako 16bitové Rec. 2020 PQ; TIFF vyžaduje 32bitová čísla s plovoucí řádovou čárkou",
"Photos are shown through your monitor's ICC profile, so colours are right on wide-gamut and calibrated displays, and the Detail view uses the display's whole gamut. The histogram, the preview caches and exports are not affected.": "Fotografie se zobrazují přes ICC profil monitoru, aby byly barvy správné na kalibrovaných displejích i displejích se širokým gamutem. Detail využívá celý gamut displeje. Histogram, mezipaměti náhledů ani export se nemění.",
"Photos per bracket (0 = auto)": "Fotografií na expoziční řadu (0 = automaticky)",
"Photos seen in Local but never added or changed leave the catalog when their folder hasn't been browsed for this long (checked when the library opens). Files stay on disk; browsing the folder shows them again.": "Fotografie prohlížené v místních souborech, které nebyly přidány ani změněny, se odeberou z katalogu, pokud se jejich složka po tuto dobu neprocházela (kontroluje se při otevření knihovny). Soubory zůstanou na disku; procházením složky se znovu zobrazí.",
@@ -1368,6 +1507,7 @@
"Refining the mask's detail…": "Zpřesňování detailů masky…",
"Refresh Source": "Obnovit zdroj",
"Refresh Source (/)": "Obnovit zdroj (/)",
"Refresh View": "Obnovit zobrazení",
"Reject": "Odmítnout",
"Reject below focus": "Odmítnout pod limitem zaostření",
"Rejected": "Odmítnuto",
@@ -1440,7 +1580,38 @@
"Reset Sidebar Sections": "Obnovit sekce postranního panelu",
"Reset Tone Curve": "Obnovit tónovou křivku",
"Reset all curves: point curves (all channels) and parametric (double-click a channel to reset only that one)": "Obnoví všechny křivky: bodové (všechny kanály) i parametrickou (dvojklik na kanál obnoví pouze tento kanál)",
"Reset all edits": "Obnovit všechny úpravy",
"Reset all edits (Cmd+Shift+R)": "Obnovit všechny úpravy (Cmd+Shift+R)",
"Smart albums update automatically: change their rules, or use Photo ▸ Delete Photo": "Inteligentní alba se aktualizují automaticky: změňte jejich pravidla nebo použijte Fotografie → Odstranit fotografii",
"LightCraft stopped": "LightCraft se neočekávaně ukončil",
"Show Focus Point": "Zobrazit zaostřovací bod",
"Zoom to Focus Point": "Přiblížit na zaostřovací bod",
"Focus": "Zaostření",
"Focus point": "Zaostřovací bod",
"Wide": "Široká oblast",
"Center": "Střed",
"Flexible Spot": "Pohyblivý bod",
"Zone": "Zóna",
"Expanded Flexible Spot": "Rozšířený pohyblivý bod",
"Custom AF Area": "Vlastní oblast AF",
"Face tracking": "Sledování obličeje",
"Lock On AF": "AF se sledováním objektu",
"Multi": "Vícebodové",
"Spot": "Bod",
"Tracking": "Sledování",
"Face Tracking": "Sledování obličeje",
"Animal Eye Tracking": "Sledování zvířecích očí",
"Human Eye Tracking": "Sledování lidských očí",
"Read Focus Points": "Načíst zaostřovací body",
"Reading focus points": "Načítání zaostřovacích bodů",
"Run face models on the CPU only": "Spouštět modely rozpoznávání obličejů pouze na CPU",
"Detection": "Detekce",
"Recognition": "Rozpoznávání",
"Not loaded yet": "Zatím nenačteno",
"Checking the GPU…": "Kontrola GPU…",
"CPU": "CPU",
"A face model uses the GPU only when a check shows it gives the same results faster.": "Model rozpoznávání obličejů používá GPU pouze tehdy, když kontrola prokáže, že na něm dosahuje stejných výsledků rychleji.",
"Checking the GPU for faces": "Kontrola GPU pro rozpoznávání obličejů",
"Reshuffle": "Znovu promíchat",
"Resize Face Box": "Změnit velikost rámečku obličeje",
"Resize panel window": "Změnit velikost okna panelu",
@@ -1611,6 +1782,7 @@
"Show overlay (O)": "Zobrazit překrytí (O)",
"Show ratings, flags and edit badges": "Zobrazit hodnocení, příznaky a odznaky úprav",
"Show the Navigator while zoomed in": "Zobrazit navigátor při přiblížení",
"Show the import review when a camera or card is connected": "Zobrazit kontrolu importu při připojení fotoaparátu nebo karty",
"Show the template tags; click one to insert it": "Zobrazit značky šablony; kliknutím jednu vložíte",
"Show/Hide Mask": "Zobrazit/Skrýt masku",
"Show/hide My Photos panel": "Zobrazit/Skrýt panel mých fotografií",
@@ -1644,6 +1816,7 @@
"Soft Pastel": "Jemné pastelové",
"Soft Proofing": "Měkký nátisk",
"Soft Skin": "Jemná pleť",
"Solo Mode": "Režim jedné sekce",
"Some rules need fixing (Edit Smart Album…):": "Některá pravidla je třeba opravit (Upravit inteligentní album…):",
"Sort": "Seřadit",
"Sort Albums A–Z": "Seřadit alba A–Z",
@@ -1879,6 +2052,7 @@
"Will be restored": "Bude obnoveno",
"Window": "Okno",
"Winter Blue": "Zimní modř",
"Wrote the XMP sidecars that were waiting": "Čekající přidružené soubory XMP byly zapsány",
"Works on raw files from cameras with a standard (Bayer) sensor. Other files keep their normal noise reduction.": "Funguje se soubory RAW z fotoaparátů se standardním snímačem (Bayer). Ostatní soubory si zachovají běžnou redukci šumu.",
"XMP Sidecar Preferences": "Předvolby přidružených souborů XMP",
"XMP sidecars": "Přidružené soubory XMP",
@@ -2052,6 +2226,8 @@
"SDR Shadows": "Stíny SDR",
"SDR Whites": "Bílé SDR",
"HDR TIFF needs 32-bit float.": "HDR TIFF vyžaduje 32bitové hodnoty s plovoucí řádovou čárkou.",
"HDR output": "Výstup HDR",
"Letter": "Letter",
"Color space: Rec. 2020 HLG (HDR AVIF)": "Barevný prostor: Rec. 2020 HLG (HDR AVIF)",
"Color space: Rec. 2020 PQ (HDR AVIF)": "Barevný prostor: Rec. 2020 PQ (HDR AVIF)",
"Color space: Rec. 2020 PQ, 16-bit (HDR PNG)": "Barevný prostor: Rec. 2020 PQ, 16 bitů (HDR PNG)",
@@ -2063,5 +2239,158 @@
"Open Settings": "Otevřít nastavení",
"Select none": "Zrušit celý výběr",
"Select all": "Vybrat vše",
"Visualize HDR": "Zobrazit rozsah HDR"
"Visualize HDR": "Zobrazit rozsah HDR",
"Add a Face Recognition Model": "Přidat model rozpoznávání obličejů",
"Choose Monitor Profile": "Vybrat profil monitoru",
"Display profile not used": "Profil displeje nebyl použit",
"Drag to set hue and saturation. Hold Shift to keep the hue, Cmd/Ctrl to keep the saturation, Alt/Option to fine-adjust. Double-click to reset.": "Tažením nastavíte odstín a sytost. Podržením Shift zachováte odstín, Cmd/Ctrl zachováte sytost, Alt/Option umožní jemné doladění. Dvojitým kliknutím obnovíte výchozí hodnoty.",
"Edit In": "Upravit v",
"Face models (ONNX)": "Modely rozpoznávání obličejů (ONNX)",
"ICC Profiles": "Profily ICC",
"Next History Step": "Další krok historie",
"Nikon High Efficiency NEF (HE / HE★) uses intoPIX TicoRAW compression. LightCraft does not currently have a license for this codec, so only the camera's embedded JPEG preview is available, not the raw sensor data. To edit raw data, shoot Lossless compressed NEF or convert existing HE files to DNG using a licensed converter.": "Nikon High Efficiency NEF (HE / HE★) používá kompresi intoPIX TicoRAW. LightCraft pro tento kodek v současnosti nemá licenci, takže je k dispozici pouze vložený náhled JPEG z fotoaparátu, nikoli data RAW ze snímače. Chcete-li upravovat data RAW, fotografujte do bezeztrátově komprimovaného NEF nebo převeďte stávající soubory HE do DNG pomocí licencovaného převodníku.",
"Open Original in Other Editor (RAW, no copy)": "Otevřít originál v jiném editoru (RAW, bez kopie)",
"Photo Above": "Fotografie nad aktuální",
"Photo Below": "Fotografie pod aktuální",
"Previous History Step": "Předchozí krok historie",
"Select Only Active Photo": "Vybrat pouze aktivní fotografii",
"Show this wheel's effect": "Zobrazit účinek tohoto barevného kruhu",
"Targeted adjustment on: drag up or down on the photo · Esc to stop": "Cílená úprava je zapnutá: táhněte po fotografii nahoru nebo dolů · Esc ukončí úpravu",
"To hand this editor the original file itself instead (the raw, without a copy: DxO PhotoLab, for example), right-click a photo → Edit In → Open Original in Other Editor (RAW, no copy).": "Chcete-li tomuto editoru předat přímo původní soubor (RAW bez kopie, například pro DxO PhotoLab), klikněte pravým tlačítkem na fotografii → Upravit v → Otevřít originál v jiném editoru (RAW, bez kopie).",
"A slide stays up for its duration, its fade in included. A fade of 0 cuts.": "Snímek se zobrazuje po nastavenou dobu včetně úvodního prolnutí. Prolnutí o délce 0 znamená střih.",
"Add Print Cell": "Přidat tiskovou buňku",
"Add a cell": "Přidat buňku",
"Also the masks of the same name on the other selected photos": "Také masky se stejným názvem na ostatních vybraných fotografiích",
"Apply Mask Effect": "Použít efekt masky",
"Apply Print Template": "Použít tiskovou šablonu",
"Apply Slideshow Template": "Použít šablonu prezentace",
"Apply to All Masks": "Použít na všechny masky",
"Arrange Print Cell": "Změnit pořadí tiskové buňky",
"Auto Layout": "Automaticky rozmístit",
"Choose Layout Image…": "Vybrat obrázek rozložení…",
"Choose a group": "Vyberte skupinu",
"Choose at least one setting to include": "Vyberte alespoň jedno nastavení, které chcete zahrnout",
"Clear Print Layout": "Vyprázdnit tiskové rozložení",
"Click a cell to move, resize or arrange it": "Kliknutím vyberte buňku, kterou chcete přesunout, změnit její velikost nebo pořadí",
"Color wheel": "Barevný kruh",
"Combine with the existing person": "Sloučit s existující osobou",
"Copy Settings…": "Kopírovat nastavení…",
"Curve channel": "Kanál křivky",
"Cycle Flag": "Přepnout příznak",
"Decrease Flag Status": "Snížit stav příznaku",
"Delete Cell": "Odstranit buňku",
"Delete Mask Effect": "Odstranit efekt masky",
"Delete Print Cell": "Odstranit tiskovou buňku",
"Delete Print Template": "Odstranit tiskovou šablonu",
"Delete Slideshow Template": "Odstranit šablonu prezentace",
"Delete…": "Odstranit…",
"Duplicate Mask Effect": "Duplikovat efekt masky",
"Export Effect Presets": "Exportovat přednastavení efektů",
"Export Mask Effects": "Exportovat efekty masek",
"Face Models on the GPU": "Modely rozpoznávání obličejů na GPU",
"Fade": "Prolnutí",
"Fade duration": "Délka prolnutí",
"Favorite": "Oblíbené",
"Favorite Mask Effect": "Přidat efekt masky mezi oblíbené",
"Filters": "Filtry",
"Group (optional)": "Skupina (nepovinná)",
"Highlighted: sliders this mask changes. Sliders left out stay as they are when the preset is applied.": "Zvýrazněné jsou posuvníky, které tato maska mění. Nezahrnuté posuvníky si při použití přednastavení ponechají své hodnoty.",
"Import Mask Effects": "Importovat efekty masek",
"Import Slideshow Template": "Importovat šablonu prezentace",
"Include Amount": "Zahrnout míru",
"Include brush size, feather and flow": "Zahrnout velikost štětce, prolnutí okrajů a tok",
"Increase Flag Status": "Zvýšit stav příznaku",
"LightCraft Effect Presets": "Přednastavení efektů LightCraft",
"Manage Presets…": "Spravovat přednastavení…",
"Managed by Printer (Adobe RGB)": "Spravováno tiskárnou (Adobe RGB)",
"Managed by Printer (sRGB)": "Spravováno tiskárnou (sRGB)",
"Mask": "Maska",
"Mask Effect Presets": "Přednastavení efektů masek",
"Masks keep their sliders. Export presets first to keep a copy.": "Masky si ponechají hodnoty svých posuvníků. Chcete-li si ponechat kopii přednastavení, nejprve je exportujte.",
"Move Mask Effect to Group": "Přesunout efekt masky do skupiny",
"Move Print Cell": "Přesunout tiskovou buňku",
"Move Print Cell to Page": "Přesunout tiskovou buňku na stránku",
"Move to Group…": "Přesunout do skupiny…",
"Name the preset": "Pojmenujte přednastavení",
"New Print Page": "Přidat tiskovou stránku",
"New group — Return": "Nová skupina — Return",
"New spot (Return adds it here)": "Nová retušovaná oblast (Return ji zde přidá)",
"Next page": "Další stránka",
"No Matte": "Bez ztmavení",
"No change": "Beze změny",
"No effect matches": "Žádný odpovídající efekt",
"No effect presets yet": "Zatím žádná přednastavení efektů",
"One photo fills each page inside the margins.": "Každou stránku uvnitř okrajů vyplní jedna fotografie.",
"Overlay color": "Barva překrytí",
"Page": "Stránka",
"Page Options": "Možnosti stránky",
"Previous page": "Předchozí stránka",
"Print Settings": "Nastavení tisku",
"Print Templates": "Tiskové šablony",
"Print to PDF": "Tisknout do PDF",
"Read Focus Points in the Background": "Načíst zaostřovací body na pozadí",
"Recheck Preview-Only Raws": "Znovu zkontrolovat soubory RAW dostupné jen jako náhled",
"Remove region": "Odebrat oblast",
"Rename Mask Effect": "Přejmenovat efekt masky",
"Rename Mask Effect Group": "Přejmenovat skupinu efektů masek",
"Rename Person…": "Přejmenovat osobu…",
"Rename Slideshow Template": "Přejmenovat šablonu prezentace",
"Renders the next slides while the current one is up, so fades never wait. Off: each slide renders when it is due (less memory and work).": "Další snímky se vykreslují během zobrazení aktuálního, takže prolnutí nikdy nečeká. Vypnuto: každý snímek se vykreslí, až na něj přijde řada (nižší spotřeba paměti a méně výpočtů).",
"Reset Print Settings": "Obnovit nastavení tisku",
"Reset Sliders": "Obnovit posuvníky",
"Resize Print Cell": "Změnit velikost tiskové buňky",
"Resize region": "Změnit velikost oblasti",
"Save Current Settings as New Preset…": "Uložit aktuální nastavení jako nové přednastavení…",
"Save Mask Effect": "Uložit efekt masky",
"Save Print Template": "Uložit tiskovou šablonu",
"Save Slideshow Template": "Uložit šablonu prezentace",
"Search effects": "Hledat efekty",
"Select a mask to apply or update presets.": "Vyberte masku, abyste mohli použít nebo aktualizovat přednastavení.",
"Set Effect for New Masks": "Nastavit efekt pro nové masky",
"Set Print Cell Photo": "Nastavit fotografii tiskové buňky",
"Set Print Settings": "Upravit nastavení tisku",
"Show / hide": "Zobrazit / skrýt",
"Show mask": "Zobrazit masku",
"Slide duration": "Délka snímku",
"Slideshow Export Status": "Stav exportu prezentace",
"Slideshow Layout Settings": "Nastavení rozložení prezentace",
"Slideshow Overlay Settings": "Nastavení překrytí prezentace",
"Slideshow Playback Settings": "Nastavení přehrávání prezentace",
"Slideshow Slide Preview": "Náhled snímku prezentace",
"Slideshow Title Settings": "Nastavení titulků prezentace",
"Slideshow in the View menu plays the photos in view from the selected one. These settings are saved with the library.": "Položka Prezentace v nabídce Zobrazení přehraje fotografie v aktuálním zobrazení od vybrané fotografie. Tato nastavení se ukládají s knihovnou.",
"Template name": "Název šablony",
"The layout image can't be shown": "Obrázek rozložení nelze zobrazit",
"This page setup is not valid": "Toto nastavení stránky není platné",
"Thumbnail size": "Velikost miniatur",
"Title bar": "Záhlaví okna",
"Tool Overlay": "Překrytí nástroje",
"Ungrouped": "Bez skupiny",
"Unknown date": "Neznámé datum",
"Unnamed face": "Nepojmenovaný obličej",
"Update Mask Effect": "Aktualizovat efekt masky",
"Update Slideshow Template": "Aktualizovat šablonu prezentace",
"When pins show on the photo (Shift+H cycles)": "Kdy se na fotografii zobrazují body (Shift+H přepíná)",
"Write Waiting XMP Sidecars": "Zapsat čekající přidružené soubory XMP",
"cells": "× buňka",
"cells overlap": "buňky se překrývají",
"current edits": "aktuální úpravy",
"size": "velikost",
"source": "zdroj",
"★ Favorites": "★ Oblíbené",
"Rename Person": "Přejmenovat osobu",
"Increase Grid Thumbnail Size": "Zvětšit miniatury v mřížce",
"Decrease Grid Thumbnail Size": "Zmenšit miniatury v mřížce",
"Cycle Tool Overlay": "Přepnout překrytí nástroje",
"Show Layout Image": "Zobrazit obrázek rozložení",
"Layout Image Opacity": "Krytí obrázku rozložení",
"Layout Image Matte": "Ztmavení kolem obrázku rozložení",
"Slideshow Options…": "Možnosti prezentace…",
"Pause / Resume Slideshow": "Pozastavit / obnovit prezentaci",
"Next Slide": "Další snímek",
"Previous Slide": "Předchozí snímek",
"End Slideshow": "Ukončit prezentaci",
"Save Current Settings as New Effect Preset…": "Uložit aktuální nastavení jako nové přednastavení efektu…",
"Manage Effect Presets…": "Spravovat přednastavení efektů…",
"Export Effect Presets…": "Exportovat přednastavení efektů…"
}
+49 -49
View File
@@ -245,55 +245,55 @@
"{n} added to Apple Photos album “{album}”": "Aggiunte all'album “{album}” di Foto di Apple: {n}",
"{n} added to Apple Photos": "Aggiunte a Foto di Apple: {n}",
"{n} photos opened for editing; each is stacked with its original": "{n} foto aperte per la modifica; ciascuna è in pila con il suo originale",
"{missing} originals are missing. Their catalog records are available; use Find Missing Photos to relink them.": "{missing} originals are missing. Their catalog records are available; use Find Missing Photos to relink them.",
"{name} opened in the other editor": "{name} opened in the other editor",
"{s} s of AV1 video": "{s} s of AV1 video",
"Delete {n} effect preset{}? This can't be undone.": "Delete {n} effect preset{}? This can't be undone.",
"{count} more warnings.": "{count} more warnings.",
"· {in_source} identical copies": "· {in_source} identical copies",
"{what} merge added at {mp}, the largest a panorama can be (its full size is {full})": "{what} merge added at {mp}, the largest a panorama can be (its full size is {full})",
"{n} preset{}": "{n} preset{}",
" — kept but not applied: {}": " — kept but not applied: {}",
"{what} merge added at {mp}: its full size, {full}, needs more memory than this computer has": "{what} merge added at {mp}: its full size, {full}, needs more memory than this computer has",
"Saved template {name}": "Saved template {name}",
"LightCraft stopped unexpectedly: {e}": "LightCraft stopped unexpectedly: {e}",
"Renames {n} face{} across the library. The files are not changed.": "Renames {n} face{} across the library. The files are not changed.",
" · {n} skipped (could not be rendered)": " · {n} skipped (could not be rendered)",
"Delete “{name}”?": "Delete “{name}”?",
"Keywords of {n} selected photos": "Keywords of {n} selected photos",
"new, inside {parent}": "new, inside {parent}",
"Delete these {n} effect presets?": "Delete these {n} effect presets?",
"{missing} originals are missing. Their catalog records are available; use Find Missing Photos to relink them.": "Originali mancanti: {missing}. I loro dati nel catalogo sono disponibili; usa Trova foto mancanti per ricollegarli.",
"{name} opened in the other editor": "{name} aperto nell'altro editor",
"{s} s of AV1 video": "{s} s di video AV1",
"Delete {n} effect preset{}? This can't be undone.": "Eliminare i preset effetto ({n})?{:.0} L'operazione non si può annullare.",
"{count} more warnings.": "Altri avvisi: {count}.",
"· {in_source} identical copies": "· copie identiche: {in_source}",
"{what} merge added at {mp}, the largest a panorama can be (its full size is {full})": "Unione {what} aggiunta a {mp}, la dimensione massima di un panorama (la dimensione piena è {full})",
"{n} preset{}": "Preset: {n}{:.0}",
" — kept but not applied: {}": " — conservati ma non applicati: {}",
"{what} merge added at {mp}: its full size, {full}, needs more memory than this computer has": "Unione {what} aggiunta a {mp}: la dimensione piena, {full}, richiede più memoria di quella disponibile su questo computer",
"Saved template {name}": "Modello {name} salvato",
"LightCraft stopped unexpectedly: {e}": "LightCraft si è chiuso in modo imprevisto: {e}",
"Renames {n} face{} across the library. The files are not changed.": "Rinomina i volti in tutta la libreria ({n}){:.0}. I file non vengono modificati.",
" · {n} skipped (could not be rendered)": " · saltate: {n} (non è stato possibile eseguire il rendering)",
"Delete “{name}”?": "Eliminare “{name}”?",
"Keywords of {n} selected photos": "Parole chiave delle foto selezionate: {n}",
"new, inside {parent}": "nuova, dentro {parent}",
"Delete these {n} effect presets?": "Eliminare questi preset effetto ({n})?",
"Imported {e} mask effect{} (Masking ▸ Effect)": "Imported {e} mask effect{} (Masking → Effect)",
"{photos} catalog records processed; {collections} collections.": "{photos} catalog records processed; {collections} collections.",
"Skipped {problem}": "Skipped {problem}",
"Updated {name}": "Updated {name}",
"The XMP sidecars of {n} photos couldn't be written (is their folder offline?). LightCraft keeps trying.": "The XMP sidecars of {n} photos couldn't be written (is their folder offline?). LightCraft keeps trying.",
"Apply to “{mask}” on Selected Photos": "Apply to “{mask}” on Selected Photos",
"Update “{name}” with Current Settings": "Update “{name}” with Current Settings",
"Slideshow exported: {what}": "Slideshow exported: {what}",
"Exported to {path}": "Exported to {path}",
"…and {more} more": "…and {more} more",
"Create the keyword “{name}”": "Create the keyword “{name}”",
"{n} JPEG files": "{n} JPEG files",
"Exported {} effect preset{}": "Exported {} effect preset{}",
"Imported {name}": "Imported {name}",
"{n} pages": "{n} pages",
" · kept, not applied: {}": " · kept, not applied: {}",
"Delete the effect preset “{name}”?": "Delete the effect preset “{name}”?",
"{n} raws can now be developed from their raw data": "{n} raws can now be developed from their raw data",
"{photos} catalog records processed; {collections} collections.": "Record del catalogo elaborati: {photos}; raccolte: {collections}.",
"Skipped {problem}": "Saltato: {problem}",
"Updated {name}": "{name} aggiornato",
"The XMP sidecars of {n} photos couldn't be written (is their folder offline?). LightCraft keeps trying.": "Non è stato possibile scrivere i file XMP di alcune foto ({n}): la loro cartella è scollegata? LightCraft continua a riprovare.",
"Apply to “{mask}” on Selected Photos": "Applica a “{mask}” sulle foto selezionate",
"Update “{name}” with Current Settings": "Aggiorna “{name}” con le impostazioni attuali",
"Slideshow exported: {what}": "Presentazione esportata: {what}",
"Exported to {path}": "Esportato in {path}",
"…and {more} more": "…e altri {more}",
"Create the keyword “{name}”": "Crea la parola chiave “{name}”",
"{n} JPEG files": "File JPEG: {n}",
"Exported {} effect preset{}": "Preset effetto esportati: {}{:.0}",
"Imported {name}": "{name} importato",
"{n} pages": "Pagine: {n}",
" · kept, not applied: {}": " · conservato, non applicato: {}",
"Delete the effect preset “{name}”?": "Eliminare il preset effetto “{name}”?",
"{n} raws can now be developed from their raw data": "Raw che ora si possono sviluppare dai loro dati raw: {n}",
"Removed “{name}” from {n} photos. Edit ▸ Undo puts it back.": "Removed “{name}” from {n} photos. Edit → Undo puts it back.",
"Template preview: {name}": "Template preview: {name}",
"{n} photos in view · {slides} slides · {time}": "{n} photos in view · {slides} slides · {time}",
"Applied {name}": "Applied {name}",
"“{to}” is already a person. Combining them makes one person; Undo separates them again.": "“{to}” is already a person. Combining them makes one person; Undo separates them again.",
"{n} originals opened in the other editor": "{n} originals opened in the other editor",
"LightCraft stopped unexpectedly: {e}\n\nThe log file has the details: {path}": "LightCraft stopped unexpectedly: {e}\n\nThe log file has the details: {path}",
"Effect: {name}": "Effect: {name}",
" in {g} group{}": " in {g} group{}",
"Color space: Rec. 2020 {curve} (HDR AVIF)": "Color space: Rec. 2020 {curve} (HDR AVIF)",
"{n} selected photos · {pages} pages": "{n} selected photos · {pages} pages",
"Already in “{}”": "Already in “{}”",
"Move {n} photo{} to “{}”": "Move {n} photo{} to “{}”",
"Move {n} photo{} to “{}”?": "Move {n} photo{} to “{}”?",
"Moved {n} photo{} to “{}”. Edit → Undo moves them back.": "Moved {n} photo{} to “{}”. Edit → Undo moves them back."
"Template preview: {name}": "Anteprima del modello: {name}",
"{n} photos in view · {slides} slides · {time}": "Foto nella vista: {n} · diapositive: {slides} · {time}",
"Applied {name}": "{name} applicato",
"“{to}” is already a person. Combining them makes one person; Undo separates them again.": "“{to}” è già una persona. Unirle ne crea una sola; Annulla le separa di nuovo.",
"{n} originals opened in the other editor": "Originali aperti nell'altro editor: {n}",
"LightCraft stopped unexpectedly: {e}\n\nThe log file has the details: {path}": "LightCraft si è chiuso in modo imprevisto: {e}\n\nI dettagli sono nel file di log: {path}",
"Effect: {name}": "Effetto: {name}",
" in {g} group{}": " in gruppi: {g}{:.0}",
"Color space: Rec. 2020 {curve} (HDR AVIF)": "Spazio colore: Rec. 2020 {curve} (AVIF HDR)",
"{n} selected photos · {pages} pages": "Foto selezionate: {n} · pagine: {pages}",
"Already in “{}”": "Già in “{}”",
"Move {n} photo{} to “{}”": "Sposta foto in “{1}” ({n}){0:.0}",
"Move {n} photo{} to “{}”?": "Spostare le foto in “{1}” ({n})?{0:.0}",
"Moved {n} photo{} to “{}”. Edit → Undo moves them back.": "Foto spostate in “{1}”: {n}{0:.0}. Modifica → Annulla le riporta indietro."
}
+352 -8
View File
@@ -8,11 +8,13 @@
"+ Rule": "+ Regola",
"0: nothing is rejected.": "0: non viene scartato niente.",
"1 day": "1 giorno",
"150 dpi · sRGB · current edits · fit without cropping": "150 dpi · sRGB · modifiche attuali · adatta senza ritagliare",
"2026-04 or 2026-04-12": "2026-04 oppure 2026-04-12",
"= exactly": "= esattamente",
"A blank template keeps the original names.": "Un modello vuoto mantiene i nomi originali.",
"A filter is hiding this view's photos: change it, or clear it (View → Clear Filters)": "Un filtro nasconde le foto di questa vista: cambialo o toglilo (Visualizza → Cancella filtri)",
"A one-time download of about": "Un download unico di circa",
"A pen's pressure sets the size and flow of the brush": "La pressione della penna regola dimensione e flusso del pennello",
"AI Mask Model Status": "Stato del modello IA per le maschere",
"About": "Informazioni",
"About LightCraft": "Informazioni su LightCraft",
@@ -38,6 +40,9 @@
"Add to Favorites": "Aggiungi ai preferiti",
"Add to Local": "Aggiungi a Locale",
"Add to My Photos": "Aggiungi a Le mie foto",
"Can't be moved here": "Non si possono spostare qui",
"This row covers more than one disk: drop on a folder inside it": "Questa riga comprende più di un disco: rilascia su una cartella al suo interno",
"Local photos aren't in the library yet: Add to My Photos first, then move them": "Le foto locali non sono ancora nella libreria: prima Aggiungi a Le mie foto, poi spostale",
"Add to Selected Photos": "Aggiungi alle foto selezionate",
"Add to Target Album": "Aggiungi all'album di destinazione",
"Add to this mask": "Aggiungi a questa maschera",
@@ -153,7 +158,7 @@
"Blue channel": "Canale blu",
"Blue label": "Etichetta blu",
"Blue/Yellow Fringe": "Frange blu/gialle",
"Blurry photos below the score are flagged as rejects.": "Le foto mosse sotto il punteggio vengono contrassegnate come scartate.",
"Blurry photos below the score are flagged as rejects.": "Le foto sfocate sotto il punteggio vengono contrassegnate come scartate.",
"Boundary Warp": "Deformazione dei bordi",
"Bright & Airy": "Luminoso e arioso",
"Bring All to Front": "Porta tutto in primo piano",
@@ -198,6 +203,7 @@
"Choose Edit Settings to Copy": "Scegli le impostazioni di modifica da copiare",
"Choose Edit Settings to Copy…": "Scegli le impostazioni di modifica da copiare…",
"Choose Folder…": "Scegli cartella…",
"Choose a PDF destination after confirming. Print the PDF from your viewer.": "Scegli dove salvare il PDF dopo la conferma. Stampa il PDF dal tuo visualizzatore.",
"Choose a photo in the grid or filmstrip": "Scegli una foto nella griglia o nella striscia",
"Choose…": "Scegli…",
"Cinematic": "Cinematografico",
@@ -248,6 +254,9 @@
"Color Range": "Intervallo colori",
"Color label cleared": "Etichetta colore tolta",
"Color space": "Spazio colore",
"Color space: Rec. 2020 PQ (HDR AVIF)": "Spazio colore: Rec. 2020 PQ (AVIF HDR)",
"Color space: Rec. 2020 PQ (HDR JPEG XL)": "Spazio colore: Rec. 2020 PQ (JPEG XL HDR)",
"Color space: Rec. 2020 PQ, 16-bit (HDR PNG)": "Spazio colore: Rec. 2020 PQ, 16 bit (PNG HDR)",
"Color space: sRGB (AVIF)": "Spazio colore: sRGB (AVIF)",
"Colors": "Colori",
"Combine files…": "Combina file…",
@@ -264,7 +273,14 @@
"Concrete Cool": "Cemento freddo",
"Confirm before deleting": "Chiedi conferma prima di eliminare",
"Confirm before moving photos to Recently Deleted": "Chiedi conferma prima di spostare le foto in Eliminate di recente",
"Move Photos": "Sposta foto",
"Their files and XMP sidecars move on disk. Edit → Undo moves them back.": "I loro file e i file XMP collegati vengono spostati sul disco. Modifica → Annulla li riporta indietro.",
"Don't ask again": "Non chiedere più",
"Another library was opened since the photos were dropped: nothing was moved": "Dopo il trascinamento delle foto è stata aperta un'altra libreria: non è stato spostato nulla",
"Settings → Confirm before moving photos to another folder on disk turns it back on": "Impostazioni → Chiedi conferma prima di spostare le foto in un'altra cartella sul disco la riattiva",
"Confirm before moving photos to another folder on disk": "Chiedi conferma prima di spostare le foto in un'altra cartella sul disco",
"Constrain Crop": "Vincola il ritaglio",
"Contact Sheet PDF": "PDF provino a contatto",
"Continue": "Continua",
"Continue Without Saving": "Continua senza salvare",
"Contrast": "Contrasto",
@@ -457,7 +473,7 @@
"Export Now": "Esporta ora",
"Export Point Curve Presets": "Esporta preset di curva a punti",
"Export Point Curve Presets…": "Esporta preset di curva a punti…",
"Export Presets": "Esporta predefiniti",
"Export Presets": "Esporta preset",
"Export Presets…": "Esporta preset…",
"Export User Presets…": "Esporta preset utente…",
"Export stopped unexpectedly": "L'esportazione si è interrotta in modo imprevisto",
@@ -465,7 +481,7 @@
"Export with Previous": "Esporta con le impostazioni precedenti",
"Exporting": "Esportazione in corso",
"Export…": "Esporta…",
"Exposure": "Tempo di esposizione",
"Exposure": "Esposizione",
"Exposure (shutter · aperture · ISO)": "Esposizione (tempo · diaframma · ISO)",
"Extended Description": "Descrizione estesa",
"External Editor": "Editor esterno",
@@ -489,6 +505,7 @@
"File name": "Nome file",
"File types:": "Tipi di file:",
"Filename": "Nome file",
"Filename captions": "Didascalie con il nome del file",
"Fill": "Riempi",
"Fill Edges": "Riempi i bordi",
"Film": "Pellicola",
@@ -548,6 +565,10 @@
"Friday": "Venerdì",
"Full": "Completo",
"Full Screen Preview": "Anteprima a schermo intero",
"Hold View Until Refreshed": "Mantieni la vista fino all'aggiornamento",
"HDR TIFF needs 32-bit float.": "Il TIFF HDR richiede virgola mobile a 32 bit.",
"HDR output": "Uscita HDR",
"Letter": "Lettera",
"Lights Out": "Luci spente",
"Full screen mode": "Modalità schermo intero",
"Full size": "Dimensione piena",
@@ -603,6 +624,7 @@
"HDR panorama": "Panorama HDR",
"HDR panoramas": "Panorami HDR",
"HDR with Last Settings": "HDR con le ultime impostazioni",
"HDR for Each Bracket Set": "HDR per ogni serie a forcella",
"HDR…": "HDR…",
"Has Edits": "Con modifiche",
"Has GPS": "Con GPS",
@@ -646,7 +668,7 @@
"Import Photos…": "Importa foto…",
"Import Point Curve Presets": "Importa preset di curva a punti",
"Import Point Curve Presets…": "Importa preset di curva a punti…",
"Import Presets": "Importa predefiniti",
"Import Presets": "Importa preset",
"Import Presets…": "Importa preset…",
"Import Profiles": "Importa profili",
"Import Profiles & Presets…": "Importa profili e preset…",
@@ -764,6 +786,7 @@
"Local folders": "Cartelle locali",
"Local library — no cloud account needed": "Libreria locale: non serve un account cloud",
"Locate Missing File…": "Trova file mancante…",
"Locate Missing Files…": "Individua file mancanti…",
"Locate Photo": "Trova foto",
"Location": "Posizione",
"Lock": "Blocca",
@@ -900,7 +923,12 @@
"No edits yet.": "Ancora nessuna modifica.",
"No exposure information": "Nessuna informazione di esposizione",
"No filter presets yet": "Ancora nessun preset di filtro",
"No lens data embedded in this file.": "Questo file non contiene dati dell'obiettivo.",
"No lens data embedded in this file (DNG lens opcodes only).": "In questo file non ci sono dati dell'obiettivo (solo opcode obiettivo DNG).",
"Export to": "Esporta in",
"Specific folder": "Cartella specifica",
"Same folder as original photo": "Stessa cartella della foto originale",
"Tidying the thumbnail cache": "Riordino della cache delle miniature",
"No masks yet. Choose a mask type above.": "Ancora nessuna maschera. Scegli un tipo di maschera qui sopra.",
"No matching commands": "Nessun comando corrispondente",
"No matching photos": "Nessuna foto corrispondente",
@@ -911,6 +939,11 @@
"No new presets": "Nessun nuovo preset",
"No photo selected": "Nessuna foto selezionata",
"No photos": "Nessuna foto",
"Your library is empty": "La tua libreria è vuota",
"Photos you import show up here. Nothing is copied or moved unless you choose to.": "Le foto che importi compaiono qui. Nulla viene copiato o spostato, a meno che tu non lo scelga.",
"or drop photos and folders into this window": "oppure trascina foto e cartelle in questa finestra",
"Import photos to get started": "Importa delle foto per iniziare",
"or drop photos into this window": "oppure trascina foto in questa finestra",
"No photos found": "Nessuna foto trovata",
"No photos in this folder": "Nessuna foto in questa cartella",
"No photos match the active filters": "Nessuna foto corrisponde ai filtri attivi",
@@ -986,6 +1019,7 @@
"Paste from Previous": "Incolla dalla precedente",
"Paste pages": "Incolla pagine",
"Pastel Haze": "Foschia pastello",
"Pen Pressure": "Pressione della penna",
"People": "Persone",
"Percent": "Percentuale",
"Percentage": "Percentuale",
@@ -1000,6 +1034,7 @@
"Photo Merge": "Unione di foto",
"Photo ▸ Edit in External Editor (⇧⌘E) renders a 16-bit TIFF copy, stacks it with the original and opens it here (an app name on macOS, a program path elsewhere).": "Foto → Modifica nell'editor esterno (⇧⌘E) genera una copia TIFF a 16 bit, la mette in pila con l'originale e la apre qui (il nome di un'app su macOS, il percorso di un programma altrove).",
"Photos": "Foto",
"Photos edited in HDR: JPEG with an HDR gain map (looks right everywhere, brighter highlights on HDR displays), AVIF as 10-bit, PNG and JPEG XL as 16-bit Rec. 2020 PQ; TIFF needs 32-bit float": "Foto modificate in HDR: JPEG con gain map HDR (si vede bene ovunque, luci più brillanti sugli schermi HDR), AVIF a 10 bit, PNG e JPEG XL a 16 bit Rec. 2020 PQ; il TIFF richiede virgola mobile a 32 bit",
"Photos per bracket (0 = auto)": "Foto per bracketing (0 = automatico)",
"Photos seen in Local but never added or changed leave the catalog when their folder hasn't been browsed for this long (checked when the library opens). Files stay on disk; browsing the folder shows them again.": "Le foto viste in Locale ma mai aggiunte o modificate escono dal catalogo quando la loro cartella non viene sfogliata da questo tempo (controllo all'apertura della libreria). I file restano sul disco; sfogliando la cartella ricompaiono.",
"Photos that arrive in this folder (tethering, a scanner, a sync app) are added as soon as they're complete.": "Le foto che arrivano in questa cartella (scatto collegato, scanner, app di sincronizzazione) vengono aggiunte appena sono complete.",
@@ -1020,9 +1055,9 @@
"Preferences": "Preferenze",
"Preferences…": "Preferenze…",
"Prepare AI Masks": "Prepara le maschere IA",
"Preset": "Predefinito",
"Preset": "Preset",
"Preset name": "Nome del preset",
"Presets": "Predefiniti",
"Presets": "Preset",
"Presets & Profiles": "Preset e profili",
"Presets (Shift+P)": "Preset (Maiusc+P)",
"Presets and profiles": "Preset e profili",
@@ -1123,6 +1158,7 @@
"Refining the mask's detail…": "Rifinitura del dettaglio della maschera…",
"Refresh Source": "Aggiorna l'origine",
"Refresh Source (/)": "Aggiorna l'origine (/)",
"Refresh View": "Aggiorna vista",
"Reject": "Scarta",
"Reject below focus": "Scarta sotto la soglia di messa a fuoco",
"Rejected": "Rifiutato",
@@ -1188,7 +1224,30 @@
"Reset Section": "Reimposta sezione",
"Reset Tone Curve": "Reimposta curva dei toni",
"Reset all curves: point curves (all channels) and parametric (double-click a channel to reset only that one)": "Reimposta tutte le curve: curve a punti (tutti i canali) e parametrica (doppio clic su un canale per reimpostare solo quello)",
"Reset all edits": "Ripristina tutte le modifiche",
"Reset all edits (Cmd+Shift+R)": "Reimposta tutte le modifiche (Cmd+Maiusc+R)",
"Smart albums update automatically: change their rules, or use Photo ▸ Delete Photo": "Gli album smart si aggiornano da soli: cambia le loro regole, oppure usa Foto → Elimina foto",
"LightCraft stopped": "LightCraft si è chiuso",
"Show Focus Point": "Mostra punto di messa a fuoco",
"Zoom to Focus Point": "Zoom sul punto di messa a fuoco",
"Focus": "Messa a fuoco",
"Focus point": "Punto di messa a fuoco",
"Wide": "Ampio",
"Center": "Centro",
"Flexible Spot": "Spot flessibile",
"Zone": "Zona",
"Expanded Flexible Spot": "Spot flessibile espanso",
"Custom AF Area": "Area AF personalizzata",
"Face tracking": "Tracciamento volti",
"Lock On AF": "AF con aggancio",
"Multi": "Multi",
"Spot": "Spot",
"Tracking": "Tracciamento",
"Face Tracking": "Tracciamento volti",
"Animal Eye Tracking": "Tracciamento occhi degli animali",
"Human Eye Tracking": "Tracciamento occhi umani",
"Read Focus Points": "Leggi punti di messa a fuoco",
"Reading focus points": "Lettura dei punti di messa a fuoco",
"Reshuffle": "Rimescola",
"Resize Face Box": "Ridimensiona riquadro del volto",
"Resize panel window": "Ridimensiona la finestra del pannello",
@@ -1314,7 +1373,7 @@
"Shadows Tint": "Tinta delle ombre",
"Shadows split": "Divisione delle ombre",
"Sharpen": "Nitidezza",
"Sharpening": "Contrasto",
"Sharpening": "Nitidezza",
"Sharpness": "Nitidezza",
"Shift": "Maiusc",
"Shift by": "Sposta di",
@@ -1327,6 +1386,8 @@
"Show Luminance Map": "Mostra mappa di luminanza",
"Show Mask": "Mostra maschera",
"Show Mask Overlay": "Mostra sovrapposizione maschera",
"Show All Mask Overlays": "Mostra tutte le sovrapposizioni maschera",
"Show all overlays": "Mostra tutte le sovrapposizioni",
"Show Mask Pins": "Mostra i punti delle maschere",
"Show Original": "Mostra originale",
"Show Photo Counts": "Mostra il numero di foto",
@@ -1345,6 +1406,7 @@
"Show overlay (O)": "Mostra sovrapposizione (O)",
"Show ratings, flags and edit badges": "Mostra valutazioni, contrassegni e indicatori di modifica",
"Show the Navigator while zoomed in": "Mostra il Navigatore quando lo zoom è attivo",
"Show the import review when a camera or card is connected": "Mostra la revisione dell'importazione quando si collega una fotocamera o una scheda",
"Show the template tags; click one to insert it": "Mostra i tag del modello; fai clic su uno per inserirlo",
"Show/Hide Mask": "Mostra/nascondi maschera",
"Show/hide My Photos panel": "Mostra/nascondi il pannello Le mie foto",
@@ -1372,6 +1434,7 @@
"Soft Pastel": "Pastello morbido",
"Soft Proofing": "Prova colore a video",
"Soft Skin": "Pelle morbida",
"Solo Mode": "Un pannello alla volta",
"Sort": "Ordina",
"Sort by": "Ordina per",
"Source": "Origine",
@@ -1518,6 +1581,7 @@
"Vibrance": "Vividezza",
"Videos": "Video",
"View": "Visualizza",
"Viewers that don't read the PNG cICP chunk show PQ values as sRGB: flat and washed out. For a picture that looks right everywhere, use JPEG (gain map).": "I visualizzatori che non leggono il blocco cICP del PNG mostrano i valori PQ come sRGB: piatti e slavati. Per un'immagine che appaia corretta ovunque, usa JPEG (gain map).",
"Viewing and sharing": "Visione e condivisione",
"Vignette": "Vignettatura",
"Vignetting": "Vignettatura",
@@ -1550,6 +1614,7 @@
"Will be restored": "Verrà ripristinata",
"Window": "Finestra",
"Winter Blue": "Blu d'inverno",
"Wrote the XMP sidecars that were waiting": "Scritti i file XMP che erano in attesa",
"XMP Sidecar Preferences": "Preferenze dei file XMP collaterali",
"XMP sidecars": "File XMP collaterali",
"Year": "Anno",
@@ -1716,6 +1781,8 @@
"cached picture": "immagine in cache",
"cached pictures": "immagini in cache",
"commercial use allowed": "uso commerciale consentito",
"Reading photos…": "Lettura delle foto…",
"Adding photos…": "Aggiunta delle foto…",
"denoiseModel.accept": "denoiseModel.accept",
"in use": "in uso",
"installed": "installato",
@@ -1751,6 +1818,95 @@
"Decrease Rating": "Diminuisci valutazione",
"Increase Rating": "Aumenta valutazione",
"Click to type a value": "Fai clic per scrivere un valore",
"Run face models on the CPU only": "Esegui i modelli dei volti solo sulla CPU",
"Detection": "Rilevamento",
"Recognition": "Riconoscimento",
"Not loaded yet": "Non ancora caricato",
"Checking the GPU…": "Controllo della GPU…",
"CPU": "CPU",
"A face model uses the GPU only when a check shows it gives the same results faster.": "Un modello per i volti usa la GPU solo quando un controllo mostra che dà gli stessi risultati più velocemente.",
"Checking the GPU for faces": "Controllo della GPU per i volti",
"Include selected photos": "Includi le foto selezionate",
"Choose Profile…": "Scegli profilo…",
"Edit in HDR: highlights above SDR white, for HDR exports and displays": "Modifica in HDR: luci oltre il bianco SDR, per esportazioni e schermi HDR",
"Edit in Other Editor": "Modifica nell'altro editor",
"Edit in Other Editor (⌥⌘E) opens the copy in this application (an app name on macOS, a program path elsewhere).": "Modifica nell'altro editor (⌥⌘E) apre la copia in questa applicazione (il nome di un'app su macOS, il percorso di un programma altrove).",
"Edit in PhotoCraft": "Modifica in PhotoCraft",
"External Editing": "Modifica esterna",
"Found automatically": "Trovato automaticamente",
"HDR": "HDR",
"LUT-based": "Basato su LUT",
"Left: the standard (SDR) range up to SDR white. Right: the HDR range, one band per stop above SDR white (the orange line: the HDR headroom). With Visualize HDR range on, the bands take its colours.": "A sinistra: la gamma standard (SDR) fino al bianco SDR. A destra: la gamma HDR, una fascia per ogni stop sopra il bianco SDR (la linea arancione: il margine HDR). Con Visualizza gamma HDR attivo, le fasce ne prendono i colori.",
"Matrix/TRC": "Matrice/TRC",
"Monitor profile": "Profilo monitor",
"None (the display is treated as sRGB)": "Nessuno (lo schermo viene trattato come sRGB)",
"Other editor": "Altro editor",
"Photo ▸ Edit In ▸ Edit in PhotoCraft (⇧⌘E, or right-click a photo) renders a copy with your edits, stacks it with the original and opens it in PhotoCraft. Save there and the copy updates here. As PSD, PhotoCraft saves straight back to it. Leave the location empty unless you use a portable copy.": "Foto → Modifica in → Modifica in PhotoCraft (⇧⌘E, o clic destro su una foto) esegue il rendering di una copia con le tue modifiche, la impila con l'originale e la apre in PhotoCraft. Salva lì e la copia si aggiorna qui. Come PSD, PhotoCraft salva direttamente su di essa. Lascia vuota la posizione a meno che tu non usi una copia portatile.",
"PhotoCraft": "PhotoCraft",
"Photos are shown through your monitor's ICC profile, so colours are right on wide-gamut and calibrated displays, and the Detail view uses the display's whole gamut. The histogram, the preview caches and exports are not affected.": "Le foto vengono mostrate attraverso il profilo ICC del monitor, così i colori sono corretti su schermi calibrati e a gamut esteso, e la vista Dettaglio usa tutto il gamut dello schermo. Istogramma, cache delle anteprime ed esportazioni non cambiano.",
"Photos stay in All Photos. Deleting a folder also deletes its albums. You can undo this.": "Le foto restano in Tutte le foto. Eliminando una cartella si eliminano anche i suoi album. Puoi annullare l'operazione.",
"Primaries (x, y)": "Primari (x, y)",
"Profiles assigned in your desktop's colour settings are usually in ~/.local/share/icc.": "I profili assegnati nelle impostazioni colore del desktop di solito sono in ~/.local/share/icc.",
"Progressive": "Progressivo",
"SDR": "SDR",
"Use Screen Profile": "Usa profilo dello schermo",
"Use sRGB": "Usa sRGB",
"this screen's profile": "il profilo di questo schermo",
"Show photos": "Mostra foto",
"Their photos in the grid": "Le loro foto nella griglia",
"Click to name this face": "Fai clic per dare un nome a questo volto",
"Apple Photos Imports": "Importazioni da Foto di Apple",
"Background Tasks": "Attività in background",
"Cancel Background Task": "Annulla attività in background",
"Contact Sheet PDF…": "PDF provino a contatto…",
"Create Keyword": "Crea parola chiave",
"Display": "Schermo",
"Display Profile": "Profilo dello schermo",
"Edit Keyword": "Modifica parola chiave",
"Export Contact Sheet PDF": "Esporta PDF provino a contatto",
"Find Blemishes": "Trova imperfezioni",
"Keyword Info": "Informazioni parola chiave",
"Move Keyword": "Sposta parola chiave",
"Put New Keywords Inside": "Metti dentro le nuove parole chiave",
"Scan Folder for Changes": "Cerca modifiche nella cartella",
"Set Folder Color Label": "Imposta etichetta colore cartella",
"Remove Folder Color Label": "Rimuovi etichetta colore cartella",
"Show in Compare": "Mostra in Confronto",
"Update to Current Process": "Aggiorna al processo attuale",
"HDR Headroom": "Margine HDR",
"SDR Brightness": "Luminosità SDR",
"SDR Clarity": "Chiarezza SDR",
"SDR Contrast": "Contrasto SDR",
"SDR Highlights": "Luci SDR",
"SDR Shadows": "Ombre SDR",
"SDR Whites": "Bianchi SDR",
"Color space: Rec. 2020 HLG (HDR AVIF)": "Spazio colore: Rec. 2020 HLG (AVIF HDR)",
"or drop a .onnx file on the window": "oppure trascina un file .onnx sulla finestra",
"Already installed. Installing again is harmless.": "Già installato. Installarlo di nuovo non crea problemi.",
"Enter to confirm, Esc to cancel": "Invio per confermare, Esc per annullare",
"Add a model file…": "Aggiungi un file di modello…",
"Open Settings": "Apri impostazioni",
"Select none": "Deseleziona tutto",
"Select all": "Seleziona tutto",
"Visualize HDR": "Visualizza HDR",
"Add a Face Recognition Model": "Aggiungi un modello di riconoscimento dei volti",
"Choose Monitor Profile": "Scegli profilo monitor",
"Display profile not used": "Profilo dello schermo non usato",
"Drag to set hue and saturation. Hold Shift to keep the hue, Cmd/Ctrl to keep the saturation, Alt/Option to fine-adjust. Double-click to reset.": "Trascina per impostare tonalità e saturazione. Tieni premuto Maiusc per mantenere la tonalità, Cmd/Ctrl per mantenere la saturazione, Alt/Opzione per una regolazione fine. Doppio clic per ripristinare.",
"Edit In": "Modifica in",
"Face models (ONNX)": "Modelli dei volti (ONNX)",
"ICC Profiles": "Profili ICC",
"M50, R100 and R8. CR3 files the decoder can't read yet still open from their embedded JPEG, as before.": "M50, R100 e R8. I file CR3 che il decoder non legge ancora si aprono comunque dal JPEG incorporato, come prima.",
"Next History Step": "Passo successivo della cronologia",
"Nikon High Efficiency NEF (HE / HE★) uses intoPIX TicoRAW compression. LightCraft does not currently have a license for this codec, so only the camera's embedded JPEG preview is available, not the raw sensor data. To edit raw data, shoot Lossless compressed NEF or convert existing HE files to DNG using a licensed converter.": "I NEF Nikon ad alta efficienza (HE / HE★) usano la compressione intoPIX TicoRAW. LightCraft al momento non ha una licenza per questo codec, quindi è disponibile solo l'anteprima JPEG incorporata dalla fotocamera, non i dati raw del sensore. Per modificare i dati raw, scatta in NEF compresso senza perdita oppure converti i file HE esistenti in DNG con un convertitore dotato di licenza.",
"Open Original in Other Editor (RAW, no copy)": "Apri l'originale nell'altro editor (RAW, senza copia)",
"Photo Above": "Foto sopra",
"Photo Below": "Foto sotto",
"Previous History Step": "Passo precedente della cronologia",
"Select Only Active Photo": "Seleziona solo la foto attiva",
"Show this wheel's effect": "Mostra l'effetto di questa ruota",
"Targeted adjustment on: drag up or down on the photo · Esc to stop": "Regolazione mirata attiva: trascina in su o in giù sulla foto · Esc per terminare",
"To hand this editor the original file itself instead (the raw, without a copy: DxO PhotoLab, for example), right-click a photo → Edit In → Open Original in Other Editor (RAW, no copy).": "Per passare invece a questo editor il file originale (il raw, senza copia: ad esempio DxO PhotoLab), fai clic destro su una foto → Modifica in → Apri l'originale nell'altro editor (RAW, senza copia).",
"Angle": "Angolo",
"Video": "Video",
"Copyrighted": "Protetta da copyright",
@@ -1814,6 +1970,15 @@
"Keyword List": "Elenco parole chiave",
"Filter Keywords": "Filtra parole chiave",
"No keywords yet": "Ancora nessuna parola chiave",
"Show fewer": "Mostra meno",
"Whole names": "Nomi interi",
"Grouped by parent": "Raggruppate per parola chiave superiore",
"Keywords of the selection": "Parole chiave della selezione",
"Grouped: keywords inside the same keyword share a line naming it, and long lists and the suggestions are shortened.": "Raggruppate: le parole chiave dentro la stessa parola chiave condividono una riga col suo nome, e gli elenchi lunghi e i suggerimenti vengono accorciati.",
"Show every keyword of the selected photos": "Mostra tutte le parole chiave delle foto selezionate",
"new keyword": "nuova parola chiave",
"Return creates this keyword and gives it to the selected photos": "Invio crea questa parola chiave e la assegna alle foto selezionate",
"Separate several keywords with commas. Return gives them to the selected photos.": "Separa più parole chiave con le virgole. Invio le assegna alle foto selezionate.",
"No keywords match": "Nessuna parola chiave corrisponde",
"Keyword Name": "Nome della parola chiave",
"Synonyms": "Sinonimi",
@@ -1953,6 +2118,111 @@
"The first time, macOS asks whether LightCraft may control Photos.": "La prima volta, macOS chiede se LightCraft può controllare Foto.",
"Adding to Apple Photos": "Aggiunta a Foto di Apple",
"Add Face Model…": "Aggiungi modello dei volti…",
"No graphics processor found: LightCraft renders on the CPU, which is much slower. Details in Help → System Info.": "Nessun processore grafico trovato: LightCraft esegue il rendering sulla CPU, molto più lentamente. Dettagli in Aiuto → Info sistema.",
"On NixOS, start it from `nix develop`.": "Su NixOS, avvialo da `nix develop`.",
"Files with the same content as another file in this import: only the first is imported.": "File con lo stesso contenuto di un altro file di questa importazione: viene importato solo il primo.",
"Lightroom Catalog Import": "Importazione catalogo di Lightroom",
"These photos are only in memory. Open a library on disk and import the catalog again to save them.": "Queste foto sono solo in memoria. Apri una libreria su disco e importa di nuovo il catalogo per salvarle.",
"Show in Library": "Mostra nella libreria",
"Lightroom catalogs import into the open library; no separate catalog folder is created.": "I cataloghi di Lightroom vengono importati nella libreria aperta; non viene creata una cartella di catalogo separata.",
"Destination library": "Libreria di destinazione",
"Playback": "Riproduzione",
"Layout": "Layout",
"Link all margins": "Collega tutti i margini",
"Margins": "Margini",
"Left": "Sinistra",
"Right": "Destra",
"Top": "In alto",
"Bottom": "In basso",
"Margins are a share of the slide's shorter side, so slides look the same on any screen.": "I margini sono una frazione del lato corto della diapositiva, così le diapositive appaiono uguali su qualsiasi schermo.",
"Show guides": "Mostra guide",
"Aspect preview": "Anteprima proporzioni",
"Zoom to fill frame": "Ingrandisci per riempire la cornice",
"Stroke border": "Bordo a tratto",
"Colour": "Colore",
"Cast shadow": "Ombra portata",
"Offset": "Spostamento",
"Backdrop": "Fondale",
"Background colour": "Colore di sfondo",
"Colour wash": "Velatura di colore",
"Background image": "Immagine di sfondo",
"(not in the library)": "(non nella libreria)",
"Use selected photo": "Usa la foto selezionata",
"Select a photo, then turn this on to fill the slide behind every photo with it.": "Seleziona una foto, poi attiva questa opzione per riempire con essa lo sfondo dietro ogni foto.",
"Reset layout": "Ripristina layout",
"Select a photo to preview its slide": "Seleziona una foto per vedere l'anteprima della sua diapositiva",
"The selected photo as a slide. Playback fills the screen; the aspect preview only changes this preview.": "La foto selezionata come diapositiva. La riproduzione riempie lo schermo; l'anteprima delle proporzioni cambia solo questa anteprima.",
"Overlays": "Sovrapposizioni",
"Identity plate": "Targa di identità",
"Your name or studio": "Il tuo nome o studio",
"Anchored to": "Ancorato a",
"Slide": "Diapositiva",
"Render behind image": "Disegna dietro l'immagine",
"Rating stars": "Stelle di valutazione",
"Text overlays": "Testi sovrapposti",
"Add text overlay": "Aggiungi testo sovrapposto",
"Tokens: {file}, {name}, {title}, {caption}, {date}, {exposure}, {iso}, {focal}, {camera}, {lens}, {rating}, {creator}, {copyright}. Other text shows as typed.": "Segnaposto: {file}, {name}, {title}, {caption}, {date}, {exposure}, {iso}, {focal}, {camera}, {lens}, {rating}, {creator}, {copyright}. Il resto del testo appare così come lo scrivi.",
"Use export watermark": "Usa la filigrana di esportazione",
"The export watermark, drawn on the photo and sized relative to it.": "La filigrana di esportazione, disegnata sulla foto e dimensionata rispetto a essa.",
"Titles": "Titoli",
"Intro screen": "Schermata iniziale",
"Ending screen": "Schermata finale",
"Shows": "Mostra",
"Colour only": "Solo colore",
"Override colour": "Sostituisci colore",
"Own duration (off: the slide duration)": "Durata propria (disattivata: la durata della diapositiva)",
"Duration": "Durata",
"Title text": "Testo del titolo",
"Intro": "Apertura",
"Ending": "Chiusura",
"End": "Fine",
"The intro plays once before the first photo; the ending after the last photo when Repeat is off. The identity plate is the one set under Overlays. Titles fade like slides and random order never moves them.": "L'apertura viene riprodotta una volta prima della prima foto; la chiusura dopo l'ultima foto, quando Ripeti è disattivato. La targa di identità è quella impostata in Sovrapposizioni. I titoli si dissolvono come le diapositive e l'ordine casuale non li sposta mai.",
"This screen is off: turn it on under Titles to play it.": "Questa schermata è disattivata: attivala in Titoli per riprodurla.",
"The intro screen, before the first photo.": "La schermata iniziale, prima della prima foto.",
"The ending screen, after the last photo.": "La schermata finale, dopo l'ultima foto.",
"Templates": "Modelli",
"Built-in": "Integrati",
"Your templates": "I tuoi modelli",
"None yet: save the current settings as a template below.": "Ancora nessuno: salva le impostazioni attuali come modello qui sotto.",
"Before the last template": "Prima dell'ultimo modello",
"Previous settings": "Impostazioni precedenti",
"New template name": "Nome del nuovo modello",
"Save as Template": "Salva come modello",
"Import…": "Importa…",
"Your own templates need a settings folder, which this build doesn't have; the built-in ones work.": "I tuoi modelli richiedono una cartella delle impostazioni, che questa build non ha; quelli integrati funzionano.",
"Click a template to apply it; point at one to preview it on the selected photo. Right-click your own to update, rename, export or delete it.": "Fai clic su un modello per applicarlo; passaci sopra per vederne l'anteprima sulla foto selezionata. Fai clic destro su uno dei tuoi per aggiornarlo, rinominarlo, esportarlo o eliminarlo.",
"Import Slideshow Templates": "Importa modelli di presentazione",
"Export Slideshow Template": "Esporta modello di presentazione",
"Slideshow Templates": "Modelli di presentazione",
"Plain Black": "Nero pieno",
"Gallery Wall": "Parete da galleria",
"Edge to Edge": "Da bordo a bordo",
"Cinema Wide": "Cinema panoramico",
"Shooting Data": "Dati di scatto",
"Each photo as large as it fits, on black, with a short crossfade. Nothing drawn over it.": "Ogni foto il più grande possibile, su nero, con una breve dissolvenza incrociata. Nulla in sovrimpressione.",
"A light grey wall with a white mat and a soft shadow; the caption and the rating under the photo.": "Una parete grigio chiaro con passe-partout bianco e un'ombra morbida; didascalia e valutazione sotto la foto.",
"Every photo cropped to fill the whole screen, with slow crossfades.": "Ogni foto ritagliata per riempire tutto lo schermo, con dissolvenze incrociate lente.",
"A 16:9 frame with black bars above and below, the title in the corner, fades through black and a closing card.": "Un'inquadratura 16:9 con bande nere sopra e sotto, il titolo nell'angolo, dissolvenze al nero e un cartello finale.",
"A dark slate backdrop with the exposure, ISO and focal length, then the camera and lens, under each photo.": "Uno sfondo ardesia scuro con esposizione, ISO e lunghezza focale, poi fotocamera e obiettivo, sotto ogni foto.",
"Exporting slideshow": "Esportazione della presentazione",
"Export Slideshow…": "Esporta presentazione…",
"Export Slideshow": "Esporta presentazione",
"Export Slideshow: folder for the JPEG files": "Esporta presentazione: cartella per i file JPEG",
"Frame rate": "Fotogrammi al secondo",
"Container": "Contenitore",
"Export PDF…": "Esporta PDF…",
"Export JPEG…": "Esporta JPEG…",
"Export Video…": "Esporta video…",
"Automatically show full screen": "Mostra automaticamente a schermo intero",
"One page per slide (the long side in pixels = points), with the slide duration and fade for the viewer's presentation mode.": "Una pagina per diapositiva (il lato lungo in pixel = punti), con la durata e la dissolvenza della diapositiva per la modalità presentazione del visualizzatore.",
"Numbered JPEG files (name-001.jpg…) in a new folder named in the next step.": "File JPEG numerati (nome-001.jpg…) in una nuova cartella, il cui nome si sceglie al passo successivo.",
"AV1 video, each slide held for its duration with its fades. No sound: music is not exported yet.": "Video AV1, ogni diapositiva per la sua durata con le sue dissolvenze. Senza audio: la musica non viene ancora esportata.",
"Slides use the slideshow's layout, overlays and intro and ending screens, in view order.": "Le diapositive usano layout, sovrapposizioni e schermate iniziale e finale della presentazione, nell'ordine della vista.",
"The photos in view as slides, with the settings above. Progress shows in the activity stack.": "Le foto nella vista come diapositive, con le impostazioni qui sopra. L'avanzamento compare nella pila delle attività.",
"Checking raw files": "Controllo dei file raw",
"1 raw can now be developed from its raw data": "1 raw ora può essere sviluppato dai suoi dati raw",
"This raw is now developed from its raw data": "Questo raw ora viene sviluppato dai suoi dati raw",
"This raw variant still can't be decoded": "Questa variante raw non si può ancora decodificare",
"Cancel Face Model Download": "Annulla il download del modello dei volti",
"Cancel Pending Photo Action": "Annulla l'azione in sospeso sulla foto",
"Choose Face Recognition Model": "Scegli il modello di riconoscimento dei volti",
@@ -1972,6 +2242,7 @@
"Go back to listing them by name": "Torna all'elenco per nome",
"Index Faces": "Indicizza i volti",
"Index Faces in the Background": "Indicizza i volti in background",
"Click to type a value, drag to change it": "Fai clic per digitare un valore, trascina per cambiarlo",
"Inspect Face Model File": "Esamina il file del modello dei volti",
"Install Face Model": "Installa il modello dei volti",
"Library Folders": "Cartelle della libreria",
@@ -1990,5 +2261,78 @@
"Test Face Model": "Testa il modello dei volti",
"This build cannot run recognition models: they can be added and chosen, not used.": "Questa versione non può eseguire modelli di riconoscimento: si possono aggiungere e scegliere, non usare.",
"This build has nowhere to keep face models, so the model list is not available. (The desktop app has.)": "Questa versione non ha dove tenere i modelli dei volti, quindi l'elenco dei modelli non è disponibile. (L'app desktop ce l'ha.)",
"Unnamed Faces": "Volti senza nome"
"Unnamed Faces": "Volti senza nome",
"smart album value|No": "No",
"smart album value|Yes": "Sì",
"Add Print Cell": "Aggiungi cella di stampa",
"Apply Mask Effect": "Applica effetto maschera",
"Apply Print Template": "Applica modello di stampa",
"Apply Slideshow Template": "Applica modello di presentazione",
"Arrange Print Cell": "Disponi cella di stampa",
"Auto Layout": "Layout automatico",
"Choose Layout Image…": "Scegli immagine di layout…",
"Clear Print Layout": "Cancella layout di stampa",
"Cycle Flag": "Alterna bandiera",
"Cycle Tool Overlay": "Alterna sovrapposizione strumento",
"Decrease Flag Status": "Riduci stato bandiera",
"Decrease Grid Thumbnail Size": "Riduci dimensione miniature griglia",
"Delete Mask Effect": "Elimina effetto maschera",
"Delete Print Cell": "Elimina cella di stampa",
"Delete Print Template": "Elimina modello di stampa",
"Delete Slideshow Template": "Elimina modello di presentazione",
"Duplicate Mask Effect": "Duplica effetto maschera",
"End Slideshow": "Termina presentazione",
"Export Effect Presets…": "Esporta preset effetti…",
"Export Mask Effects": "Esporta effetti maschera",
"Face Models on the GPU": "Modelli dei volti sulla GPU",
"Favorite Mask Effect": "Effetto maschera preferito",
"Import Mask Effects": "Importa effetti maschera",
"Import Slideshow Template": "Importa modello di presentazione",
"Increase Flag Status": "Aumenta stato bandiera",
"Increase Grid Thumbnail Size": "Aumenta dimensione miniature griglia",
"Layout Image Matte": "Passe-partout immagine di layout",
"Layout Image Opacity": "Opacità immagine di layout",
"Manage Effect Presets…": "Gestisci preset effetti…",
"Mask Effect Presets": "Preset effetti maschera",
"Move Mask Effect to Group": "Sposta effetto maschera nel gruppo",
"Move Print Cell": "Sposta cella di stampa",
"Move Print Cell to Page": "Sposta cella di stampa nella pagina",
"New Print Page": "Nuova pagina di stampa",
"Next Slide": "Diapositiva successiva",
"Pause / Resume Slideshow": "Pausa / riprendi presentazione",
"Previous Slide": "Diapositiva precedente",
"Print Settings": "Impostazioni di stampa",
"Print Templates": "Modelli di stampa",
"Print to PDF": "Stampa su PDF",
"Read Focus Points in the Background": "Leggi punti di messa a fuoco in background",
"Recheck Preview-Only Raws": "Ricontrolla i raw con sola anteprima",
"Rename Mask Effect": "Rinomina effetto maschera",
"Rename Mask Effect Group": "Rinomina gruppo di effetti maschera",
"Rename Person": "Rinomina persona",
"Rename Slideshow Template": "Rinomina modello di presentazione",
"Reset Print Settings": "Ripristina impostazioni di stampa",
"Resize Print Cell": "Ridimensiona cella di stampa",
"Save Current Settings as New Effect Preset…": "Salva le impostazioni attuali come nuovo preset effetto…",
"Save Mask Effect": "Salva effetto maschera",
"Save Print Template": "Salva modello di stampa",
"Save Slideshow Template": "Salva modello di presentazione",
"Set Effect for New Masks": "Imposta effetto per le nuove maschere",
"Set Print Cell Photo": "Imposta foto della cella di stampa",
"Set Print Settings": "Imposta impostazioni di stampa",
"Show Layout Image": "Mostra immagine di layout",
"Slideshow Export Status": "Stato esportazione presentazione",
"Slideshow Layout Settings": "Impostazioni layout presentazione",
"Slideshow Options…": "Opzioni presentazione…",
"Slideshow Overlay Settings": "Impostazioni sovrapposizioni presentazione",
"Slideshow Playback Settings": "Impostazioni riproduzione presentazione",
"Slideshow Slide Preview": "Anteprima diapositiva della presentazione",
"Slideshow Title Settings": "Impostazioni titoli presentazione",
"Update Mask Effect": "Aggiorna effetto maschera",
"Update Slideshow Template": "Aggiorna modello di presentazione",
"Write Waiting XMP Sidecars": "Scrivi i file XMP in attesa",
"Color Overlay": "Sovrapposizione colore",
"Color Overlay on B&W": "Sovrapposizione colore su B/N",
"Image on Black": "Immagine su nero",
"Image on White": "Immagine su bianco",
"White on Black": "Bianco su nero"
}
+44 -44
View File
@@ -248,50 +248,50 @@
"{n} photos opened for editing; each is stacked with its original": "Zdjęcia otwarte do edycji: {n}; każde połączono w stos z oryginałem",
"· {in_source} identical copies": "· identyczne kopie: {in_source}",
"· {trashed} in Recently Deleted": "· w Ostatnio usuniętych: {trashed}",
" in {g} group{}": " in {g} group{}",
" · kept, not applied: {}": " · kept, not applied: {}",
" — kept but not applied: {}": " — kept but not applied: {}",
"Apply to “{mask}” on Selected Photos": "Apply to “{mask}” on Selected Photos",
"Delete the effect preset “{name}”?": "Delete the effect preset “{name}”?",
"Delete these {n} effect presets?": "Delete these {n} effect presets?",
"Delete {n} effect preset{}? This can't be undone.": "Delete {n} effect preset{}? This can't be undone.",
"Effect: {name}": "Effect: {name}",
"Exported {} effect preset{}": "Exported {} effect preset{}",
"Imported {e} mask effect{} (Masking ▸ Effect)": "Imported {e} mask effect{} (Masking → Effect)",
"Update “{name}” with Current Settings": "Update “{name}” with Current Settings",
"{n} preset{}": "{n} preset{}",
"{count} more warnings.": "{count} more warnings.",
"{photos} catalog records processed; {collections} collections.": "{photos} catalog records processed; {collections} collections.",
"{missing} originals are missing. Their catalog records are available; use Find Missing Photos to relink them.": "{missing} originals are missing. Their catalog records are available; use Find Missing Photos to relink them.",
"Applied {name}": "Applied {name}",
"Delete “{name}”?": "Delete “{name}”?",
"Updated {name}": "Updated {name}",
"Exported to {path}": "Exported to {path}",
"Saved template {name}": "Saved template {name}",
"Imported {name}": "Imported {name}",
"Skipped {problem}": "Skipped {problem}",
"…and {more} more": "…and {more} more",
"Template preview: {name}": "Template preview: {name}",
"{n} photos in view · {slides} slides · {time}": "{n} photos in view · {slides} slides · {time}",
"{n} pages": "{n} pages",
"{n} JPEG files": "{n} JPEG files",
"{s} s of AV1 video": "{s} s of AV1 video",
"Slideshow exported: {what}": "Slideshow exported: {what}",
" · {n} skipped (could not be rendered)": " · {n} skipped (could not be rendered)",
"{n} raws can now be developed from their raw data": "{n} raws can now be developed from their raw data",
"The XMP sidecars of {n} photos couldn't be written (is their folder offline?). LightCraft keeps trying.": "The XMP sidecars of {n} photos couldn't be written (is their folder offline?). LightCraft keeps trying.",
"Create the keyword “{name}”": "Create the keyword “{name}”",
"new, inside {parent}": "new, inside {parent}",
"Keywords of {n} selected photos": "Keywords of {n} selected photos",
"Removed “{name}” from {n} photos. Edit ▸ Undo puts it back.": "Removed “{name}” from {n} photos. Edit → Undo puts it back.",
"LightCraft stopped unexpectedly: {e}\n\nThe log file has the details: {path}": "LightCraft stopped unexpectedly: {e}\n\nThe log file has the details: {path}",
"LightCraft stopped unexpectedly: {e}": "LightCraft stopped unexpectedly: {e}",
"Renames {n} face{} across the library. The files are not changed.": "Renames {n} face{} across the library. The files are not changed.",
"“{to}” is already a person. Combining them makes one person; Undo separates them again.": "“{to}” is already a person. Combining them makes one person; Undo separates them again.",
"{what} merge added at {mp}: its full size, {full}, needs more memory than this computer has": "{what} merge added at {mp}: its full size, {full}, needs more memory than this computer has",
"{what} merge added at {mp}, the largest a panorama can be (its full size is {full})": "{what} merge added at {mp}, the largest a panorama can be (its full size is {full})",
"Color space: Rec. 2020 {curve} (HDR AVIF)": "Color space: Rec. 2020 {curve} (HDR AVIF)",
"{n} selected photos · {pages} pages": "{n} selected photos · {pages} pages",
" in {g} group{}": " w grupach: {g}{:.0}",
" · kept, not applied: {}": " · zachowane, niezastosowane: {}",
" — kept but not applied: {}": " — zachowane, ale niezastosowane: {}",
"Apply to “{mask}” on Selected Photos": "Zastosuj do „{mask}” na zaznaczonych zdjęciach",
"Delete the effect preset “{name}”?": "Usunąć ustawienie wstępne efektu „{name}”?",
"Delete these {n} effect presets?": "Usunąć te ustawienia wstępne efektów ({n})?",
"Delete {n} effect preset{}? This can't be undone.": "Usunąć ustawienia wstępne efektów ({n})?{:.0} Tej operacji nie można cofnąć.",
"Effect: {name}": "Efekt: {name}",
"Exported {} effect preset{}": "Wyeksportowane ustawienia wstępne efektów: {}{:.0}",
"Imported {e} mask effect{} (Masking ▸ Effect)": "Zaimportowane efekty masek: {e}{:.0} (Maskowanie → Efekt)",
"Update “{name}” with Current Settings": "Aktualizuj „{name}” bieżącymi ustawieniami",
"{n} preset{}": "Ustawienia wstępne: {n}{:.0}",
"{count} more warnings.": "Pozostałe ostrzeżenia: {count}.",
"{photos} catalog records processed; {collections} collections.": "Przetworzone rekordy katalogu: {photos}; kolekcje: {collections}.",
"{missing} originals are missing. Their catalog records are available; use Find Missing Photos to relink them.": "Brakujące oryginały: {missing}. Ich rekordy w katalogu są dostępne; użyj polecenia „Znajdź brakujące zdjęcia”, aby ponownie je połączyć.",
"Applied {name}": "Zastosowano: {name}",
"Delete “{name}”?": "Usunąć „{name}”?",
"Updated {name}": "Zaktualizowano: {name}",
"Exported to {path}": "Wyeksportowano do {path}",
"Saved template {name}": "Zapisano szablon {name}",
"Imported {name}": "Zaimportowano: {name}",
"Skipped {problem}": "Pominięto: {problem}",
"…and {more} more": "…i jeszcze {more}",
"Template preview: {name}": "Podgląd szablonu: {name}",
"{n} photos in view · {slides} slides · {time}": "Zdjęcia w widoku: {n} · slajdy: {slides} · {time}",
"{n} pages": "Strony: {n}",
"{n} JPEG files": "Pliki JPEG: {n}",
"{s} s of AV1 video": "{s} s wideo AV1",
"Slideshow exported: {what}": "Wyeksportowano pokaz slajdów: {what}",
" · {n} skipped (could not be rendered)": " · pominięte (nie udało się wyrenderować): {n}",
"{n} raws can now be developed from their raw data": "Pliki RAW, które można teraz wywołać z danych surowych: {n}",
"The XMP sidecars of {n} photos couldn't be written (is their folder offline?). LightCraft keeps trying.": "Nie udało się zapisać plików pomocniczych XMP zdjęć ({n}). Czy ich folder jest offline? LightCraft ponawia próby.",
"Create the keyword “{name}”": "Utwórz słowo kluczowe „{name}”",
"new, inside {parent}": "nowe, wewnątrz {parent}",
"Keywords of {n} selected photos": "Słowa kluczowe zaznaczonych zdjęć ({n})",
"Removed “{name}” from {n} photos. Edit ▸ Undo puts it back.": "Usunięto „{name}” z {n} zdjęć. Edytuj → Cofnij przywraca je.",
"LightCraft stopped unexpectedly: {e}\n\nThe log file has the details: {path}": "LightCraft nieoczekiwanie zakończył działanie: {e}\n\nSzczegóły są w pliku dziennika: {path}",
"LightCraft stopped unexpectedly: {e}": "LightCraft nieoczekiwanie zakończył działanie: {e}",
"Renames {n} face{} across the library. The files are not changed.": "Zmienia nazwę twarzy w całej bibliotece (liczba twarzy: {n}).{:.0} Pliki nie są zmieniane.",
"“{to}” is already a person. Combining them makes one person; Undo separates them again.": "„{to}” to już istniejąca osoba. Połączenie utworzy jedną osobę; Cofnij ponownie je rozdzieli.",
"{what} merge added at {mp}: its full size, {full}, needs more memory than this computer has": "Dodano połączenie {what} w rozdzielczości {mp}: pełny rozmiar, {full}, wymaga więcej pamięci, niż ma ten komputer",
"{what} merge added at {mp}, the largest a panorama can be (its full size is {full})": "Dodano połączenie {what} w rozdzielczości {mp}, największej możliwej dla panoramy (pełny rozmiar to {full})",
"Color space: Rec. 2020 {curve} (HDR AVIF)": "Przestrzeń kolorów: Rec. 2020 {curve} (HDR AVIF)",
"{n} selected photos · {pages} pages": "Zaznaczone zdjęcia: {n} · strony: {pages}",
"Already in “{}”": "Już w „{}”",
"Move {n} photo{} to “{}”": "Przenieś do „{1}” — zdjęcia: {n}{0:.0}",
"Move {n} photo{} to “{}”?": "Przenieść do „{1}” — zdjęcia: {n}{0:.0}?",
+112 -2
View File
@@ -1511,7 +1511,7 @@
"Versions (Shift+V)": "Wersje (Shift+V)",
"Vertical": "Pionowo",
"Vertical text": "Tekst pionowy",
"Vibrance": "Dynamika",
"Vibrance": "Jaskrawość",
"Videos": "Wideo",
"View": "Widok",
"Viewing and sharing": "Wyświetlanie i udostępnianie",
@@ -2157,5 +2157,115 @@
"This is a Lightroom catalog, not a LightCraft library. Import it into a LightCraft library instead?": "To jest katalog Lightrooma, a nie biblioteka LightCraft. Zaimportować go zamiast tego do biblioteki LightCraft?",
"Unnamed Faces": "Nienazwane twarze",
"Vertical inset (% of short edge)": "Margines pionowy (% krótszego boku)",
"not added to Apple Photos (cancelled)": "nie dodano do aplikacji Zdjęcia (anulowano)"
"not added to Apple Photos (cancelled)": "nie dodano do aplikacji Zdjęcia (anulowano)",
"Set Folder Color Label": "Ustaw etykietę kolorystyczną folderu",
"Refresh View": "Odśwież widok",
"Hold View Until Refreshed": "Wstrzymaj widok do odświeżenia",
"Photo Below": "Zdjęcie poniżej",
"Photo Above": "Zdjęcie powyżej",
"Cycle Flag": "Przełącz oznaczenie",
"Increase Flag Status": "Podnieś status oznaczenia",
"Decrease Flag Status": "Obniż status oznaczenia",
"Update to Current Process": "Aktualizuj do bieżącej wersji procesu",
"HDR": "HDR",
"Previous History Step": "Poprzedni krok historii",
"Next History Step": "Następny krok historii",
"Find Blemishes": "Znajdź skazy",
"Keyword Info": "Informacje o słowie kluczowym",
"Create Keyword": "Utwórz słowo kluczowe",
"Edit Keyword": "Edytuj słowo kluczowe",
"Move Keyword": "Przenieś słowo kluczowe",
"Put New Keywords Inside": "Umieszczaj nowe słowa kluczowe wewnątrz",
"Mask Effect Presets": "Ustawienia wstępne efektów maski",
"Apply Mask Effect": "Zastosuj efekt maski",
"Save Mask Effect": "Zapisz efekt maski",
"Update Mask Effect": "Aktualizuj efekt maski",
"Rename Mask Effect": "Zmień nazwę efektu maski",
"Duplicate Mask Effect": "Duplikuj efekt maski",
"Delete Mask Effect": "Usuń efekt maski",
"Favorite Mask Effect": "Oznacz efekt maski jako ulubiony",
"Move Mask Effect to Group": "Przenieś efekt maski do grupy",
"Rename Mask Effect Group": "Zmień nazwę grupy efektów maski",
"Set Effect for New Masks": "Ustaw efekt dla nowych masek",
"Import Mask Effects": "Importuj efekty maski",
"Export Mask Effects": "Eksportuj efekty maski",
"HDR for Each Bracket Set": "HDR dla każdej serii ekspozycji",
"Write Waiting XMP Sidecars": "Zapisz oczekujące pliki pomocnicze XMP",
"Slideshow Playback Settings": "Ustawienia odtwarzania pokazu slajdów",
"Slideshow Layout Settings": "Ustawienia układu pokazu slajdów",
"Slideshow Overlay Settings": "Ustawienia nakładek pokazu slajdów",
"Slideshow Title Settings": "Ustawienia tytułów pokazu slajdów",
"Slideshow Templates": "Szablony pokazu slajdów",
"Apply Slideshow Template": "Zastosuj szablon pokazu slajdów",
"Save Slideshow Template": "Zapisz szablon pokazu slajdów",
"Update Slideshow Template": "Aktualizuj szablon pokazu slajdów",
"Rename Slideshow Template": "Zmień nazwę szablonu pokazu slajdów",
"Delete Slideshow Template": "Usuń szablon pokazu slajdów",
"Import Slideshow Template": "Importuj szablon pokazu slajdów",
"Export Slideshow Template": "Eksportuj szablon pokazu slajdów",
"Slideshow Slide Preview": "Podgląd slajdu pokazu",
"Export Slideshow": "Eksportuj pokaz slajdów",
"Slideshow Export Status": "Stan eksportu pokazu slajdów",
"Export Contact Sheet PDF": "Eksportuj arkusz stykowy PDF",
"Apple Photos Imports": "Dodawanie do aplikacji Zdjęcia",
"Print Settings": "Ustawienia drukowania",
"Set Print Settings": "Zmień ustawienia drukowania",
"Reset Print Settings": "Przywróć ustawienia drukowania",
"Add Print Cell": "Dodaj komórkę wydruku",
"Move Print Cell": "Przenieś komórkę wydruku",
"Resize Print Cell": "Zmień rozmiar komórki wydruku",
"Delete Print Cell": "Usuń komórkę wydruku",
"Arrange Print Cell": "Rozmieść komórkę wydruku",
"Set Print Cell Photo": "Ustaw zdjęcie komórki wydruku",
"Move Print Cell to Page": "Przenieś komórkę wydruku na stronę",
"Auto Layout": "Układ automatyczny",
"New Print Page": "Nowa strona wydruku",
"Clear Print Layout": "Wyczyść układ wydruku",
"Print to PDF": "Drukuj do PDF",
"Print Templates": "Szablony wydruku",
"Save Print Template": "Zapisz szablon wydruku",
"Apply Print Template": "Zastosuj szablon wydruku",
"Delete Print Template": "Usuń szablon wydruku",
"Recheck Preview-Only Raws": "Sprawdź ponownie pliki RAW dostępne tylko jako podgląd",
"Scan Folder for Changes": "Skanuj folder w poszukiwaniu zmian",
"Rename Person": "Zmień nazwę osoby",
"Read Focus Points": "Odczytaj punkty ostrości",
"Read Focus Points in the Background": "Odczytuj punkty ostrości w tle",
"Background Tasks": "Zadania w tle",
"Cancel Background Task": "Anuluj zadanie w tle",
"Select Only Active Photo": "Zaznacz tylko aktywne zdjęcie",
"Show Focus Point": "Pokaż punkt ostrości",
"Zoom to Focus Point": "Powiększ do punktu ostrości",
"Show in Compare": "Pokaż w porównaniu",
"Increase Grid Thumbnail Size": "Zwiększ rozmiar miniatur w siatce",
"Decrease Grid Thumbnail Size": "Zmniejsz rozmiar miniatur w siatce",
"Visualize HDR": "Wizualizuj HDR",
"Cycle Tool Overlay": "Przełącz nakładkę narzędzia",
"Choose Layout Image…": "Wybierz obraz układu…",
"Show Layout Image": "Pokaż obraz układu",
"Layout Image Opacity": "Krycie obrazu układu",
"Layout Image Matte": "Matowanie obrazu układu",
"Solo Mode": "Tryb solo",
"Slideshow Options…": "Opcje pokazu slajdów…",
"Export Slideshow…": "Eksportuj pokaz slajdów…",
"Pause / Resume Slideshow": "Wstrzymaj / wznów pokaz slajdów",
"Next Slide": "Następny slajd",
"Previous Slide": "Poprzedni slajd",
"End Slideshow": "Zakończ pokaz slajdów",
"Contact Sheet PDF…": "Arkusz stykowy PDF…",
"Edit in PhotoCraft": "Edytuj w PhotoCraft",
"Edit in Other Editor": "Edytuj w innym edytorze",
"Open Original in Other Editor (RAW, no copy)": "Otwórz oryginał w innym edytorze (RAW, bez kopii)",
"Save Current Settings as New Effect Preset…": "Zapisz bieżące ustawienia jako nowe ustawienie wstępne efektu…",
"Manage Effect Presets…": "Zarządzaj ustawieniami wstępnymi efektów…",
"Export Effect Presets…": "Eksportuj ustawienia wstępne efektów…",
"Display Profile": "Profil ekranu",
"HDR Headroom": "Zapas jasności HDR",
"SDR Brightness": "Jasność SDR",
"SDR Contrast": "Kontrast SDR",
"SDR Highlights": "Światła SDR",
"SDR Shadows": "Cienie SDR",
"SDR Whites": "Biele SDR",
"SDR Clarity": "Przejrzystość SDR",
"Face Models on the GPU": "Modele twarzy przetwarzane na GPU"
}
+11 -11
View File
@@ -204,23 +204,23 @@
"{} label (click more labels to show any of them)": "{0}标签(单击更多标签可显示符合其中任一标签的照片)",
", {} star{}": ",{0} 星{1:.0}",
", {} label": ",{0}标签",
"Downloads from {host}. Once it has arrived and checked out, LightCraft installs it, {after}.": "Downloads from {host}. Once it has arrived and checked out, LightCraft installs it, {after}.",
"Downloads from {host}. Once it has arrived and checked out, LightCraft installs it, {after}.": "从 {host} 下载。下载完成并通过校验后,LightCraft 会进行安装,{after}。",
"{:.1} MB": "{:.1} MB",
"Running on the processor: {}.": "Running on the processor: {}.",
"{} · {}. Kept in the library's “denoise” folder; the oldest ones that no photo uses go first when the limit is reached.": "{} · {}. Kept in the library's “denoise” folder; the oldest ones that no photo uses go first when the limit is reached.",
"Denoising {name}: {done} of {total} tiles{}": "Denoising {name}: {done} of {total} tiles{}",
"Running on the processor: {}.": "正在处理器上运行:{}。",
"{} · {}. Kept in the library's “denoise” folder; the oldest ones that no photo uses go first when the limit is reached.": "{} · {}。保存在图库的“denoise”文件夹中;达到上限时,会先删除没有照片使用的最旧结果。",
"Denoising {name}: {done} of {total} tiles{}": "正在为 {name} 降噪:已完成 {done}/{total} 个图块{}",
"{size} GB": "{size} GB",
"{} of {} from {host}": "{} of {} from {host}",
"{} of {} from {host}": "正在从 {host} 下载:{} / {}",
"{} KB": "{} KB",
"{} MB": "{} MB",
"Making the denoised picture… {}%": "Making the denoised picture… {}%",
"Making the denoised picture… {}%": "正在生成降噪结果… {}%",
"{name} · {terms}": "{name} · {terms}",
"{n} {noun}": "{n} {noun}",
"Trained on: {provenance}": "Trained on: {provenance}",
" · {queued} waiting": " · {queued} waiting",
"Shows the model's terms, then downloads {} from {host}, installs it and starts using it. Nothing else is sent.": "Shows the model's terms, then downloads {} from {host}, installs it and starts using it. Nothing else is sent.",
"In line for AI Denoise ({ahead} ahead)…": "In line for AI Denoise ({ahead} ahead)…",
"Running on {}.": "Running on {}.",
"Trained on: {provenance}": "训练数据:{provenance}",
" · {queued} waiting": " · {queued} 张等待中",
"Shows the model's terms, then downloads {} from {host}, installs it and starts using it. Nothing else is sent.": "先显示该模型的条款,然后从 {host} 下载 {},安装并开始使用。除此之外不会上传任何数据。",
"In line for AI Denoise ({ahead} ahead)…": "AI 降噪排队中(前方还有 {ahead} 张)…",
"Running on {}.": "正在{}上运行。",
"{file} · {size}": "{file} · {size}",
"• {assumption}": "• {assumption}",
"Put inside “{parent}”": "放入“{parent}”中",
+6 -1
View File
@@ -2179,5 +2179,10 @@
"Checking the GPU…": "正在检查 GPU…",
"CPU": "CPU",
"A face model uses the GPU only when a check shows it gives the same results faster.": "只有检查表明 GPU 能更快给出相同结果时,人脸模型才会使用 GPU。",
"Checking the GPU for faces": "正在检查用于人脸的 GPU"
"Checking the GPU for faces": "正在检查用于人脸的 GPU",
"Include selected photos": "包含所选照片",
"Suggests who is in a photo from the faces you have named. Everything stays on your computer.": "根据你已命名的人脸,推测照片中的人物。所有数据仅保存在本机。",
"This build cannot run recognition models: they can be added and chosen, not used.": "此版本无法运行识别模型:可以添加和选择,但无法使用。",
"Detect Faces (Photo menu) needs it: a small one-time download.": "“检测人脸”(照片菜单)依赖它:一次性小文件下载。",
"This build has nowhere to keep face models, so the model list is not available. (The desktop app has.)": "此版本无法存放人脸模型,因此模型列表不可用。(桌面版可以存放。)"
}
+38 -2
View File
@@ -149,11 +149,33 @@ impl<'de> Deserialize<'de> for Locale {
thread_local! {
static LOCALE: std::cell::Cell<Locale> = const { std::cell::Cell::new(Locale::En) };
/// The host's answer for the "Auto" language ([`set_default_language`]).
static DEFAULT_LANGUAGE: std::cell::Cell<Option<Locale>> = const { std::cell::Cell::new(None) };
}
/// The UI language from the environment (`LIGHTCRAFT_LANGUAGE=zh-hans`), for headless runs.
/// Install the language the "Auto" setting resolves to when nothing is stored. The browser host
/// calls this once at startup with the browser's own languages ([`locale_from_tags`]); the
/// desktop host doesn't: there Auto keeps following the environment. Must run before the UI state
/// is first constructed.
pub fn set_default_language(language: Locale) {
DEFAULT_LANGUAGE.with(|slot| slot.set(Some(language)));
}
/// The first of `tags` (BCP-47, most preferred first, as `navigator.languages` lists them) that
/// names a shipped language; None when none does.
pub fn locale_from_tags(tags: &[String]) -> Option<Locale> {
tags.iter().find_map(|tag| Locale::parse_tag(tag))
}
/// The UI language "Auto" resolves to: the environment's (`LIGHTCRAFT_LANGUAGE=zh-hans`, for
/// headless runs), or the host-installed default ([`set_default_language`], the browser's languages
/// on the web), else English.
pub fn default_language() -> Locale {
std::env::var("LIGHTCRAFT_LANGUAGE").ok().and_then(|value| Locale::parse_tag(&value)).unwrap_or(Locale::En)
std::env::var("LIGHTCRAFT_LANGUAGE")
.ok()
.and_then(|value| Locale::parse_tag(&value))
.or_else(|| DEFAULT_LANGUAGE.with(std::cell::Cell::get))
.unwrap_or(Locale::En)
}
pub fn set_language(language: Locale) {
@@ -636,6 +658,20 @@ mod tests {
assert_eq!(Locale::parse_tag("xx"), None);
}
/// The web host's "Auto" (issue #2085): the browser's `navigator.languages` in order, first
/// shipped language wins, unsupported tags are skipped, an empty or foreign list stays English
/// ([`default_language`] fallback).
#[test]
fn locale_from_tags_takes_the_first_shipped_language() {
assert_eq!(locale_from_tags(&[]), None);
assert_eq!(locale_from_tags(&["xx-XX".into()]), None);
assert_eq!(locale_from_tags(&["it-IT".into()]), Some(Locale::It));
assert_eq!(locale_from_tags(&["xx".into(), "de-DE".into(), "fr".into()]), Some(Locale::De));
assert_eq!(locale_from_tags(&["zh-TW".into(), "en".into()]), Some(Locale::ZhHant));
assert_eq!(locale_from_tags(&["ja_JP.UTF-8".into(), "en".into()]), Some(Locale::Ja));
assert_eq!(locale_from_tags(&["pt".into(), "pt-BR".into()]), Some(Locale::PtBr));
}
#[test]
fn switching_language_translates_and_restores() {
set_language(Locale::ZhHans);
+10 -5
View File
@@ -50,8 +50,13 @@ fn widget(h: &Headless, id: &str) -> Option<Rect> {
h.app.widgets.iter().find(|(w, _)| w == id).map(|(_, r)| *r)
}
/// How the Folders section names `dir` in widget ids: with `/` separators, on Windows too.
fn folder_key(dir: &Path) -> String {
dir.to_string_lossy().replace('\\', "/")
}
fn folder_row(h: &Headless, dir: &Path) -> Option<Rect> {
widget(h, &format!("source:libfolder:{}", dir.to_string_lossy()))
widget(h, &format!("source:libfolder:{}", folder_key(dir)))
}
fn id_of(h: &Headless, file: &str) -> u64 {
@@ -180,7 +185,7 @@ fn photos_already_in_the_folder_stay_put() {
let (root, trip, home) = folders("here");
let mut h = app(&[(trip.join("beach.png"), false), (home.join("garden.png"), false)]);
// open the folder holding both
let toggle = widget(&h, &format!("libraryFolderToggle:{}", root.to_string_lossy())).unwrap();
let toggle = widget(&h, &format!("libraryFolderToggle:{}", folder_key(&root))).unwrap();
h.app.synthetic.push(egui::Event::PointerMoved(toggle.center()));
h.app.synthetic.push(egui::Event::PointerButton {
pos: toggle.center(),
@@ -284,7 +289,7 @@ fn cancelling_the_question_moves_nothing() {
let target = if folder_row(&h, &home).is_some() {
target
} else {
click(&mut h, &format!("libraryFolderToggle:{}", root.to_string_lossy()));
click(&mut h, &format!("libraryFolderToggle:{}", folder_key(&root)));
folder_row(&h, &home).unwrap()
};
let undo = h.app.session.undo.len();
@@ -302,7 +307,7 @@ fn dont_ask_again_moves_the_next_drop_at_once() {
let (root, trip, home) = folders("dont-ask");
std::fs::copy(trip.join("beach.png"), trip.join("dunes.png")).unwrap();
let mut h = app(&[(trip.join("beach.png"), false), (trip.join("dunes.png"), false), (home.join("garden.png"), false)]);
click(&mut h, &format!("libraryFolderToggle:{}", root.to_string_lossy()));
click(&mut h, &format!("libraryFolderToggle:{}", folder_key(&root)));
let target = folder_row(&h, &home).unwrap();
let beach = id_of(&h, "beach.png");
h.app.session.selection = lightcraft_engine::Selection::single(lightcraft_catalog::PhotoId(beach));
@@ -327,7 +332,7 @@ fn dont_ask_again_moves_the_next_drop_at_once() {
fn a_question_left_open_while_another_library_opens_moves_nothing() {
let (root, trip, home) = folders("other-library");
let mut h = app(&[(trip.join("beach.png"), false), (home.join("garden.png"), false)]);
click(&mut h, &format!("libraryFolderToggle:{}", root.to_string_lossy()));
click(&mut h, &format!("libraryFolderToggle:{}", folder_key(&root)));
let beach = id_of(&h, "beach.png");
let target = folder_row(&h, &home).unwrap();
drop_beach(&mut h, beach, target);
+5
View File
@@ -155,6 +155,11 @@ fn offline_originals_never_block_a_frame() {
h.app.session.execute("library.source", &json!({"kind": "missing"})).unwrap();
assert_eq!(h.app.session.source, LibrarySource::Missing);
frames_while_asleep(&mut h, &nas, 20, "Missing Photos");
// the probe runs on the background worker: give it time to start on a loaded machine
let asked = std::time::Instant::now();
while calls.n.load(Ordering::SeqCst) == 0 && asked.elapsed() < std::time::Duration::from_secs(5) {
std::thread::sleep(std::time::Duration::from_millis(10));
}
assert!(calls.n.load(Ordering::SeqCst) > 0, "the probe was asked");
assert_eq!(h.app.session.visible().len(), 0, "unknown files count as there");
+6 -4
View File
@@ -27,11 +27,13 @@ revizí rozsahu a terminologie. Rodilý mluvčí ani profesionální překladate
plurálové pravidlo se nepřidává.
- Písmo Inter dodávané s aplikací obsahuje české znaky i uvozovky „…“. Další font není potřeba.
Katalog obsahuje 2 056 běžných položek a 246 formátových šablon. Každý běžný klíč existuje
v jiném katalogu nebo je používán kódem. Oproti německému katalogu má 108 dalších klíčů,
Katalog obsahuje 2 394 běžných položek a 297 formátových šablon. Každý běžný klíč existuje
v jiném katalogu nebo je používán kódem. Oproti německému katalogu má 215 dalších klíčů,
všechny s doloženým použitím: popisky příkazů, menu, ovládacích prvků a nastavení,
texty HDR/exportu a obličejů a kontextové hodnoty Ano/Ne. Z toho 41 klíčů již existuje
v dalších katalozích a 67 doplňuje současné překladové lookupy.
texty HDR/exportu a obličejů a kontextové hodnoty Ano/Ne. Z toho 66 klíčů již existuje
v dalších katalozích a 149 doplňuje současné překladové lookupy. Doplnění z 18. 10. 2026
přidalo texty novějších funkcí (prezentace, tisk, přednastavení efektů masek, zaostřovací
body) a prošlo stejnou kontrolou.
Řádkové fragmenty poznámek k vydáním byly odstraněny, včetně 163 fragmentů převzatých
ze sdílených katalogů; text poznámek v dialogu Co je nového používá anglický fallback.
+4 -2
View File
@@ -23,8 +23,10 @@ interface never uses Mtavruli (a test checks the whole catalog). Commands are ve
are count-neutral, noun first (`იმპორტირებულია ფოტო: 3`); English plural endings are dropped with
`{:.0}`. Dates read `კვირა, 20.09.2026` (`{weekday}, {day:02}.{month:02}.{year}`), months `09.2026`.
Inter has no Georgian letters and craft-fonts has no Georgian face yet, so Georgian text shows boxes
until a Georgian face is available to the UI.
Inter has no Georgian letters, so the UI draws Georgian with craft-fonts' Noto Sans Georgian (`Geor`),
like the Thai and Arabic faces: desktop release builds embed it, and a web build made with
`CRAFT_FONTS_DIR` keeps it in the WASM (`crates/engine/build.rs`). The release web build doesn't use
craft-fonts yet, and a build without `CRAFT_FONTS_DIR` has no Georgian face and shows boxes.
## Terminology
+3 -2
View File
@@ -1,6 +1,6 @@
# Localization parity
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-12 · **Change:** minor (de, es, fr, ja, uk catalogs filled; re-measured; Italian and Georgian interface catalogs added) · **Target:** Adobe Lightroom Classic 15.5 / Lightroom 9.6
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-15 · **Change:** trivial (Italian: every interface string translated, native-speaker corrections; previously minor: de, es, fr, ja, uk catalogs filled; re-measured; Italian and Georgian interface catalogs added) · **Target:** Adobe Lightroom Classic 15.5 / Lightroom 9.6
How far each interface language is from `full`. How to add or maintain a language is in
[localization.md](localization.md); per-language notes are in `localization-<code>.md`
@@ -65,7 +65,7 @@ that is promising but is not recorded as review, so the column says `no (communi
| Traditional Chinese (Taiwan) | `zh-hant` | 1,993 / 2,304 (87%) | Hant; uses the Simplified Chinese face until craft-fonts has a TC face | no (community edits) | partial | 8–14 h (incl. the font) |
| Russian | `ru` | 1,704 / 2,304 (74%) | Cyrillic (Inter) | no (community edits) | partial | 8–12 h |
| Ukrainian | `uk` | 2,383 / 2,398 (99%; 2026-10-12) | Cyrillic (Inter) | no (community edits) | partial (lower-layer errors English) | 2–4 h |
| Italian | `it` | 2,201 / 2,398 (92%, measured 2026-10-12; the rest is What's New) | Latin (Inter) | no (written with an agent; native-speaker pass pending) | partial (lower-layer errors English) | 3–5 h |
| Italian | `it` | 2,628 / 3,278 (80%, measured 2026-10-15; every interface string is translated, the other 650 are What's New lines, left in English) | Latin (Inter) | partly (written with an agent; corrections and the 2026-10-15 additions by a native speaker) | partial (lower-layer errors English) | 3–5 h |
| Georgian | `ka` | 2,398 / 2,398 (100%: every plain and formats message any catalog has on 2026-10-12, plus the 27 display labels and 397 What's New lines no other catalog translates) | Geor: no craft-fonts face yet (boxes until one is available) | yes (native speaker) | partial (lower-layer errors English) | 2–4 h (+ a Georgian face) |
Target languages LightCraft lacks: Korean, Dutch, Polish, Swedish, Norwegian Bokmål, Thai
@@ -93,6 +93,7 @@ Target languages LightCraft lacks: Korean, Dutch, Polish, Swedish, Norwegian Bok
| Date | Change | Summary |
|---|---|---|
| 2026-10-15 | trivial | Italian (`it`): 339 interface messages and 60 format strings that were missing or still in English translated (2,628 of 3,278; only What's New left in English); native-speaker corrections: Exposure → *Esposizione*, Sharpening → *Nitidezza*, Preset → *Preset*, blurry → *sfocate* |
| 2026-10-12 | minor | Italian interface catalog (`it`): 2,201 of 2,398 messages, What's New left in English |
| 2026-10-11 | minor | Shared work: the interface decides on error kinds, not English error text (#1046) |
| 2026-10-12 | minor | Georgian (`ka`) row: every catalog message |
+1 -1
View File
@@ -481,7 +481,7 @@ differences and missing bindings are in [ui-parity.md](ui-parity.md#shortcuts).
| LR-BEHAV-HEADLESS | Headless UI snapshots | P2 | ✅ | `apps/lightcraft-cli/src/main.rs`, `crates/ui-egui/src/headless.rs`, `docs/control-protocol.md` | `snapshot` rasterizes the UI and defaults photo development to the CPU before the first frame, without adapter discovery; scaled dimensions are validated before allocation, and UI zoom preserves the requested physical viewport; JSON-lines control scripts are supported |
| LR-BEHAV-ACCESS | Accessibility | P2 | 🟡 | `crates/ui-egui/src/widgets.rs`, `crates/ui-egui/src/text_field.rs`, `crates/ui-egui/src/panels/grid.rs`, `crates/ui-egui/tests/accessibility.rs` | AccessKit (VoiceOver / Narrator / AT-SPI): sliders announce control, value, range and step and take Increment / Decrement, buttons / icon buttons / dropdowns / section headers / sources their labels and state, text fields their caption, grid thumbnails file name, rating, flag and label. `tests/accessibility.rs` fails on an unnamed control, a slider without range or an untitled dialog in every view, Develop tool and 13 dialogs, and checks that Crop and Remove sliders are reached with Tab and that Tab walks the right panels top to bottom. Canvas tools by keyboard (`crates/ui-egui/src/canvas_keys.rs`, `crates/ui-egui/src/tests_canvas_keys.rs`): crop corners, edges and box, spot targets and sources, a New spot point (Return adds), radial / linear gradient handles and mask pins take the focus, are announced with their position and move with the arrows (Shift: further). Brush strokes and red-eye ellipses are pointer-only; not tried with a real screen reader ([audit](ui-parity.md#accessibility-audit)) |
| LR-BEHAV-LOCALE | Language options | P2 | ✅ | `cmd:app.language.english`, `cmd:app.language.simplifiedChinese`, `cmd:app.language.traditionalChinese`, `cmd:app.language.japanese`, `cmd:app.language.portuguese`, `cmd:app.language.french`, `cmd:app.language.spanish`, `cmd:app.language.german`, `cmd:app.language.russian`, `cmd:app.language.ukrainian`, `cmd:app.language.georgian` | Edit > Language lists every language in the table and the active one is checked; shared with Settings > General (docs/localization.md) |
| LR-BEHAV-LOCALIZE | Localisation | P2 | 🟡 | `crates/ui-egui/src/i18n.rs`, `crates/ui-egui/locales/`, `docs/localization.md`, `docs/localization-zh-hans.md`, `docs/localization-zh-hant.md`, `docs/localization-ja.md`, `docs/localization-pt-br.md`, `docs/localization-es.md`, `docs/localization-de.md`, `docs/localization-ru.md`, `docs/localization-ka.md` | One table entry per language (code, endonym, ISO 15924 script, catalog): English, Simplified Chinese, Traditional Chinese (Taiwan), Japanese, Brazilian Portuguese, Spanish, German, Russian, Ukrainian and Georgian UI with a persisted language preference and craft-fonts regular/bold faces per script (a variable face, as for Arabic, is drawn heavier for bold from its one file); menus, edit, crop/masks, settings, import/export and primary progress messages. Adding a language registers the locale and its language command, plus two catalogs. Stock presets/profiles, history steps, library headings, date headings and capture times are localised (user-named items stay verbatim); the Ukrainian catalog covers every existing catalog key, command/control label and rule-editor label; the German catalog reports newly added gaps; the other catalogs fall back to English for messages they lack. Technical errors remain English; release notes are translated in German and Ukrainian; craft-fonts faces for other scripts (Thai, Arabic, …) are UI fallbacks in every language, for file, folder and album names (#736); Traditional Chinese borrows the Simplified Chinese face (no TC face in craft-fonts yet), and the web build embeds the Japanese face in WASM while loading the Simplified Chinese face from a separate font file. |
| LR-BEHAV-LOCALIZE | Localisation | P2 | 🟡 | `crates/ui-egui/src/i18n.rs`, `crates/ui-egui/locales/`, `docs/localization.md`, `docs/localization-zh-hans.md`, `docs/localization-zh-hant.md`, `docs/localization-ja.md`, `docs/localization-pt-br.md`, `docs/localization-es.md`, `docs/localization-de.md`, `docs/localization-ru.md`, `docs/localization-ka.md` | One table entry per language (code, endonym, ISO 15924 script, catalog): English, Simplified Chinese, Traditional Chinese (Taiwan), Japanese, Brazilian Portuguese, Spanish, German, Russian, Ukrainian and Georgian UI with a persisted language preference and craft-fonts regular/bold faces per script (a variable face, as for Arabic, is drawn heavier for bold from its one file); menus, edit, crop/masks, settings, import/export and primary progress messages. Adding a language registers the locale and its language command, plus two catalogs. Stock presets/profiles, history steps, library headings, date headings and capture times are localised (user-named items stay verbatim); the Ukrainian catalog covers every existing catalog key, command/control label and rule-editor label; the German catalog reports newly added gaps; the other catalogs fall back to English for messages they lack. Technical errors remain English; release notes are translated in German and Ukrainian; craft-fonts faces for other scripts (Thai, Arabic, …) are UI fallbacks in every language, for file, folder and album names (#736); Traditional Chinese borrows the Simplified Chinese face (no TC face in craft-fonts yet), and the web build embeds the Japanese, Thai and Georgian faces in WASM while loading the Simplified Chinese face from a separate font file. |
| LR-BEHAV-LEARN | Tutorials | OOS | 🚫 | | |
| LR-BEHAV-WHATSNEW | What's new | P2 | ✅ | `cmd:app.whatsNew`, `docs/whats-new.md` | Help ▸ What's New: release highlights |
| LR-BEHAV-AI-EA | Early-access badges | P2 | ⬜ | | |
+38
View File
@@ -22,3 +22,41 @@ for key in ("runtime", "runtime-version", "sdk", "finish-args"):
assert manifests[0][key] == manifests[1][key], f"Flatpak manifests disagree on {key}"
print("LightCraft package identity ok")
PYEOF
# The macOS bundle must declare only file types LightCraft can open. It used to carry PhotoCraft's
# `.pcraft` document type and imported PSB/QOI declarations, so Launch Services typed PhotoCraft
# documents as LightCraft's and `.pcraft` had three claimant apps (issue #1951). plistlib parses the
# template as a property list too, which is the syntax check package.sh's `plutil -lint` repeats on
# the substituted file.
python3 - <<'PYEOF'
import plistlib
with open("packaging/macos/Info.plist.in", "rb") as source:
plist = plistlib.load(source)
for key, value in {
"CFBundleIdentifier": "ai.storyteller.lightcraft",
"CFBundleExecutable": "LightCraft",
"CFBundleIconFile": "LightCraft",
"LSMinimumSystemVersion": "11.0",
}.items():
assert plist.get(key) == value, f"Info.plist {key}: {plist.get(key)!r}, expected {value!r}"
for key in ("CFBundleShortVersionString", "CFBundleVersion", "LightCraftVersion", "LightCraftBuildCommit"):
assert plist.get(key), f"Info.plist lost {key}"
declared = set()
for section in ("UTExportedTypeDeclarations", "UTImportedTypeDeclarations"):
for entry in plist.get(section, []):
tags = entry.get("UTTypeTagSpecification", {})
declared.update(tags.get("public.filename-extension", []))
declared.update(tags.get("public.mime-type", []))
declared.add(entry.get("UTTypeIdentifier", ""))
unsupported = {name.lower() for name in declared} & {
"pcraft",
"psb",
"qoi",
"application/x-lightcraft",
"ai.storyteller.lightcraft.document",
"ai.storyteller.lightcraft.qoi",
"com.adobe.photoshop-large-image",
}
assert not unsupported, f"Info.plist declares types LightCraft cannot open: {sorted(unsupported)}"
print("LightCraft macOS bundle types ok")
PYEOF
+5 -60
View File
@@ -49,66 +49,11 @@
<key>NSHumanReadableCopyright</key>
<string>Copyright © the LightCraft authors. MIT OR Apache-2.0.</string>
<!-- Lightcraft's own format. -->
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeIdentifier</key>
<string>ai.storyteller.lightcraft.document</string>
<key>UTTypeDescription</key>
<string>LightCraft Document</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
<string>public.image</string>
</array>
<key>UTTypeIconFile</key>
<string>LightCraft</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array><string>pcraft</string></array>
<key>public.mime-type</key>
<array><string>application/x-lightcraft</string></array>
</dict>
</dict>
</array>
<!-- Types macOS may not know; the system's own declaration wins when it has one. -->
<key>UTImportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeIdentifier</key>
<string>com.adobe.photoshop-large-image</string>
<key>UTTypeDescription</key>
<string>Photoshop Large Document</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
<string>public.image</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array><string>psb</string></array>
</dict>
</dict>
<dict>
<key>UTTypeIdentifier</key>
<string>ai.storyteller.lightcraft.qoi</string>
<key>UTTypeDescription</key>
<string>QOI Image</string>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
<string>public.image</string>
</array>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array><string>qoi</string></array>
</dict>
</dict>
</array>
<!-- No UTI declarations: LightCraft has no document type of its own, and the formats it opens
(JPEG, PNG, TIFF, HEIC, the raw formats) are declared by the system or by another app.
Declaring PhotoCraft's `.pcraft` type here (and importing PSB and QOI) made Launch Services
type PhotoCraft documents as LightCraft's; `.pcraft` ended up with three claimant apps
(issue #1951). -->
</dict>
</plist>