diff --git a/README.md b/README.md index 42b164d6c..760360f22 100644 --- a/README.md +++ b/README.md @@ -451,7 +451,7 @@ CRAFT_FONTS_DIR=../craft-fonts cargo run --release -p lightcraft Without it LightCraft builds and runs the same, but Chinese and Japanese text have no glyphs. Fonts are never committed to this repo — the standard for what goes there lives with it: see the [craft-fonts README](https://github.com/storytold/craft-fonts#readme). -**Interface language:** **Edit → Language** (English, 简体中文, 繁體中文(台灣), 日本語, Português (Brasil), Español, Deutsch, Русский, Français, Українська, Polski, Čeština, Italiano, ქართული) or **Settings → General → +**Interface language:** **Edit → Language** (English, 简体中文, 繁體中文(台灣), 日本語, Português (Brasil), Español, Deutsch, Русский, Français, Українська, Polski, Čeština, Italiano, ქართული, Svenska) or **Settings → General → Language**; the choice applies immediately and persists. See [docs/localization.md](docs/localization.md). **Logs:** the desktop app writes its log to standard error and to `logs/lightcraft.log` in its settings folder diff --git a/assets/ATTRIBUTION.md b/assets/ATTRIBUTION.md index 7f8a8a719..2bdb934ff 100644 --- a/assets/ATTRIBUTION.md +++ b/assets/ATTRIBUTION.md @@ -34,6 +34,7 @@ covers a whole directory), or if a licence file referenced in the Licence column | `crates/ui-egui/locales/cs.json`, `crates/ui-egui/locales/cs-formats.json` | Czech interface catalogs | @Losminek with AI assistance (Codex) | original work: translations of English source phrases, reviewed against the app UI conventions; no external translation material | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) | 2026-10-11 | catalog coverage, Czech dates and count-neutral wording; independent scope/terminology review; native-speaker proofreading pending | | `crates/ui-egui/locales/it.json`, `crates/ui-egui/locales/it-formats.json` | Italian interface catalogs | @GabrielePecchioli with Claude Code; PhotoCraft, VectorCraft, PdfCraft and WordCraft translation contributors for reused labels | original translations from English source; 410 initial English-key matches reviewed from [PhotoCraft da3da09](https://github.com/storytold/photocraft/blob/da3da0942c14c1159f40c652afcf33584332c733/crates/ui-egui/src/i18n/it.tsv), [VectorCraft 5432821](https://github.com/storytold/vectorcraft/blob/543282148007bcb5633c493a5374cd26b0339c8d/crates/ui-egui/src/i18n/it.tsv), [PdfCraft e8e275c](https://github.com/storytold/pdfcraft/blob/e8e275cbd40ccd0dc6b56f82b16a575571043702/crates/ui-egui/src/i18n/it.tsv) and the Italian WordCraft catalog ([storytold/wordcraft#598](https://github.com/storytold/wordcraft/pull/598)); 46 of them retranslated where the sibling's meaning didn't fit a photo app | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`, also the source repositories' licences) | 2026-10-12 | adapted to LightCraft photo-development context, count-neutral labels for Italian plural agreement, reviewed placeholders | | `crates/ui-egui/locales/ka.json`, `crates/ui-egui/locales/ka-formats.json` | Georgian interface catalogs | Davit Matchakhelidze with Claude; WordCraft, GridCraft, PhotoCraft, FilmCraft and VectorCraft Georgian catalogs for reused labels | original translations from the English source (meaning-based, no vendor localization used); 450 English-key matches reused from the sibling Craft apps' Georgian catalogs | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) | 2026-10-12 | adapted to LightCraft photo-library and raw-development context; count-neutral numerals; placeholders checked | +| `crates/ui-egui/locales/sv.json`, `crates/ui-egui/locales/sv-formats.json` | Swedish interface catalogs | LightCraft contributors | original work: clean-room Swedish translations of English source phrases | MIT OR Apache-2.0 (`LICENSE-MIT`, `LICENSE-APACHE`) | 2026-10-15 | none | Notes - Fonts authored or published by Adobe (Source Sans/Serif/Code, Source Han, …) are not used, even though some are diff --git a/crates/ui-egui/locales/sv-formats.json b/crates/ui-egui/locales/sv-formats.json new file mode 100644 index 000000000..b7566e2e3 --- /dev/null +++ b/crates/ui-egui/locales/sv-formats.json @@ -0,0 +1,293 @@ +{ + " ({unsure} with several look-alike files: use Locate)": " ({unsure} med flera likadana filer: använd Leta upp)", + " ({} in Recently Deleted)": " ({} i Nyligen raderade)", + " in {g} group{}": " i {g} grupp{}", + " · kept, not applied: {}": " · behålls men tillämpas inte: {}", + " · {:.0}% clipped": " · {:.0} % klippt", + " · {failed} couldn't be rendered": " · {failed} kunde inte renderas", + " · {n} skipped (could not be rendered)": " · {n} överhoppade (kunde inte renderas)", + " · {queued} waiting": " · {queued} väntar", + " · {skipped} skipped (file exists)": " · {skipped} överhoppade (filen finns)", + " · {} duplicate{} skipped": " · {} dubblett{} överhoppade", + " · {} failed: {}": " · {} misslyckades: {}", + " · {} moved": " · {} flyttade", + " · {} not readable": " · {} kunde inte läsas", + " · {} original{} left at the source": " · {} original{} kvar i källan", + " · {} restored from Recently Deleted": " · {} återställda från Nyligen raderade", + " — Capture One won't import a list with ; , < or > in a keyword: {names}": " — Capture One importerar inte en lista med ; , < eller > i ett nyckelord: {names}", + " — kept but not applied: {}": " — behålls men tillämpas inte: {}", + " — left out, as a keyword list can't hold them: {names}": " — utelämnade, eftersom en nyckelordslista inte kan innehålla dem: {names}", + " — not carried over: {}{}": " — fördes inte över: {}{}", + "+{n} more": "+{n} till", + "+{} more": "+{} till", + ", {failed} file{} not readable": ", {failed} fil{} kunde inte läsas", + ", {} label": ", {} etikett", + ", {} star{}": ", {} stjärna{}", + "1 task is still running: {names}. Quitting stops it.": "1 uppgift körs fortfarande: {names}. Om du avslutar stoppas den.", + "; {kept} already had a location": "; {kept} hade redan en plats", + "; {n} gained synonyms": "; {n} fick synonymer", + "; {outside} outside its time range": "; {outside} utanför sitt tidsintervall", + "@{}: {} PRs, {} commits, +{} / −{} lines (Δ {}), +{} / −{} binary assets, {} – {}": "@{}: {} PR:er, {} commits, +{} / −{} rader (Δ {}), +{} / −{} binära resurser, {} – {}", + "Add {local_n} to My Photos": "Lägg till {local_n} i Mina foton", + "Add {} Photo{}": "Lägg till {} foto{}", + "Add {} Photo{}, restore {}": "Lägg till {} foto{}, återställ {}", + "Add “{}” to Favorites": "Lägg till ”{}” i Favoriter", + "Added {n} keyword{}": "Lade till {n} nyckelord{}", + "Added {n} photo{} to My Photos": "Lade till {n} foto{} i Mina foton", + "Added {n} photo{} to “{}”": "Lade till {n} foto{} i ”{}”", + "Added {what} to {name}": "Lade till {what} i {name}", + "Added “{keyword}” to {n} photo{}": "Lade till ”{keyword}” på {n} foto{}", + "Adding photos… {} of {}": "Lägger till foton… {} av {}", + "All {n} selected photos move by the same amount.": "Alla {n} markerade foton flyttas lika mycket.", + "Already in the library, in Recently Deleted: {} photo{} selected · right-click ▸ Restore, or Delete Permanently to import afresh": "Finns redan i biblioteket, i Nyligen raderade: {} foto{} markerade · högerklicka → Återställ, eller Radera permanent för att importera på nytt", + "Already in the library: {} photo{} selected in All Photos": "Finns redan i biblioteket: {} foto{} markerade i Alla foton", + "Applied {name}": "Tillämpade {name}", + "Apply to “{mask}” on Selected Photos": "Använd på ”{mask}” i markerade foton", + "Auto ({})": "Auto ({})", + "Auto Import: added {} photo{}": "Automatisk import: lade till {} foto{}", + "Auto Sync: edits apply to {n} photos": "Automatisk synkning: ändringar gäller {n} foton", + "Automatic ({} MB)": "Automatisk ({} MB)", + "Build 1:1 Previews ({scope})": "Bygg 1:1-förhandsgranskningar ({scope})", + "Build Smart Previews ({scope})": "Bygg smarta förhandsgranskningar ({scope})", + "Build Standard-Sized Previews ({scope})": "Bygg förhandsgranskningar i standardstorlek ({scope})", + "Building previews for {} photos…": "Bygger förhandsgranskningar för {} foton…", + "Click {}:1": "Klick {}:1", + "Couldn't open the editor: {e}": "Kunde inte öppna redigeraren: {e}", + "Create Keyword Tag Inside “{name}”…": "Skapa nyckelordstagg i ”{name}”…", + "Create the keyword “{name}”": "Skapa nyckelordet ”{name}”", + "Create {n} Virtual Copies": "Skapa {n} virtuella kopior", + "Creates {} stacks from {} of {scope}": "Skapar {} staplar av {} i {scope}", + "Decoder: {reason}": "Avkodare: {reason}", + "Delete \"{label}\"": "Radera ”{label}”", + "Delete \"{label}\" (and the mask)": "Radera ”{label}” (och masken)", + "Delete the effect preset “{name}”?": "Radera effektförinställningen ”{name}”?", + "Delete the keyword “{name}”?": "Radera nyckelordet ”{name}”?", + "Delete these {n} effect presets?": "Radera dessa {n} effektförinställningar?", + "Delete {n} effect preset{}? This can't be undone.": "Radera {n} effektförinställning{}? Det går inte att ångra.", + "Delete {n} Photos": "Radera {n} foton", + "Delete “{current}”": "Radera ”{current}”", + "Delete “{name}”?": "Radera ”{name}”?", + "Denoising {name}: {done} of {total} tiles{}": "Brusreducerar {name}: {done} av {total} rutor{}", + "Discard Smart Previews ({scope})": "Släng smarta förhandsgranskningar ({scope})", + "Done ({what}): {done} photo{plural}": "Klart ({what}): {done} foto{plural}", + "Downloads from {host}. Once it has arrived and checked out, LightCraft installs it, {after}.": "Laddas ned från {host}. När den har kommit fram och kontrollerats installerar LightCraft den, {after}.", + "Duplicate \"{label}\"": "Duplicera ”{label}”", + "Effect: {name}": "Effekt: {name}", + "Example: {example}": "Exempel: {example}", + "Exported to {path}": "Exporterade till {path}", + "Exported {n} keyword{}": "Exporterade {n} nyckelord{}", + "Exported {n} photo{}": "Exporterade {n} foto{}", + "Exported {ok} of {total} photo{}": "Exporterade {ok} av {total} foto{}", + "Exported {} effect preset{}": "Exporterade {} effektförinställning{}", + "Exported {} point curve preset{}": "Exporterade {} punktkurvförinställning{}", + "Exported {} preset{}": "Exporterade {} förinställning{}", + "Exporting {} of {total}": "Exporterar {} av {total}", + "Filter bar — {active} active filter{}": "Filterfält — {active} aktiva filter{}", + "Filtered: {label}": "Filtrerat: {label}", + "Focus {:.0}": "Fokus {:.0}", + "Folder “{}” (and its subfolders)": "Mappen ”{}” (och dess undermappar)", + "Found {n} missing photo{}; {left} still missing{unsure}": "Hittade {n} saknade foto{}; {left} saknas fortfarande{unsure}", + "Healed {n} dust spot{}": "Retuscherade {n} dammfläck{}", + "Import cancelled · {} photo{} added": "Importen avbröts · {} foto{} tillagda", + "Import failed: {e}": "Importen misslyckades: {e}", + "Import warnings ({n}):\n{warnings}": "Importvarningar ({n}):\n{warnings}", + "Imported {e} mask effect{} (Masking ▸ Effect)": "Importerade {e} maskeffekt{} (Maskering → Effekt)", + "Imported {name}": "Importerade {name}", + "Imported {n} point curve preset{}": "Importerade {n} punktkurvförinställning{}", + "Imported {n} preset{}": "Importerade {n} förinställning{}", + "Imported {n} preset{}, {f} file{} not readable": "Importerade {n} förinställning{}, {f} fil{} kunde inte läsas", + "Imported {profiles} profile{} (Profile browser ▸ their groups)": "Importerade {profiles} profil{} (Profilbläddrare → deras grupper)", + "Imported {} photo{}": "Importerade {} foto{}", + "In line for AI Denoise ({ahead} ahead)…": "I kö för AI-brusreducering ({ahead} före)…", + "Insert at the cursor (also written {})": "Infoga vid textmarkören (skrivs även {})", + "It is taken off {count} photo{}, with the keywords below it. Undo brings it back.": "Det tas bort från {count} foto{}, tillsammans med nyckelorden under det. Ångra återställer det.", + "Keywords of {n} selected photos": "Nyckelord för {n} markerade foton", + "Label Set: {name}": "Etikettuppsättning: {name}", + "LightCraft can't decode this raw variant yet ({}). You're editing the camera's embedded JPEG preview, which already includes the camera's picture style (e.g. Monochrome) and white balance.": "LightCraft kan inte avkoda den här raw-varianten än ({}). Du redigerar kamerans inbäddade JPEG-förhandsgranskning, som redan innehåller kamerans bildstil (t.ex. Monokrom) och vitbalans.", + "LightCraft could not open its window: {e}": "LightCraft kunde inte öppna sitt fönster: {e}", + "LightCraft could not open its window: {e}\n\nThe log file has the details: {path}": "LightCraft kunde inte öppna sitt fönster: {e}\n\nDetaljer finns i loggfilen: {path}", + "LightCraft stopped unexpectedly: {e}": "LightCraft avslutades oväntat: {e}", + "LightCraft stopped unexpectedly: {e}\n\nThe log file has the details: {path}": "LightCraft avslutades oväntat: {e}\n\nDetaljer finns i loggfilen: {path}", + "Lightroom catalog inspected: {photos} photos, {collections} collections, {missing} missing": "Lightroom-katalogen har granskats: {photos} foton, {collections} samlingar, {missing} saknas", + "Lightroom geometry for {path} was not preserved; Guided Upright saved transform is unsupported.": "Lightroom-geometrin för {path} bevarades inte; sparad transformering med guidad Upright stöds inte.", + "Lightroom geometry for {path} was not preserved; saved transform is ignored because Upright is Off.": "Lightroom-geometrin för {path} bevarades inte; den sparade transformeringen ignoreras eftersom Upright är av.", + "Lightroom geometry for {path} was not preserved; saved Upright transform is unsupported.": "Lightroom-geometrin för {path} bevarades inte; sparad Upright-transformering stöds inte.", + "Lightroom geometry was not preserved for {path}; {mode} will be recalculated.": "Lightroom-geometrin bevarades inte för {path}; {mode} beräknas om.", + "Lightroom import complete: {imported} photos added": "Lightroom-importen är klar: {imported} foton har lagts till", + "Lightroom import complete: {imported} photos added, {failed} failed": "Lightroom-importen är klar: {imported} foton har lagts till, {failed} misslyckades", + "Lightroom import complete: {imported} photos added; index warning: {warning}": "Lightroom-importen är klar: {imported} foton har lagts till; indexvarning: {warning}", + "Lightroom import failed: {e}{warning}": "Lightroom-importen misslyckades: {e}{warning}", + "Lightroom inspection failed: {e}{warning}": "Granskningen av Lightroom misslyckades: {e}{warning}", + "Making the denoised picture… {}%": "Skapar den brusreducerade bilden… {}%", + "Matches: {}": "Matchar: {}", + "Merging… {stage} {:.0}%": "Sammanfogar… {stage} {:.0}%", + "MIT OR Apache-2.0. Fonts: {} (OFL). Icons: original.": "MIT OR Apache-2.0. Typsnitt: {} (OFL). Ikoner: original.", + "Move {what} to Recently Deleted?": "Vill du flytta {what} till Nyligen raderade?", + "Moved {} photo(s)": "Flyttade {} foto(n)", + "Moved; {} photo(s) relinked": "Flyttat; {} foto(n) har länkats om", + "Named ({named_n})": "Namngivna ({named_n})", + "New Folder in “{name}”": "Ny mapp i ”{name}”", + "new, inside {parent}": "ny, inuti {parent}", + "none (CPU rendering): {why}": "ingen (CPU-rendering): {why}", + "not added to Apple Photos: {e}": "inte tillagt i Apple Photos: {e}", + "On {have} of {of} selected photos": "På {have} av {of} markerade foton", + "Painting “{k}”: click photos to add or remove it · Esc stops": "Målar ”{k}”: klicka på foton för att lägga till eller ta bort det · Esc avslutar", + "Paste into {n} photo{} — only settings that were copied are pasted": "Klistra in i {n} foto{} – endast inställningar som kopierades klistras in", + "Preset: {name}": "Förinställning: {name}", + "Preview only — editing the camera's embedded JPEG ({})": "Endast förhandsgranskning – du redigerar kamerans inbäddade JPEG ({})", + "Preview only — {}": "Endast förhandsgranskning – {}", + "Previews ready for {done} photo{plural}": "Förhandsgranskningar klara för {done} foto{plural}", + "Profile: {}": "Profil: {}", + "Proof Copy ({})": "Korrekturkopia ({})", + "Proof Preview · {}": "Korrekturförhandsgranskning · {}", + "Put inside “{parent}”": "Placera i ”{parent}”", + "Quick Develop · {n} photos": "Snabbframkalla · {n} foton", + "Quick Develop: {name}": "Snabbframkalla: {name}", + "Rated {}": "Betygsatt {}", + "Reading Lightroom catalog… {done} of {total}": "Läser Lightroom-katalogen… {done} av {total}", + "Reading photos… {done} of {total}": "Läser foton… {done} av {total}", + "Reading photos… {} of {}": "Läser foton… {} av {}", + "Redo {}": "Gör om {}", + "Remove “{name}”": "Ta bort ”{name}”", + "Remove “{name}” and its {count} photo{} from the library?": "Vill du ta bort ”{name}” och dess {count} foto{} från biblioteket?", + "Remove “{}” from Favorites": "Ta bort ”{}” från Favoriter", + "Removed from {}": "Borttaget från {}", + "Removed {what} from {name}": "Tog bort {what} från {name}", + "Removed “{name}” from {n} photos. Edit ▸ Undo puts it back.": "Tog bort ”{name}” från {n} foton. Redigera → Ångra lägger tillbaka det.", + "Rename {n} Photos…": "Byt namn på {n} foton…", + "Rename “{name}”": "Byt namn på ”{name}”", + "Renames {n} face{} across the library. The files are not changed.": "Byter namn på {n} ansikte{} i hela biblioteket. Filerna ändras inte.", + "Renames “{from}” on {n} photo{} (keywords below it too). Use | for levels, e.g. Travel|Italy. An existing name merges the two.": "Byter namn på ”{from}” på {n} foto{} (även nyckelord under det). Använd | för nivåer, t.ex. Resor|Italien. Ett befintligt namn sammanfogar de två.", + "Rendering on the CPU: {why}": "Renderar på processorn: {why}", + "Replace {} with:": "Ersätt {} med:", + "Reset {name}": "Återställ {name}", + "Reset {} Channel": "Återställ kanalen {}", + "Restore {}": "Återställ {}", + "Restore {} Photo{}": "Återställ {} foto{}", + "Restored {} photo{} from Recently Deleted": "Återställde {} foto{} från Nyligen raderade", + "Running on the processor: {}.": "Körs på processorn: {}.", + "Running on {}.": "Körs på {}.", + "Saved export preset “{}”": "Exportförinställningen ”{}” har sparats", + "Saved template {name}": "Mallen {name} har sparats", + "Scores {scope} for focus and exposure and finds similar shots taken within seconds of each other (bursts).": "Bedömer {scope} efter fokus och exponering och hittar likartade bilder tagna inom några sekunder från varandra (serier).", + "Show {hidden} hidden location{}": "Visa {hidden} dold plats{}", + "Showing {n} of {}": "Visar {n} av {}", + "Shows the model's terms, then downloads {} from {host}, installs it and starts using it. Nothing else is sent.": "Visar modellens villkor, hämtar sedan {} från {host}, installerar den och börjar använda den. Inget annat skickas.", + "Skipped {problem}": "Hoppade över {problem}", + "Slideshow exported: {what}": "Bildspelet har exporterats: {what}", + "Smart album: {}": "Smart album: {}", + "Tagged {n} photo{} from the tracklog": "Taggade {n} foto{} från spårloggen", + "Template preview: {name}": "Förhandsgranskning av mall: {name}", + "The SAM 3 download failed: {e}": "Hämtningen av SAM 3 misslyckades: {e}", + "The XMP sidecars of {n} photos couldn't be written (is their folder offline?). LightCraft keeps trying.": "XMP-sidofilerna för {n} foton kunde inte skrivas (är mappen offline?). LightCraft fortsätter att försöka.", + "the {n} selected photos": "de {n} markerade fotona", + "the {} photos in view": "de {} fotona i vyn", + "There is a keyword set “{name}” already": "Det finns redan en nyckelordsuppsättning ”{name}”", + "There is a “{name}” at the top level already. Merge the two?": "Det finns redan ett ”{name}” på översta nivån. Vill du sammanfoga dem?", + "these {count} photos": "dessa {count} foton", + "Trained on: {provenance}": "Tränad på: {provenance}", + "Undo {}": "Ångra {}", + "Unknown tag{s} {} stay{} as typed (see Tags)": "Okända taggar ({}) behåll{s}{} som de skrevs (se Taggar)", + "Update “{name}” with Current Settings": "Uppdatera ”{name}” med aktuella inställningar", + "Updated {name}": "{name} har uppdaterats", + "Updated “{name}”": "”{name}” har uppdaterats", + "Version {} — a clean-room, pure-Rust photo library and raw developer.": "Version {} – ett fotobibliotek och raw-framkallare i ren Rust, utvecklat enligt clean room-metoden.", + "Version: {}": "Version: {}", + "Virtual copy “{name}” of {of}": "Virtuell kopia ”{name}” av {of}", + "Working on {what} for {} photos…": "Arbetar med {what} för {} foton…", + "XMP adjustments were not imported for {path}: {fields}.": "XMP-justeringar importerades inte för {path}: {fields}.", + "XMP profile \"{profile}\" was not applied for {path}; colors may differ from Lightroom.": "XMP-profilen \"{profile}\" tillämpades inte för {path}; färgerna kan skilja sig från Lightroom.", + "{:.1} MB": "{:.1} MB", + "{count} more warnings.": "{count} varningar till.", + "{count} smart preview{} · {:.1} MB": "{count} smarta förhandsgranskning{} · {:.1} MB", + "{done} of {total}": "{done} av {total}", + "{done} of {total} MB": "{done} av {total} MB", + "{file} · {size}": "{file} · {size}", + "{f} folders (and their subfolders)": "{f} mappar (och deras undermappar)", + "{label} Grading": "Gradering: {label}", + "{label} {d:+} on every selected photo": "{label} {d:+} på varje markerat foto", + "{label} {index} of {n}": "{label} {index} av {n}", + "{label}, {n} photos": "{label}, {n} foton", + "{matching} of {t} photos": "{matching} av {t} foton", + "{matching} photos": "{matching} foton", + "{missing} originals are missing. Their catalog records are available; use Find Missing Photos to relink them.": "{missing} original saknas. Deras katalogposter finns kvar; använd Sök efter saknade foton för att länka om dem.", + "{mode} spot {} of {}": "{mode} – punkt {} av {}", + "{month}": "{month}", + "{month} {year}": "{month} {year}", + "{msg} ({failed} failed)": "{msg} ({failed} misslyckades)", + "{name} Label": "Etiketten {name}", + "{name} Off": "{name} av", + "{name} On": "{name} på", + "{name} opened for editing; it is stacked with the original": "{name} öppnades för redigering; den är staplad med originalet", + "{name} opened in the other editor": "{name} öppnades i den andra redigeraren", + "{name} · {terms}": "{name} · {terms}", + "{name} — double-click to reset it": "{name} – dubbelklicka för att återställa", + "{n} added to Apple Photos": "{n} tillagda i Apple Photos", + "{n} added to Apple Photos album “{album}”": "{n} har lagts till i Apple Photos-albumet ”{album}”", + "{n} change{} couldn't be written to disk: {e}\nIf you quit now, {} lost.": "{n} ändring{} kunde inte skrivas till disken: {e}\nOm du avslutar nu går {} förlorade.", + "{n} change{} saved in memory but not written to disk: {e}\nLightCraft retries automatically; quitting now would lose {}.": "{n} ändring{} har sparats i minnet men inte skrivits till disken: {e}\nLightCraft försöker igen automatiskt. Om du avslutar nu går {} förlorade.", + "{n} change{} saved in memory but not written to disk: {e} — LightCraft will retry": "{n} ändring{} har sparats i minnet men inte skrivits till disken: {e} – LightCraft försöker igen", + "{n} found · {sel} selected": "{n} hittade · {sel} markerade", + "{n} JPEG files": "{n} JPEG-filer", + "{n} Local photo{} skipped: albums hold library photos (Add to My Photos first)": "{n} lokala foto{} hoppades över: album innehåller foton från biblioteket (lägg först till i Mina foton)", + "{n} originals opened in the other editor": "{n} original har öppnats i den andra redigeraren", + "{n} pages": "{n} sidor", + "{n} photos": "{n} foton", + "{n} photos in view · {slides} slides · {time}": "{n} foton i vyn · {slides} bilder · {time}", + "{n} photos in {} are hidden by the filters above": "{n} foton i {} döljs av filtren ovan", + "{n} photos opened for editing; each is stacked with its original": "{n} foton har öppnats för redigering; vart och ett staplas med sitt original", + "{n} photo{}": "{n} foto{}", + "{n} photo{} match · updates automatically as photos change": "{n} foto{} matchar · uppdateras automatiskt när fotona ändras", + "{n} photo{} now · updates automatically as photos change": "{n} foto{} just nu · uppdateras automatiskt när fotona ändras", + "{n} preset{}": "{n} förinställning{}", + "{n} raws can now be developed from their raw data": "{n} raw-filer kan nu framkallas från sina rådata", + "{n} similar photo{} · View ▸ Clear Filters to see all": "{n} likartade foto{} · Visa → Rensa filter för att se alla", + "{n} tasks are still running: {names}. Quitting stops them.": "{n} uppgifter körs fortfarande: {names}. Om du avslutar stoppas de.", + "{n} {noun}": "{n} {noun}", + "{pct} %": "{pct} %", + "{photos} catalog records processed; {collections} collections.": "{photos} katalogposter bearbetade; {collections} samlingar.", + "{pid} (missing)": "{pid} (saknas)", + "{sel_n} selected · {counted}": "{sel_n} markerade · {counted}", + "{size} GB": "{size} GB", + "{stage}… {:.0}%": "{stage}… {:.0} %", + "{s} s of AV1 video": "{s} s AV1-video", + "{verb} {n} Photo{}": "{verb} {n} foto{}", + "{weekday}, {day}": "{weekday} {day}", + "{weekday}, {day} {month} {year}": "{weekday} {day} {month} {year}", + "{what} merge added": "{what}-sammanfogning tillagd", + "{what} merge added at {mp}, the largest a panorama can be (its full size is {full})": "{what}-sammanfogning tillagd med {mp}, den största storlek ett panorama kan ha (full storlek är {full})", + "{what} merge added at {mp}: its full size, {full}, needs more memory than this computer has": "{what}-sammanfogning tillagd med {mp}: full storlek, {full}, kräver mer minne än den här datorn har", + "{what} merge cancelled": "{what}-sammanfogning avbruten", + "{what} merge failed: {e}": "{what}-sammanfogning misslyckades: {e}", + "{year}": "{year}", + "{{date:…}} directives: {}": "{{date:…}}-direktiv: {}", + "{} and higher": "{} och högre", + "{} contributors · {} commits": "{} bidragsgivare · {} commits", + "{} failed": "{} misslyckades", + "{} files": "{} filer", + "{} files and {f} folder{}": "{} filer och {f} mapp{}", + "{} item{}": "{} objekt{}", + "{} KB": "{} kB", + "{} label (click more labels to show any of them)": "Etiketten {} (klicka på fler etiketter för att visa foton med någon av dem)", + "{} MB": "{} MB", + "{} of 4 guides — drag along lines that should be vertical or horizontal.": "{} av 4 stödlinjer – dra längs linjer som ska vara vertikala eller horisontella.", + "{} of {} from {host}": "{} av {} från {host}", + "{} photos": "{} foton", + "{} photos · exposures {} EV": "{} foton · exponeringar {} EV", + "{} photos · {} · {:.0}° × {:.0}°": "{} foton · {} · {:.0}° × {:.0}°", + "{} photo{} not readable": "{} foto{} kunde inte läsas", + "{} sample{}": "{} sample{}", + "{} sec": "{} s", + "{} spot(s) on this photo": "{} fläck(ar) på det här fotot", + "{} · {}. Kept in the library's “denoise” folder; the oldest ones that no photo uses go first when the limit is reached.": "{} · {}. Sparas i bibliotekets mapp ”denoise”; de äldsta som inget foto använder tas bort först när gränsen nås.", + "{} — show their photos": "{} – visa deras foton", + "· {dups} already in the library": "· {dups} finns redan i biblioteket", + "· {in_source} identical copies": "· {in_source} identiska kopior", + "· {n} photo{}": "· {n} foto{}", + "· {trashed} in Recently Deleted": "· {trashed} i Nyligen raderade", + "“{parent}” has a “{name}” already. Merge the two?": "”{parent}” har redan en ”{name}”. Vill du sammanfoga dem?", + "“{to}” is already a person. Combining them makes one person; Undo separates them again.": "”{to}” är redan en person. Om du kombinerar dem blir de en person; Ångra skiljer dem åt igen.", + "• {assumption}": "• {assumption}", + "… and {more} more": "… och {more} till", + "…and {more} more": "…och {more} till" +} diff --git a/crates/ui-egui/locales/sv.json b/crates/ui-egui/locales/sv.json new file mode 100644 index 000000000..76f08c2d3 --- /dev/null +++ b/crates/ui-egui/locales/sv.json @@ -0,0 +1,2418 @@ +{ + " (library default)": " (bibliotekets standard)", + " (inverted)": " (inverterad)", + " · best of its burst": " · bäst i sin bildserie", + " · in a burst": " · i en bildserie", + "\"saved in memory but not written to disk\", the top bar shows a warning, and LightCraft keeps retrying until the": "\"sparad i minnet men inte skriven till disk\", det övre fältet visar en varning och LightCraft fortsätter att försöka tills", + "#106): a DNG is checked against the raw data, written to a temp file, synced and read back before it gets its": "#106): en DNG kontrolleras mot rådata, skrivs till en temporär fil, synkas och läses tillbaka innan den får sitt", + "% of all commits": "% av alla commits", + "& Containing": "& innehåller", + "(`gpuReason`, `gpuFallback`), Help ▸ System Info and Settings ▸ Performance say why the GPU isn't": "(`gpuReason`, `gpuFallback`), Hjälp → Systeminfo och Inställningar → Prestanda anger varför GPU:n inte", + "(e.g. D750, D780, D850, D7500, Z 50) no longer render nearly black or with crushed shadows: their black level was": "(t.ex. D750, D780, D850, D7500, Z 50) renderas inte längre nästan svarta eller med klippta skuggor: deras svartnivå var", + "(issue #94): an HTTP request from a web page can no longer carry a command in its body. Lines are capped at": "(ärende #94): en HTTP-begäran från en webbsida kan inte längre bära ett kommando i sin brödtext. Rader begränsas till", + "(not in the library)": "(inte i biblioteket)", + "+ Group": "+ Grupp", + "+ Rule": "+ Regel", + ", picked": ", vald", + ", rejected": ", avvisad", + "0: nothing is rejected.": "0: ingenting avvisas.", + "1 day": "1 dag", + "1 raw can now be developed from its raw data": "1 råbild kan nu framkallas från sina rådata", + "123 on studio-mac)\") instead of letting both write and silently drop each other's edits. A crash never leaves the": "123 på studio-mac)\") i stället för att låta båda skriva och tyst kasta varandras ändringar. En krasch lämnar aldrig", + "1620 × 1080 preview, and import with their metadata: capture time, camera, lens, exposure, GPS and XMP. Their raw": "1620 × 1080-förhandsgranskning, och importeras med sina metadata: tagningstid, kamera, objektiv, exponering, GPS och XMP. Deras rå", + "2026-04 or 2026-04-12": "2026-04 eller 2026-04-12", + "23 new built-in presets: Portrait, Landscape, Urban, Food, Seasons, Vintage and B&W toners.": "23 nya inbyggda förinställningar: Porträtt, Landskap, Urban, Mat, Årstider, Vintage och svartvita toningar.", + "4 MiB and connections at 16.": "4 MiB och anslutningar till 16.", + "630 drivers): on Windows the window and GPU rendering use DirectX 12 only and never load the Vulkan driver unless": "630-drivrutiner): i Windows använder fönstret och GPU-renderingen endast DirectX 12 och läser aldrig in Vulkan-drivrutinen om inte", + "= exactly": "= exakt", + "`img_1-1.JPG`; on case-insensitive volumes the case change still goes through.": "`img_1-1.JPG`; på skiftlägesokänsliga volymer går ändringen av skiftläge ändå igenom.", + "`Photos/2026/20260114/20260114_001.jpg`) together with their XMP sidecars; each original leaves the card only after its": "`Photos/2026/20260114/20260114_001.jpg`) tillsammans med sina XMP-sidofiler; varje original lämnar kortet först efter att dess", + "A 16:9 frame with black bars above and below, the title in the corner, fades through black and a closing card.": "En 16:9-bild med svarta fält ovanför och nedanför, titeln i hörnet, toningar via svart och ett avslutande kort.", + "A blank template keeps the original names.": "En tom mall behåller originalnamnen.", + "A change that can't be saved to disk (full or unplugged drive) is no longer silent: the command reports": "En ändring som inte kan sparas till disk (full eller urkopplad enhet) är inte längre tyst: kommandot rapporterar", + "A dark slate backdrop with the exposure, ISO and focal length, then the camera and lens, under each photo.": "En mörk skifferbakgrund med exponering, ISO och brännvidd, sedan kamera och objektiv, under varje foto.", + "A filter is hiding this view's photos: change it, or clear it (View → Clear Filters)": "Ett filter döljer den här vyns foton: ändra det eller rensa det (Visa → Rensa filter)", + "A folder is already being synchronized": "En mapp synkroniseras redan", + "A folder is being synchronized": "En mapp synkroniseras", + "a full drive) no longer counts as built and Build Smart Previews replaces it.": "en full enhet) räknas inte längre som byggd och Bygg smarta förhandsgranskningar ersätter den.", + "A keyword set needs a name": "En nyckelordsuppsättning behöver ett namn", + "A library is open in one program at a time (issue #99): opening a library that LightCraft or `lightcraft-cli` already": "Ett bibliotek kan bara vara öppet i ett program åt gången (ärende #99): att öppna ett bibliotek som LightCraft eller `lightcraft-cli` redan", + "A light grey wall with a white mat and a soft shadow; the caption and the rating under the photo.": "En ljusgrå vägg med vit passepartout och en mjuk skugga; bildtexten och betyget under fotot.", + "a literal %": "ett bokstavligt %", + "A one-time download of about": "En engångsnedladdning på cirka", + "A pen's pressure sets the size and flow of the brush": "Pennans tryck styr penselns storlek och flöde", + "a removed photo": "ett borttaget foto", + "A save that fails part-way (a full disk, a network share that drops) no longer looks like a damaged catalog": "En sparning som misslyckas halvvägs (en full disk, en nätverksresurs som tappas) ser inte längre ut som en skadad katalog", + "A sleeping NAS, a dropped network share or a USB drive spinning up no longer freezes the window (issue #104):": "En sovande NAS, en tappad nätverksresurs eller en USB-enhet som startar fryser inte längre fönstret (ärende #104):", + "A slide stays up for its duration, its fade in included. A fade of 0 cuts.": "En bild visas under sin längd, inklusive intoningen. En toning på 0 ger ett snitt.", + "About": "Om", + "About LightCraft": "Om LightCraft", + "Accept & Download": "Acceptera och hämta", + "Active": "Aktiv", + "Activity": "Aktivitet", + "Actual size": "Verklig storlek", + "Add": "Addera", + "Add a model file…": "Lägg till en modellfil…", + "Add a rule (⌥-click: a group)": "Lägg till en regel (⌥-klick: en grupp)", + "Add Catchlight": "Lägg till ögonreflex", + "Add Face Model…": "Lägg till ansiktsmodell…", + "Add Folder to Local": "Lägg till mapp i Lokalt", + "Add in place": "Lägg till på plats", + "Add in place: the library references the files where they are; nothing is copied or moved.": "Lägg till på plats: biblioteket refererar till filerna där de ligger; ingenting kopieras eller flyttas.", + "Add keyword": "Lägg till nyckelord", + "Add Mask": "Lägg till mask", + "Add number": "Lägg till nummer", + "Add Object Click": "Lägg till objektklick", + "Add Point Color Sample": "Lägg till punktfärgprov", + "Add Red Eye Correction": "Lägg till korrigering av röda ögon", + "Add Remove Spot": "Lägg till fläckborttagning", + "Add Selected Photos": "Lägg till markerade foton", + "Add text overlay": "Lägg till textöverlägg", + "Add to": "Lägg till i", + "Add to Album": "Lägg till i album", + "Add to All Selected Photos": "Lägg till i alla markerade foton", + "Add to Apple Photos": "Lägg till i Apple Photos", + "Add to Favorites": "Lägg till i favoriter", + "Add to favorites": "Lägg till i favoriter", + "Add to Local": "Lägg till i Lokalt", + "Add to My Photos": "Lägg till i Mina foton", + "Add to My Photos First": "Lägg till i Mina foton först", + "Add to Selected Photos": "Lägg till i markerade foton", + "Add to Target Album": "Lägg till i målalbum", + "Add to this mask": "Lägg till i den här masken", + "Add/Subtract/Intersect Mask": "Addera/subtrahera/skär mask", + "Added to photos you import that don't already have it.": "Läggs till på foton du importerar som inte redan har det.", + "Adding": "Lägger till", + "Adding Lightroom photos…": "Lägger till Lightroom-foton…", + "Adding photos…": "Lägger till foton…", + "Adding to Apple Photos": "Lägger till i Apple Photos", + "Adding to Apple Photos…": "Lägger till i Apple Photos…", + "Advanced search…": "Avancerad sökning…", + "After": "Efter", + "After 30 days": "Efter 30 dagar", + "After 7 days": "Efter 7 dagar", + "After 90 days": "Efter 90 dagar", + "After a year": "Efter ett år", + "After installation, AI Denoise will turn on for the requesting photo.": "Efter installationen aktiveras AI-brusreducering för fotot som begärde den.", + "afterwards (issue #101): the partial write is cut off before LightCraft retries, so the next launch replays every": "efteråt (ärende #101): den ofullständiga skrivningen kapas innan LightCraft försöker igen, så nästa start spelar upp varje", + "again. Change the period (or turn it off) in Settings → Performance.": "igen. Ändra intervallet (eller stäng av det) i Inställningar → Prestanda.", + "against the library's originals no longer scans the whole library when nothing is at that path.": "mot bibliotekets original söker inte längre igenom hela biblioteket när det inte finns något på den sökvägen.", + "AI Denoise": "AI-brusreducering", + "AI Denoise is enabled on the requesting photo": "AI-brusreducering är aktiverad på fotot som begärde den", + "AI Denoise is off: press Use on a model.": "AI-brusreducering är av: tryck på Använd på en modell.", + "AI Denoise Model": "Modell för AI-brusreducering", + "AI Denoise needs a model. Install one in Settings.": "AI-brusreducering behöver en modell. Installera en i Inställningar.", + "AI Mask Model Status": "Status för AI-maskmodell", + "AI masks with SAM 3 (Object and Describe in the Masking panel): click an object to select it (⌥-click leaves a": "AI-masker med SAM 3 (Objekt och Beskriv i panelen Maskering): klicka på ett objekt för att markera det (⌥-klick lämnar ett", + "Album": "Album", + "Albums": "Album", + "Albums hold library photos: Add to My Photos first": "Album innehåller biblioteksfoton: lägg till i Mina foton först", + "All": "Alla", + "all": "alla", + "All Metadata": "Alla metadata", + "All Metadata…": "Alla metadata…", + "All Photos": "Alla foton", + "All rights reserved": "Alla rättigheter förbehållna", + "All the photos imported from this disk are included.": "Alla foton som importerats från den här disken ingår.", + "All types": "Alla typer", + "already has a `thumbs/` folder of other pictures no longer loses them when the cache is trimmed or cleared.": "redan har en `thumbs/`-mapp med andra bilder förlorar dem inte längre när cachen trimmas eller rensas.", + "Already installed. Installing again is harmless.": "Redan installerad. Det skadar inte att installera igen.", + "Already installed. Remove it before installing a replacement.": "Redan installerad. Ta bort den innan du installerar en ersättare.", + "Also the masks of the same name on the other selected photos": "Även maskerna med samma namn på de andra markerade fotona", + "Alt Text": "Alternativtext", + "Always": "Alltid", + "Amount": "Antal", + "Analyzing the photo for AI masks…": "Analyserar fotot för AI-masker…", + "Anchored to": "Förankrad vid", + "and": "och", + "and checks the file before using it. Masks keep their selection, so they render and export without the model.": "och kontrollerar filen innan den används. Masker behåller sin markering, så de renderas och exporteras utan modellen.", + "and every imported photo as one zip, and File ▸ Restore Library from Backup… brings it back (the current library": "och alla importerade foton som en zip-fil, och Arkiv → Återställ bibliotek från säkerhetskopia… hämtar tillbaka det (det aktuella biblioteket", + "and never freezes the window. It is optional and not part of LightCraft (Meta's SAM License, about 3.4 GB): the": "och fryser aldrig fönstret. Den är valfri och ingår inte i LightCraft (Metas SAM-licens, cirka 3,4 GB):", + "Angle": "Vinkel", + "any": "någon", + "Any camera": "Valfri kamera", + "Any keyword": "Valfritt nyckelord", + "Any lens": "Valfri lins", + "Any Searchable Text": "All sökbar text", + "Aperture": "Bländare", + "Appearance": "Utseende", + "Appearance Mode": "Utseendeläge", + "Appearance Settings…": "Utseendeinställningar…", + "Apple Photos Imports": "Importer från Apple Photos", + "Application": "Program", + "Apply": "Använd", + "Apply Color Label Set": "Använd färgetikettuppsättning", + "Apply Filter Preset": "Använd filterförinställning", + "Apply Metadata Preset": "Använd metadataförinställning", + "Apply Point Curve Preset": "Använd punktkurvsförinställning", + "Apply Preset": "Använd förinställning", + "Apply Settings JSON": "Använd inställnings-JSON", + "Apply the local tone mapping stored in the raw (Apple ProRAW), as the camera renders it": "Använd den lokala tonmappningen som lagras i raw-filen (Apple ProRAW), så som kameran renderar den", + "Apply to All Masks": "Använd på alla masker", + "Approved": "Godkänd", + "Aqua": "Akvamarin", + "Aqua Hue": "Nyans akvamarin", + "Aqua Luminance": "Luminans akvamarin", + "Aqua Saturation": "Mättnad akvamarin", + "are empty": "är tomma", + "aren't empty": "är inte tomma", + "Arrange Panel": "Panelen Ordna", + "ArtCraft Website": "ArtCrafts webbplats", + "ArtCraft — more creative apps": "ArtCraft — fler kreativa appar", + "as `.corrupt-