From 46881e0d5f89cb23ec32e442ba5e75de4732a67f Mon Sep 17 00:00:00 2001 From: Patrik Lermon Date: Fri, 30 Oct 2026 10:35:36 +0100 Subject: [PATCH] Swedish interface translation (sv) Adds Swedish (Svenska) as an interface language in the menu, panel and effect catalogs, written from the English source. The effect rows are partial like Japanese and Georgian: an effect without a Swedish row draws its English name, so a new effect does not block other PRs (#2244). Co-Authored-By: Claude Opus 5.5 --- ROADMAP.md | 2 +- crates/engine/src/settings/prefs/choices.rs | 1 + crates/engine/src/tests/settings.rs | 17 + crates/ui-egui/src/i18n.rs | 750 +++++++++++- crates/ui-egui/src/i18n/effects.rs | 374 +++++- crates/ui-egui/src/i18n/ui.rs | 1186 ++++++++++++++++++- crates/ui-egui/src/native_menu.rs | 23 + docs/gaps.md | 4 +- docs/localization-parity.md | 9 +- docs/preferences.md | 2 +- 10 files changed, 2353 insertions(+), 15 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 740ec6010..8d3f4101b 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -97,7 +97,7 @@ UI strings translated out of ≈ 4,200 (detail: [localization-parity.md](docs/lo | Korean | none | 0% | | Vietnamese | none | 0% | -Also shipped: Traditional Chinese (partial, 38%), Ukrainian (partial, 29%), Czech (partial, 29%), Polish (partial, 34%), Georgian (partial, 39%; native-speaker reviewed) and Russian (menus only, 15%). No other language has had +Also shipped: Traditional Chinese (partial, 38%), Ukrainian (partial, 29%), Czech (partial, 29%), Polish (partial, 34%), Georgian (partial, 39%; native-speaker reviewed), Russian (menus only, 15%) and Swedish (menus, panels and effect names; not yet measured). No other language has had native-speaker review. ## Upcoming diff --git a/crates/engine/src/settings/prefs/choices.rs b/crates/engine/src/settings/prefs/choices.rs index 8935507a6..20f7a482e 100644 --- a/crates/engine/src/settings/prefs/choices.rs +++ b/crates/engine/src/settings/prefs/choices.rs @@ -10,6 +10,7 @@ pub const LANGUAGES: &[(&str, &str)] = &[ ("Français", "fr"), ("Polski", "pl"), ("Português (Brasil)", "pt-br"), + ("Svenska", "sv"), ("Русский", "ru"), ("Українська", "uk"), ("ქართული", "ka"), diff --git a/crates/engine/src/tests/settings.rs b/crates/engine/src/tests/settings.rs index 79e9fa727..bd1269bed 100644 --- a/crates/engine/src/tests/settings.rs +++ b/crates/engine/src/tests/settings.rs @@ -1123,6 +1123,23 @@ fn interface_language_is_validated_persisted_and_backward_compatible() { assert_eq!(Prefs::from_json(r#"{"general":{"language":"en"}}"#).general.language, "en", "a chosen language stays"); } +/// Swedish is stored as `sv` rather than a locale tag, and persists like every other catalog. +#[test] +fn swedish_interface_language_is_validated_and_persisted() { + let store = Arc::new(MemoryConfig::default()); + let mut s = Session { config: Some(store.clone()), ..Default::default() }; + assert!(crate::prefs::LANGUAGES.contains(&("Svenska", "sv"))); + for value in ["sv-SE", "sv_SE", "SV"] { + assert!(s.execute("prefs.set", json!({"key": "general.language", "value": value})).is_err(), "{value}"); + } + s.execute("prefs.set", json!({"key": "general.language", "value": "sv"})).unwrap(); + assert_eq!(s.execute("prefs.get", json!({"key": "general.language"})).unwrap(), json!("sv")); + let mut sv = Session { config: Some(store), ..Default::default() }; + sv.load_settings(); + assert_eq!(sv.prefs.general.language, "sv"); + assert_eq!(Prefs::from_json(r#"{"general":{"language":"sv"}}"#).general.language, "sv"); +} + #[test] fn unicode_label_colors_fall_back_without_panicking() { use effectcraft_color::Label; diff --git a/crates/ui-egui/src/i18n.rs b/crates/ui-egui/src/i18n.rs index 9eed465e4..290f98739 100644 --- a/crates/ui-egui/src/i18n.rs +++ b/crates/ui-egui/src/i18n.rs @@ -15,7 +15,7 @@ pub(crate) use ui::catalog_characters; pub(crate) use ui::{set_current, tr, tr_args}; /// Every language with a catalog, in the order Settings ▸ General ▸ Language lists them. -const CATALOG_CODES: [&str; 12] = ["cs", "de", "es", "fr", "pl", "pt-br", "ru", "uk", "ka", "ja", "zh-hans", "zh-hant"]; +const CATALOG_CODES: [&str; 13] = ["cs", "de", "es", "fr", "pl", "pt-br", "sv", "ru", "uk", "ka", "ja", "zh-hans", "zh-hant"]; /// The active interface language: the stored preference when it names a catalog, otherwise `en` /// (English is the source of every label and needs no lookup). @@ -76,6 +76,11 @@ pub(crate) fn georgian(app: &EffectcraftApp) -> bool { language(app) == "ka" } +/// The UI is in Swedish. +pub(crate) fn swedish(app: &EffectcraftApp) -> bool { + language(app) == "sv" +} + /// Settings ▸ General ▸ Language ▸ Match System: the operating system's interface language /// where EffectCraft has it, else English (#229), as After Effects installs in the system's /// language. The browser build follows the locales its page passes in ([`set_system_locales`]). @@ -128,7 +133,7 @@ fn web_draws(language: &str) -> bool { /// The language EffectCraft shows for a BCP 47 locale (`ja-JP` → `ja`, `zh-Hans-CN` → `zh-hans`, /// `zh-TW` → `zh-hant`, `uk-UA` → `uk`, `es-ES` → `es`, `pt-BR` → `pt-br`, `cs-CZ` → `cs`, -/// `ka-GE` → `ka`, `ru-RU` → `ru`, `de-AT` → `de`, `fr-CA` → `fr`). +/// `ka-GE` → `ka`, `ru-RU` → `ru`, `de-AT` → `de`, `fr-CA` → `fr`, `sv-SE` → `sv`). fn supported(locale: Option<&str>) -> &'static str { let Some(locale) = locale else { return "en" }; let mut parts = locale.split(['-', '_']); @@ -144,6 +149,7 @@ fn supported(locale: Option<&str>) -> &'static str { "ru" => "ru", "de" => "de", "fr" => "fr", + "sv" => "sv", // The only Portuguese catalog: Brazil's, also for Portugal rather than English. "pt" => "pt-br", "zh" => { @@ -193,6 +199,13 @@ pub(crate) fn label<'a>(app: &EffectcraftApp, command: &str, source: &'a str) -> _ => {} } } + if language == "sv" && matches!(command, "file.revealInFinder" | "layer.revealInFinder") { + match source { + "Reveal in Explorer" => return "Visa i Utforskaren", + "Reveal in File Manager" => return "Visa i filhanteraren", + _ => {} + } + } menu_catalog(language).map_or(source, |catalog| lookup(catalog, command, source)) } @@ -211,6 +224,7 @@ fn menu_catalog(language: &str) -> Option<&'static [(&'static str, &'static str, "cs" => CZECH, "pl" => POLISH, "ka" => GEORGIAN, + "sv" => SWEDISH, _ => return None, }) } @@ -287,6 +301,7 @@ pub(crate) fn entry(app: &EffectcraftApp, e: &MenuEntry, shown: String) -> Strin "ka" => Some(("დაბრუნება:", "დაბრუნება შეუძლებელია", "ხელახლა შესრულება:", "ხელახლა შესრულება შეუძლებელია")), // A colon before the history's (untranslated) action name: "Отменить: Comp1". "ru" => Some(("Отменить:", "Нечего отменять", "Повторить:", "Нечего повторять")), + "sv" => Some(("Ångra", "Det går inte att ångra", "Gör om", "Det går inte att göra om")), _ => None, }; match e.command.as_str() { @@ -428,6 +443,17 @@ pub(crate) fn submenu(app: &EffectcraftApp, source: &str, shown: String) -> Stri return format!("მალსახმობის მინიჭება 3D ხედისთვის „{name}“"); } } + "sv" => { + if source == "Assign Shortcut to Workspace" { + if let Some(name) = shown.strip_prefix("Assign Shortcut to “").and_then(|s| s.strip_suffix("” Workspace")) { + return format!("Tilldela kortkommando till arbetslayouten ”{name}”"); + } + } else if source == "Assign Shortcut to 3D View" + && let Some(name) = shown.strip_prefix("Assign Shortcut to “").and_then(|s| s.strip_suffix('”')) + { + return format!("Tilldela kortkommando till 3D-vyn ”{name}”"); + } + } _ => {} } label(app, "", &shown).into() @@ -1072,6 +1098,642 @@ const SIMPLIFIED_CHINESE: &[(&str, &str, &str)] = &[ ("file.openDemoProject", "Open Demo Project", "打开示例项目"), ]; +/// Swedish (`sv`), written from the English source. +const SWEDISH: &[(&str, &str, &str)] = &[ + ("", "EffectCraft", "EffectCraft"), + ("app.about", "About EffectCraft...", "Om EffectCraft..."), + ("", "Settings...", "Inställningar..."), + ("app.settings", "General...", "Allmänt..."), + ("app.settings", "Startup & Repair...", "Start och reparation..."), + ("app.settings", "Project...", "Projekt..."), + ("app.settings", "Composition...", "Komposition..."), + ("app.settings", "Previews...", "Förhandsgranskningar..."), + ("app.settings", "Appearance...", "Utseende..."), + ("app.settings", "Grids & Guides...", "Rutnät och stödlinjer..."), + ("app.settings", "Labels...", "Etiketter..."), + ("app.settings", "Type...", "Text..."), + ("app.settings", "Import...", "Importera..."), + ("app.settings", "Export...", "Exportera..."), + ("app.settings", "Audio...", "Ljud..."), + ("app.settings", "Disk...", "Disk..."), + ("app.settings", "Memory & CPU...", "Minne och CPU..."), + ("app.settings", "Video...", "Video..."), + ("app.settings", "3D...", "3D..."), + ("app.settings", "Scripting & Expressions...", "Skript och uttryck..."), + ("app.hide", "Hide EffectCraft", "Dölj EffectCraft"), + ("app.hideOthers", "Hide Others", "Göm övriga"), + ("app.showAll", "Show All", "Visa alla"), + ("app.quit", "Quit EffectCraft", "Avsluta EffectCraft"), + ("", "File", "Arkiv"), + ("", "New", "Nytt"), + ("file.newProject", "New Project", "Nytt projekt"), + ("file.newFromTemplate", "New Project from Template...", "Nytt projekt från mall..."), + ("project.newFolder", "New Folder", "Ny mapp"), + ("file.open", "Open Project...", "Öppna projekt..."), + ("", "Open Recent", "Öppna senaste"), + ("file.clearRecent", "Clear Recent Projects", "Rensa senaste projekt"), + ("file.close", "Close", "Stäng"), + ("file.closeProject", "Close Project", "Stäng projekt"), + ("file.save", "Save", "Spara"), + ("", "Save As", "Spara som"), + ("file.saveAs", "Save As...", "Spara som..."), + ("file.saveCopy", "Save a Copy...", "Spara en kopia..."), + ("file.saveCopyAsXml", "Save a Copy As XML...", "Spara en kopia som XML..."), + ("templates.saveAs", "Save as Template...", "Spara som mall..."), + ("file.incrementAndSave", "Increment and Save", "Räkna upp och spara"), + ("file.revert", "Revert", "Återgå"), + ("", "Import", "Importera"), + ("file.import", "File...", "Fil..."), + ("file.importMultiple", "Multiple Files...", "Flera filer..."), + ("file.importTimeline", "Adobe Premiere Pro Project...", "Adobe Premiere Pro-projekt..."), + ("file.importProject", "EffectCraft Project...", "EffectCraft-projekt..."), + ("file.importPlaceholder", "Placeholder...", "Platshållare..."), + ("file.importSolid", "Solid...", "Enfärgad..."), + ("file.importLottie", "Lottie...", "Lottie..."), + ("file.importVanishingPoint", "Vanishing Point (.vpe)...", "Fluktpunkt (.vpe)..."), + ("essential.importTemplate", "Essential Graphics Template...", "Mall för grundläggande grafik..."), + ("", "Import Recent Footage", "Importera senaste material"), + ("file.clearRecentFootage", "Clear Recent Footage", "Rensa senaste filmmaterial"), + ("", "Export", "Exportera"), + ("renderQueue.add", "Add to Render Queue", "Lägg till i renderingskön"), + ("file.exportTimeline", "Adobe Premiere Pro Project...", "Adobe Premiere Pro-projekt..."), + ("file.exportLottie", "Lottie JSON...", "Lottie JSON..."), + ("essential.exportTemplate", "Essential Graphics Template...", "Mall för grundläggande grafik..."), + ("app.find", "Find", "Sök"), + ("layer.addItem", "Add Footage to Comp", "Lägg till filmmaterial i komposition"), + ("file.newCompFromSelection", "New Comp from Selection...", "Ny komposition från markering..."), + ("", "Dependencies", "Beroenden"), + ("file.collectFiles", "Collect Files...", "Samla filer..."), + ("file.consolidateFootage", "Consolidate All Footage", "Konsolidera allt filmmaterial"), + ("file.removeUnusedFootage", "Remove Unused Footage", "Ta bort oanvänt filmmaterial"), + ("file.reduceProject", "Reduce Project", "Reducera projekt"), + ("file.findMissing", "Find Missing Effects", "Sök saknade effekter"), + ("file.findMissing", "Find Missing Fonts", "Sök saknade typsnitt"), + ("file.findMissing", "Find Missing Footage", "Sök saknat filmmaterial"), + ("file.relinkFootage", "Relink Missing Footage...", "Länka om saknat filmmaterial..."), + ("file.watchFolder", "Watch Folder...", "Bevakad mapp..."), + ("", "Scripts", "Skript"), + ("file.installScript", "Install Script File...", "Installera skriptfil..."), + ("file.installScriptUIPanel", "Install ScriptUI Panel...", "Installera ScriptUI-panel..."), + ("file.runScript", "Run Script File...", "Kör skriptfil..."), + ("", "Create Proxy", "Skapa proxy"), + ("file.createProxy", "Still...", "Stillbild..."), + ("file.createProxy", "Movie...", "Film..."), + ("", "Set Proxy", "Ange proxy"), + ("file.setProxy", "File...", "Fil..."), + ("file.setProxyNone", "None", "Ingen"), + ("", "Interpret Footage", "Tolka material"), + ("file.interpretFootage", "Main...", "Huvud..."), + ("file.interpretProxy", "Proxy...", "Proxy..."), + ("file.rememberInterpretation", "Remember Interpretation", "Kom ihåg tolkning"), + ("file.applyInterpretation", "Apply Interpretation", "Använd tolkning"), + ("", "Replace Footage", "Ersätt material"), + ("file.replaceFootage", "File...", "Fil..."), + ("file.replaceWithPlaceholder", "Placeholder...", "Platshållare..."), + ("file.replaceWithSolid", "Solid...", "Enfärgad..."), + ("file.replaceWithLayeredComp", "With Layered Comp", "Med komposition i lager"), + ("file.reloadFootage", "Reload Footage", "Läs in filmmaterial igen"), + ("file.revealInFinder", "Reveal in Finder", "Visa i Finder"), + ("file.projectSettings", "Project Settings...", "Projektinställningar..."), + ("app.quit", "Exit", "Avsluta"), + ("", "Edit", "Redigera"), + ("edit.undo", "Undo", "Ångra"), + ("edit.redo", "Redo", "Gör om"), + ("", "History", "Historik"), + ("app.commandPalette", "Quick Apply...", "Använd snabbt..."), + ("edit.cut", "Cut", "Klipp ut"), + ("edit.copy", "Copy", "Kopiera"), + ("edit.copyWithPropertyLinks", "Copy with Property Links", "Kopiera med egenskapslänkar"), + ("edit.copyWithRelativePropertyLinks", "Copy with Relative Property Links", "Kopiera med relativa egenskapslänkar"), + ("edit.copyExpressionOnly", "Copy Expression Only", "Kopiera endast uttryck"), + ("edit.paste", "Paste", "Klistra in"), + ("edit.pasteReversedKeyframes", "Paste Reversed Keyframes", "Klistra in omvända nyckelbildrutor"), + ("edit.pasteTextMatchFormatting", "Paste Text and Match Formatting", "Klistra in text och matcha formatering"), + ("edit.pasteTextFormattingOnly", "Paste Text Formatting Only", "Klistra in endast textformatering"), + ("edit.clear", "Clear", "Rensa"), + ("edit.duplicate", "Duplicate", "Duplicera"), + ("edit.splitLayer", "Split Layer", "Dela lager"), + ("edit.liftWorkArea", "Lift Work Area", "Lyft arbetsområde"), + ("edit.extractWorkArea", "Extract Work Area", "Extrahera arbetsområde"), + ("edit.selectAll", "Select All", "Markera alla"), + ("edit.deselectAll", "Deselect All", "Avmarkera alla"), + ("", "Label", "Etikett"), + ("edit.selectLabelGroup", "Select Label Group", "Markera etikettgrupp"), + ("edit.label", "None", "Ingen"), + ("edit.label", "Red", "Röd"), + ("edit.label", "Yellow", "Gul"), + ("edit.label", "Aqua", "Akvamarin"), + ("edit.label", "Pink", "Rosa"), + ("edit.label", "Lavender", "Lavendel"), + ("edit.label", "Peach", "Persika"), + ("edit.label", "Sea Foam", "Havsskum"), + ("edit.label", "Blue", "Blå"), + ("edit.label", "Green", "Grön"), + ("edit.label", "Purple", "Lila"), + ("edit.label", "Orange", "Orange"), + ("edit.label", "Brown", "Brun"), + ("edit.label", "Fuchsia", "Fuchsia"), + ("edit.label", "Cyan", "Cyan"), + ("edit.label", "Sandstone", "Sandsten"), + ("edit.label", "Dark Green", "Mörkgrön"), + ("app.settings", "Edit Label Colors...", "Redigera etikettfärger..."), + ("", "Select Keyframe Label Group", "Markera etikettgrupp för nyckelbildrutor"), + ("keys.selectLabelGroup", "On Selected Layers", "På markerade lager"), + ("keys.selectLabelGroup", "On All Layers", "På alla lager"), + ("keys.selectLabelGroup", "Visible Keyframes on Selected Layers", "Synliga nyckelbildrutor på markerade lager"), + ("keys.selectLabelGroup", "Visible Keyframes on All Layers", "Synliga nyckelbildrutor på alla lager"), + ("", "Purge", "Rensa"), + ("edit.purge", "All Cache...", "All cache..."), + ("edit.purge", "All Memory & Disk Cache...", "Allt minne och all diskcache..."), + ("edit.purge", "All Memory", "Allt minne"), + ("edit.purge", "All Disk Cache...", "All diskcache..."), + ("edit.purge", "All 3D Cache...", "All 3D-cache..."), + ("edit.purgeUndo", "Undo", "Ångra"), + ("edit.purge", "Image Cache Memory", "Bildcacheminne"), + ("edit.purge", "Snapshot", "Ögonblicksbild"), + ("edit.editOriginal", "Edit Original...", "Redigera original..."), + ("", "Templates", "Mallar"), + ("app.templates", "Render Settings...", "Renderingsinställningar..."), + ("app.templates", "Output Module...", "Utgångsmodul..."), + ("app.keyboardShortcuts", "Keyboard Shortcuts", "Kortkommandon"), + ("", "Preferences", "Inställningar"), + ("", "Composition", "Komposition"), + ("comp.new", "New Composition...", "Ny komposition..."), + ("comp.settings", "Composition Settings...", "Kompositionsinställningar..."), + ("comp.setPosterTime", "Set Poster Time", "Ange affischtid"), + ("comp.trimToWorkArea", "Trim Comp to Work Area", "Trimma komp till arbetsområde"), + ("comp.cropToRegionOfInterest", "Crop Comp to Region of Interest", "Beskär komp till intresseregion"), + ("comp.cropToLayerBounds", "Crop Comp to Selected Layer(s) Bounds", "Beskär komp till markerade lager(s) gränser"), + ("render.addOutputModule", "Add Output Module", "Lägg till utgångsmodul"), + ("", "Preview", "Förhandsgranskning"), + ("playback.toggle", "Play Current Preview", "Spela upp aktuell förhandsgranskning"), + ("playback.cacheWhenIdle", "Cache Frames When Idle", "Cachelagra bildrutor vid inaktivitet"), + ("playback.audio", "Audio", "Ljud"), + ("", "Save Frame As", "Spara bildruta som"), + ("comp.saveFrameAs", "File...", "Fil..."), + ("comp.saveFrameAsPsd", "Photoshop Layers...", "Photoshop-lager..."), + ("comp.saveFrameAsExr", "ProEXR...", "ProEXR..."), + ("comp.copyFrame", "Copy Frame to Clipboard", "Kopiera bildruta till Urklipp"), + ("render.preRender", "Pre-render...", "Förrendera..."), + ("render.saveCurrentPreview", "Save Current Preview...", "Spara aktuell förhandsgranskning..."), + ("comp.openInEssentialGraphics", "Open in Essential Graphics", "Öppna i Grundläggande grafik"), + ("", "Responsive Design — Time", "Responsiv design — tid"), + ("comp.responsiveTime", "Create Intro", "Skapa intro"), + ("comp.responsiveTime", "Create Outro", "Skapa outro"), + ("comp.responsiveTime", "Create Protected Region from Work Area", "Skapa skyddad region från arbetsområde"), + ("comp.flowchart", "Composition Flowchart", "Kompositionsflödesschema"), + ("comp.miniFlowchart", "Composition Mini-Flowchart", "Kompositionens miniflödesschema"), + ("", "VR", "VR"), + ("comp.vr.createEnvironment", "Create VR Environment...", "Skapa VR-miljö..."), + ("comp.vr.extractCubemap", "Extract Cubemap...", "Extrahera kubkarta..."), + ("", "Layer", "Lager"), + ("layer.newText", "Text", "Text"), + ("layer.newSolid", "Solid...", "Enfärgad..."), + ("layer.newLight", "Light...", "Ljus..."), + ("layer.newCamera", "Camera...", "Kamera..."), + ("layer.newNull", "Null Object", "Nullobjekt"), + ("layer.newShape", "Shape Layer", "Formlager"), + ("layer.newAdjustment", "Adjustment Layer", "Justeringslager"), + ("layer.newContentAwareFill", "Content-Aware Fill Layer...", "Innehållsmedvetet fyllningslager..."), + ("layer.new3dPrimitive", "Cube", "Kub"), + ("layer.new3dPrimitive", "Sphere", "Sfär"), + ("layer.new3dPrimitive", "Plane", "Plan"), + ("layer.new3dPrimitive", "Torus", "Torus"), + ("layer.new3dPrimitive", "Cone", "Kon"), + ("layer.new3dPrimitive", "Cylinder", "Cylinder"), + ("layer.settings", "Layer Settings...", "Lagerinställningar..."), + ("layer.openLayer", "Open Layer", "Öppna lager"), + ("layer.openSource", "Open Layer Source", "Öppna lagerkälla"), + ("layer.revealInFinder", "Reveal in Finder", "Visa i Finder"), + ("", "Mask", "Mask"), + ("layer.addMask", "New Mask", "Ny mask"), + ("layer.mask.shape", "Mask Shape...", "Maskform..."), + ("layer.mask.set", "Mask Feather...", "Maskfjädring..."), + ("layer.mask.set", "Mask Opacity...", "Maskopacitet..."), + ("layer.mask.set", "Mask Expansion...", "Maskexpansion..."), + ("layer.mask.reset", "Reset Mask", "Återställ mask"), + ("layer.mask.remove", "Remove Mask", "Ta bort mask"), + ("layer.mask.removeAll", "Remove All Masks", "Ta bort alla masker"), + ("track.mask", "Track Mask", "Spåra mask"), + ("", "Mode", "Läge"), + ("layer.mask.mode", "None", "Ingen"), + ("layer.mask.mode", "Add", "Addera"), + ("layer.mask.mode", "Subtract", "Subtrahera"), + ("layer.mask.mode", "Intersect", "Skärning"), + ("layer.mask.mode", "Lighten", "Ljusare"), + ("layer.mask.mode", "Darken", "Mörkare"), + ("layer.mask.mode", "Difference", "Differens"), + ("layer.mask.invert", "Inverted", "Inverterad"), + ("layer.mask.lock", "Locked", "Låst"), + ("", "Motion Blur", "Rörelseoskärpa"), + ("layer.mask.motionBlur", "Same As Layer", "Samma som lagret"), + ("layer.mask.motionBlur", "On", "På"), + ("layer.mask.motionBlur", "Off", "Av"), + ("", "Feather Falloff", "Fjädringsavtagande"), + ("layer.mask.featherFalloff", "Smooth", "Mjuk"), + ("layer.mask.featherFalloff", "Linear", "Linjär"), + ("layer.mask.unlockAll", "Unlock All Masks", "Lås upp alla masker"), + ("layer.mask.lockOthers", "Lock Other Masks", "Lås andra masker"), + ("layer.mask.hideLocked", "Hide Locked Masks", "Dölj låsta masker"), + ("", "Mask and Shape Path", "Mask- och formbana"), + ("path.rotoBezier", "RotoBezier", "RotoBezier"), + ("mask.setClosed", "Closed", "Sluten"), + ("path.convertToBezier", "Convert To Bezier Path", "Konvertera till Bezierbana"), + ("path.setFirstVertex", "Set First Vertex", "Ange första hörnpunkt"), + ("path.freeTransform", "Free Transform Points", "Fri transformering av punkter"), + ("", "Quality", "Kvalitet"), + ("layer.quality", "Best", "Bästa"), + ("layer.quality", "Draft", "Utkast"), + ("layer.quality", "Wireframe", "Trådram"), + ("layer.sampling", "Bilinear", "Bilinjär"), + ("layer.sampling", "Bicubic", "Bikubisk"), + ("", "Switches", "Växlar"), + ("layer.hideOtherVideo", "Hide Other Video", "Dölj annan video"), + ("layer.showAllVideo", "Show All Video", "Visa all video"), + ("layer.unlockAll", "Unlock All Layers", "Lås upp alla lager"), + ("layer.expressions", "Enable Expressions", "Aktivera uttryck"), + ("layer.expressions", "Disable Expressions", "Inaktivera uttryck"), + ("layer.setSwitch", "Shy", "Blyg"), + ("layer.setSwitch", "Lock", "Lås"), + ("layer.setSwitch", "Audio", "Ljud"), + ("layer.setSwitch", "Video", "Video"), + ("layer.setSwitch", "Solo", "Solo"), + ("layer.setSwitch", "Effect", "Effekt"), + ("layer.setSwitch", "Collapse", "Komprimera"), + ("layer.setSwitch", "Motion Blur", "Rörelseoskärpa"), + ("layer.setSwitch", "Adjustment Layer", "Justeringslager"), + ("", "Transform", "Transformera"), + ("layer.transform", "Reset", "Återställ"), + ("layer.setTransform", "Anchor Point...", "Ankarpunkt..."), + ("layer.setTransform", "Position...", "Position..."), + ("layer.setTransform", "Scale...", "Skala..."), + ("layer.setTransform", "Orientation...", "Orientering..."), + ("layer.setTransform", "Rotation...", "Rotation..."), + ("layer.setTransform", "Opacity...", "Opacitet..."), + ("layer.transform", "Flip Horizontal", "Vänd vågrätt"), + ("layer.transform", "Flip Vertical", "Vänd lodrätt"), + ("layer.transform", "Center In View", "Centrera i vyn"), + ("layer.centerAnchor", "Center Anchor Point in Layer Content", "Centrera ankarpunkt i lagerinnehållet"), + ("layer.transform", "Fit to Comp", "Anpassa till kompositionen"), + ("layer.transform", "Fit to Comp Width", "Anpassa till kompositionens bredd"), + ("layer.transform", "Fit to Comp Height", "Anpassa till kompositionens höjd"), + ("layer.autoOrient", "Auto-Orient...", "Automatisk orientering..."), + ("", "Time", "Tid"), + ("layer.enableTimeRemap", "Enable Time Remapping", "Aktivera tidsomvandling"), + ("layer.timeReverse", "Time-Reverse Layer", "Tidsomvänd lager"), + ("layer.timeStretch", "Time Stretch...", "Tidssträckning..."), + ("layer.freezeFrame", "Freeze Frame", "Frys bildruta"), + ("layer.freezeOnLastFrame", "Freeze On Last Frame", "Frys på sista bildrutan"), + ("layer.alignVideoToData", "Align Video to Data", "Justera video efter data"), + ("", "Frame Blending", "Bildblandning"), + ("layer.frameBlending", "Off", "Av"), + ("layer.frameBlending", "Frame Mix", "Bildrutemix"), + ("layer.frameBlending", "Pixel Motion", "Pixelrörelse"), + ("layer.setSwitch", "3D Layer", "3D-lager"), + ("layer.setSwitch", "Guide Layer", "Hjälplager"), + ("layer.environment", "Environment Layer", "Miljölager"), + ("", "Markers", "Markörer"), + ("layer.addMarker", "Add Marker", "Lägg till markör"), + ("layer.updateMarkersFromSource", "Update Markers From Source", "Uppdatera markörer från källan"), + ("layer.markersLock", "Lock Markers", "Lås markörer"), + ("layer.deleteAllMarkers", "Delete All Markers", "Radera alla markörer"), + ("layer.setSwitch", "Preserve Transparency", "Bevara transparens"), + ("", "Blending Mode", "Blandningsläge"), + ("layer.setBlendMode", "Normal", "Normal"), + ("layer.setBlendMode", "Dissolve", "Övertoning"), + ("layer.setBlendMode", "Dancing Dissolve", "Dansande övertoning"), + ("layer.setBlendMode", "Darken", "Mörkare"), + ("layer.setBlendMode", "Multiply", "Multiplicera"), + ("layer.setBlendMode", "Color Burn", "Färgefterbelysning"), + ("layer.setBlendMode", "Classic Color Burn", "Klassisk färgefterbelysning"), + ("layer.setBlendMode", "Linear Burn", "Linjär efterbelysning"), + ("layer.setBlendMode", "Darker Color", "Mörkare färg"), + ("layer.setBlendMode", "Add", "Addera"), + ("layer.setBlendMode", "Lighten", "Ljusare"), + ("layer.setBlendMode", "Screen", "Skärm"), + ("layer.setBlendMode", "Color Dodge", "Färgskuggning"), + ("layer.setBlendMode", "Classic Color Dodge", "Klassisk färgskuggning"), + ("layer.setBlendMode", "Linear Dodge", "Linjär skuggning"), + ("layer.setBlendMode", "Lighter Color", "Ljusare färg"), + ("layer.setBlendMode", "Overlay", "Överlägg"), + ("layer.setBlendMode", "Soft Light", "Mjukt ljus"), + ("layer.setBlendMode", "Hard Light", "Hårt ljus"), + ("layer.setBlendMode", "Linear Light", "Linjärt ljus"), + ("layer.setBlendMode", "Vivid Light", "Intensivt ljus"), + ("layer.setBlendMode", "Pin Light", "Punktljus"), + ("layer.setBlendMode", "Hard Mix", "Hård blandning"), + ("layer.setBlendMode", "Difference", "Differens"), + ("layer.setBlendMode", "Classic Difference", "Klassisk differens"), + ("layer.setBlendMode", "Exclusion", "Uteslutning"), + ("layer.setBlendMode", "Subtract", "Subtrahera"), + ("layer.setBlendMode", "Divide", "Dividera"), + ("layer.setBlendMode", "Hue", "Nyans"), + ("layer.setBlendMode", "Saturation", "Mättnad"), + ("layer.setBlendMode", "Color", "Färg"), + ("layer.setBlendMode", "Luminosity", "Luminositet"), + ("layer.setBlendMode", "Stencil Alpha", "Schablon alfa"), + ("layer.setBlendMode", "Stencil Luma", "Schablon luma"), + ("layer.setBlendMode", "Silhouette Alpha", "Siluett alfa"), + ("layer.setBlendMode", "Silhouette Luma", "Siluett luma"), + ("layer.setBlendMode", "Alpha Add", "Alfa addera"), + ("layer.setBlendMode", "Luminescent Premul", "Luminiscent förmultiplicerad"), + ("layer.setBlendMode", "Next Blending Mode", "Nästa blandningsläge"), + ("layer.setBlendMode", "Previous Blending Mode", "Föregående blandningsläge"), + ("", "Track Matte", "Track matte"), + ("layer.trackMatte", "No Track Matte", "Ingen track matte"), + ("layer.trackMatte", "Alpha Matte", "Alfamatte"), + ("layer.trackMatte", "Alpha Inverted Matte", "Inverterad alfamatte"), + ("layer.trackMatte", "Luma Matte", "Lumamatte"), + ("layer.trackMatte", "Luma Inverted Matte", "Inverterad lumamatte"), + ("layer.trackMatte", "Matte with Layer Above", "Matte med lagret ovanför"), + ("layer.trackMatte", "Matte with Layer Below", "Matte med lagret nedanför"), + ("", "Layer Styles", "Lagerstilar"), + ("layer.style.options", "Layer Style Options...", "Lagerstilsalternativ..."), + ("layer.style.convertToEditable", "Convert to Editable Styles", "Konvertera till redigerbara stilar"), + ("layer.style.showAll", "Show All", "Visa alla"), + ("layer.style.removeAll", "Remove All", "Ta bort alla"), + ("layer.style.dropShadow", "Drop Shadow", "Slagskugga"), + ("layer.style.innerShadow", "Inner Shadow", "Inre skugga"), + ("layer.style.outerGlow", "Outer Glow", "Yttre glöd"), + ("layer.style.innerGlow", "Inner Glow", "Inre glöd"), + ("layer.style.bevelEmboss", "Bevel and Emboss", "Fasning och relief"), + ("layer.style.satin", "Satin", "Satin"), + ("layer.style.colorOverlay", "Color Overlay", "Färgöverlägg"), + ("layer.style.gradientOverlay", "Gradient Overlay", "Gradientöverlägg"), + ("layer.style.stroke", "Stroke", "Kontur"), + ("path.groupShapes", "Group Shapes", "Gruppera former"), + ("path.ungroupShapes", "Ungroup Shapes", "Avgruppera former"), + ("", "Arrange", "Ordna"), + ("layer.arrange", "Bring Layer to Front", "Lägg lager överst"), + ("layer.arrange", "Bring Layer Forward", "Flytta fram lager"), + ("layer.arrange", "Send Layer Backward", "Flytta bak lager"), + ("layer.arrange", "Send Layer to Back", "Lägg lager underst"), + ("", "Reveal", "Visa"), + ("layer.revealSource", "Reveal Layer Source in Project", "Visa lagerkälla i projektet"), + ("comp.flowchart", "Reveal Layer in Project Flowchart", "Visa lager i projektflödesschema"), + ("comp.revealInProject", "Reveal Composition in Project", "Visa komposition i projekt"), + ("layer.revealExpressionErrors", "Reveal Expression Errors", "Visa uttrycksfel"), + ("", "Create", "Skapa"), + ("layer.create", "Convert to Editable Text", "Konvertera till redigerbar text"), + ("layer.create", "Create Shapes from Text", "Skapa former från text"), + ("layer.create", "Create Masks from Text", "Skapa masker från text"), + ("layer.create", "Create Shapes from Vector Layer", "Skapa former från vektorlager"), + ("layer.create", "Create Keyframes from Data", "Skapa nyckelbildrutor från data"), + ("layer.create", "Null Controllers for Positional Points", "Null-kontroller för positionspunkter"), + ("layer.create", "Null Controllers for Path Points", "Null-kontroller för banpunkter"), + ("layer.create", "Nulls Following Path Points", "Nullobjekt som följer banpunkter"), + ("layer.create", "Null Tracing Along Path", "Null som spårar längs bana"), + ("layer.create", "Create 3D Layer Instance", "Skapa 3D-lagerinstans"), + ("", "Camera", "Kamera"), + ("camera.fromView", "Create Camera from 3D View", "Skapa kamera från 3D-vy"), + ("camera.stereoRig", "Create Stereo 3D Rig", "Skapa stereo-3D-rigg"), + ("camera.orbitNull", "Create Orbit Null", "Skapa null för kretsning"), + ("camera.fromModel", "Create Cameras from 3D Model", "Skapa kameror från 3D-modell"), + ("camera.linkFocusToPoi", "Link Focus Distance to Point of Interest", "Länka fokusavstånd till intressepunkt"), + ("camera.linkFocusToLayer", "Link Focus Distance to Layer", "Länka fokusavstånd till lager"), + ("camera.setFocusToLayer", "Set Focus Distance to Layer", "Ange fokusavstånd till lager"), + ("layer.cameraSettings", "Camera Settings...", "Kamerainställningar..."), + ("view.reset3DView", "Reset 3D View", "Återställ 3D-vy"), + ("", "Light", "Ljus"), + ("light.fromModel", "Create Lights from 3D Model", "Skapa ljus från 3D-modell"), + ("light.controlWithCamera", "Control Light with Camera", "Styr ljuset med kameran"), + ("light.environmentBackground", "Create Environment Light Background Layer", "Skapa bakgrundslager för miljöljus"), + ("", "Material", "Material"), + ("material.revealSource", "Reveal Material Source in Project", "Visa materialkällan i projektet"), + ("material.reset", "Reset Material", "Återställ material"), + ("material.duplicateAssign", "Duplicate and Assign Material", "Duplicera och tilldela material"), + ("layer.autoTrace", "Auto-trace...", "Automatisk konturspårning..."), + ("layer.precompose", "Pre-compose...", "Förkomponera..."), + ("layer.sceneEditDetection", "Scene Edit Detection...", "Identifiering av scensnitt..."), + ("", "Effect", "Effekt"), + ("window.panel", "Effect Controls", "Effektkontroller"), + ("effect.applyLast", "Last Effect", "Senaste effekten"), + ("effect.removeAll", "Remove All", "Ta bort alla"), + ("effect.manage", "Manage Effects...", "Hantera effekter..."), + ("effect.plugins.load", "Load Effect Plug-in...", "Läs in effektplugin..."), + ("", "Animation", "Animering"), + ("anim.savePreset", "Save Animation Preset...", "Spara animeringsförinställning..."), + ("anim.applyPreset", "Apply Animation Preset...", "Använd animeringsförinställning..."), + ("", "Recent Animation Presets", "Senaste animeringsförinställningar"), + ("anim.clearRecentPresets", "Clear Recent Presets", "Rensa senaste förinställningar"), + ("anim.browsePresets", "Browse Presets...", "Bläddra bland förinställningar..."), + ("", "Text Animation Presets", "Förinställningar för textanimering"), + ("layer.applyTextPreset", "Typewriter", "Skrivmaskin"), + ("layer.applyTextPreset", "Fade Up Characters", "Tona upp tecken"), + ("layer.applyTextPreset", "Bounce In Words", "Studsa in ord"), + ("layer.applyTextPreset", "Tracking In", "Spärrning in"), + ("layer.applyTextPreset", "Scramble", "Kasta om"), + ("layer.applyTextPreset", "Blur In", "Oskärpa in"), + ("layer.applyTextPreset", "Jitter", "Darr"), + ("layer.applyTextPreset", "Drop In Lines", "Släpp in rader"), + ("anim.addKeyframe", "Add Keyframe", "Lägg till nyckelbildruta"), + ("keys.toggleHold", "Toggle Hold Keyframe", "Växla hållen nyckelbildruta"), + ("keys.interpolation", "Keyframe Interpolation...", "Interpolering för nyckelbildrutor..."), + ("keys.velocity", "Keyframe Velocity...", "Ändringshastighet för nyckelbildrutor..."), + ("", "Keyframe Assistant", "Nyckelbildrutsassistent"), + ("keys.audioToKeyframes", "Convert Audio to Keyframes", "Konvertera ljud till nyckelbildrutor"), + ("prop.convertExpressionToKeyframes", "Convert Expression to Keyframes", "Konvertera uttryck till nyckelbildrutor"), + ("keys.easyEase", "Easy Ease", "Mjukt in och ut"), + ("keys.easyEaseIn", "Easy Ease In", "Mjukt in"), + ("keys.easyEaseOut", "Easy Ease Out", "Mjukt ut"), + ("keys.exponentialScale", "Exponential Scale", "Exponentiell skala"), + ("keys.rpfCameraImport", "RPF Camera Import", "RPF-kameraimport"), + ("layer.sequence", "Sequence Layers...", "Sekvensera lager..."), + ("keys.timeReverse", "Time-Reverse Keyframes", "Vänd nyckelbildrutor i tid"), + ("", "Animate Text", "Animera text"), + ("layer.enablePerChar3D", "Enable Per-character 3D", "Aktivera 3D per tecken"), + ("layer.addTextAnimator", "Anchor Point", "Ankarpunkt"), + ("layer.addTextAnimator", "Position", "Position"), + ("layer.addTextAnimator", "Scale", "Skala"), + ("layer.addTextAnimator", "Skew", "Skevning"), + ("layer.addTextAnimator", "Rotation", "Rotation"), + ("layer.addTextAnimator", "Opacity", "Opacitet"), + ("layer.addTextAnimator", "All Transform Properties", "Alla transformeringsegenskaper"), + ("", "Fill Color", "Fyllnadsfärg"), + ("layer.addTextAnimator", "RGB", "RGB"), + ("layer.addTextAnimator", "Hue", "Nyans"), + ("layer.addTextAnimator", "Saturation", "Mättnad"), + ("layer.addTextAnimator", "Brightness", "Ljusstyrka"), + ("", "Stroke Color", "Konturfärg"), + ("layer.addTextAnimator", "Stroke Width", "Konturbredd"), + ("", "Front", "Fram"), + ("", "Bevel", "Fasning"), + ("", "Side", "Sida"), + ("", "Back", "Tillbaka"), + ("layer.addTextAnimator", "Color", "Färg"), + ("layer.addTextAnimator", "Tracking", "Spärrning"), + ("layer.addTextAnimator", "Line Anchor", "Radankare"), + ("layer.addTextAnimator", "Line Spacing", "Radavstånd"), + ("layer.addTextAnimator", "Character Offset", "Teckenförskjutning"), + ("layer.addTextAnimator", "Character Value", "Teckenvärde"), + ("layer.addTextAnimator", "Blur", "Oskärpa"), + ("text.animatorFontAxes", "Variable Font Axes", "Axlar för variabla typsnitt"), + ("", "Add Text Selector", "Lägg till textväljare"), + ("text.addSelector", "Range", "Omfång"), + ("text.addSelector", "Wiggly", "Vickande"), + ("text.addSelector", "Expression", "Uttryck"), + ("text.removeAllAnimators", "Remove All Text Animators", "Ta bort alla textanimatörer"), + ("prop.setExpression", "Add Expression", "Lägg till uttryck"), + ("essential.addProperty", "Add Property to Essential Graphics", "Lägg till egenskap i Grundläggande grafik"), + ("prop.separateDimensions", "Separate Dimensions", "Separera dimensioner"), + ("track.camera", "Track Camera", "Spåra kamera"), + ("track.warpStabilizer", "Warp Stabilizer VFX", "Warp Stabilizer VFX"), + ("track.motion", "Track Motion", "Spåra rörelse"), + ("track.stabilize", "Stabilize Motion", "Stabilisera rörelse"), + ("track.property", "Track this Property", "Spåra den här egenskapen"), + ("anim.reveal", "Reveal Properties with Keyframes", "Visa egenskaper med nyckelbildrutor"), + ("anim.reveal", "Reveal Properties with Animation", "Visa egenskaper med animering"), + ("anim.reveal", "Reveal All Modified Properties", "Visa alla ändrade egenskaper"), + ("", "View", "Visa"), + ("view.newViewer", "New Viewer", "Ny visare"), + ("view.splitLockedViewer", "Split with New Locked Viewer", "Dela med ny låst visare"), + ("view.zoomIn", "Zoom In", "Zooma in"), + ("view.zoomOut", "Zoom Out", "Zooma ut"), + ("", "Resolution", "Upplösning"), + ("view.res.full", "Full", "Full"), + ("view.res.half", "Half", "Halv"), + ("view.res.third", "Third", "En tredjedel"), + ("view.res.quarter", "Quarter", "En fjärdedel"), + ("view.res.custom", "Custom...", "Anpassad..."), + ("view.displayColorManagement", "Use Display Color Management", "Använd färghantering för bildskärm"), + ("", "Simulate Output", "Simulera utgång"), + ("view.simulateOutput", "No Output Simulation", "Ingen utdatasimulering"), + ("view.simulateOutput", "HDTV (Rec. 709)", "HDTV (Rec. 709)"), + ("view.simulateOutput", "SDTV NTSC", "SDTV NTSC"), + ("view.simulateOutput", "SDTV PAL", "SDTV PAL"), + ("view.simulateOutput", "Legacy Macintosh RGB (Gamma 1.8)", "Äldre Macintosh RGB (gamma 1,8)"), + ("view.simulateOutput", "Internet Standard RGB (sRGB)", "Internetstandard-RGB (sRGB)"), + ("view.simulateOutput", "UHDTV (Rec. 2020)", "UHDTV (Rec. 2020)"), + ("view.simulateOutput", "Display P3", "Display P3"), + ("view.simulateOutput", "Linear (1.0 Gamma)", "Linjär (gamma 1,0)"), + ("view.customRgb", "My Custom RGB...", "Min anpassade RGB..."), + ("view.simulateOutput", "Custom...", "Anpassad..."), + ("view.rulers", "Show Rulers", "Visa linjaler"), + ("", "Panel Background Color", "Panelens bakgrundsfärg"), + ("view.panelBackground", "Black", "Svart"), + ("view.panelBackground", "Dark Gray", "Mörkgrå"), + ("view.panelBackground", "Medium Gray (Default)", "Mellangrå (standard)"), + ("view.panelBackground", "Light Gray", "Ljusgrå"), + ("view.panelBackground", "White", "Vit"), + ("view.panelBackground", "Custom", "Anpassad"), + ("view.panelBackground", "Select Custom Background Color...", "Välj anpassad bakgrundsfärg..."), + ("view.guides", "Show Guides", "Visa stödlinjer"), + ("view.snapToGuides", "Snap to Guides", "Fäst mot stödlinjer"), + ("view.lockGuides", "Lock Guides", "Lås stödlinjer"), + ("view.addGuide", "Add Guide...", "Lägg till stödlinje..."), + ("view.addPercentGuide", "Add Percentage Guide...", "Lägg till procentstödlinje..."), + ("view.convertGuides", "Convert Guides to Percentage", "Konvertera stödlinjer till procent"), + ("view.convertGuides", "Convert Guides to Pixels", "Konvertera stödlinjer till pixlar"), + ("view.clearGuides", "Clear Guides", "Rensa stödlinjer"), + ("view.importGuides", "Import Guides...", "Importera stödlinjer..."), + ("view.exportGuides", "Export Guides...", "Exportera stödlinjer..."), + ("view.grid", "Show Grid", "Visa rutnät"), + ("view.snapToGrid", "Snap to Grid", "Fäst mot rutnät"), + ("view.snapping", "Snapping", "Fäst"), + ("view.options", "View Options...", "Visningsalternativ..."), + ("view.layerControls", "Show Layer Controls", "Visa lagerkontroller"), + ("", "Switch View Layout", "Växla vylayout"), + ("view.layout", "1 View", "1 vy"), + ("view.layout", "2 Views", "2 vyer"), + ("view.layout", "4 Views", "4 vyer"), + ("view.shareViewOptions", "Share View Options", "Dela visningsalternativ"), + ("", "Switch 3D View", "Växla 3D-vy"), + ("view.3d.activeCamera", "Active Camera", "Aktiv kamera"), + ("view.3d.default", "Default", "Standard"), + ("view.3d.front", "Front", "Framifrån"), + ("view.3d.left", "Left", "Vänster"), + ("view.3d.top", "Top", "Ovanifrån"), + ("view.3d.back", "Back", "Bakifrån"), + ("view.3d.right", "Right", "Höger"), + ("view.3d.bottom", "Bottom", "Underifrån"), + ("view.3d.custom1", "Custom View 1", "Anpassad vy 1"), + ("view.3d.custom2", "Custom View 2", "Anpassad vy 2"), + ("view.3d.custom3", "Custom View 3", "Anpassad vy 3"), + ("", "Assign Shortcut to 3D View", "Tilldela kortkommando till 3D-vy"), + ("view.3d.last", "Switch to Last 3D View", "Växla till senaste 3D-vy"), + ("view.lookAtSelected", "Look at Selected Layers", "Titta på markerade lager"), + ("view.lookAtAll", "Look at All Layers", "Titta på alla lager"), + ("time.set", "Go to Time...", "Gå till tid..."), + ("view.fullScreen", "Enter Full Screen", "Visa i helskärm"), + ("", "Window", "Fönster"), + ("", "Workspace", "Arbetslayout"), + ("window.workspace", "Default", "Standard"), + ("window.workspace", "Review", "Granskning"), + ("window.workspace", "Learn", "Lär dig"), + ("window.workspace", "Small Screen", "Liten skärm"), + ("window.workspace", "Standard", "Standard"), + ("window.workspace", "All Panels", "Alla paneler"), + ("window.workspace", "Animation", "Animering"), + ("window.workspace", "Color", "Färg"), + ("window.workspace", "Effects", "Effekter"), + ("window.workspace", "Essential Graphics", "Grundläggande grafik"), + ("window.workspace", "Minimal", "Minimal"), + ("window.workspace", "Motion Tracking", "Rörelsespårning"), + ("window.workspace", "Paint", "Måla"), + ("window.workspace", "Text", "Text"), + ("window.workspace", "Undocked Panels", "Odockade paneler"), + ("window.resetWorkspace", "Reset to Saved Layout", "Återställ till sparad layout"), + ("window.saveWorkspace", "Save Changes to this Workspace", "Spara ändringar i den här arbetslayouten"), + ("window.saveWorkspaceAs", "Save as New Workspace...", "Spara som ny arbetslayout..."), + ("window.editWorkspaces", "Edit Workspaces...", "Redigera arbetslayouter..."), + ("", "Assign Shortcut to Workspace", "Tilldela kortkommando till arbetslayout"), + ("window.panel", "Align", "Justera"), + ("window.panel", "Audio", "Ljud"), + ("window.panel", "Brushes", "Penslar"), + ("window.panel", "Character", "Tecken"), + ("window.panel", "Content-Aware Fill", "Innehållsmedveten fyllning"), + ("window.panel", "Effects & Presets", "Effekter och förinställningar"), + ("window.panel", "Essential Graphics", "Grundläggande grafik"), + ("window.panel", "Info", "Info"), + ("help.inAppTutorials", "Learn", "Lär dig"), + ("window.panel", "Lumetri Scopes", "Lumetri-scope"), + ("window.panel", "Mask Interpolation", "Maskinterpolering"), + ("window.panel", "Media Browser", "Mediebläddrare"), + ("window.panel", "Metadata", "Metadata"), + ("window.panel", "Motion Sketch", "Rörelseskiss"), + ("window.panel", "Paint", "Måla"), + ("window.panel", "Paragraph", "Stycke"), + ("window.panel", "Preview", "Förhandsgranskning"), + ("window.panel", "Progress", "Förlopp"), + ("window.panel", "Properties", "Egenskaper"), + ("window.panel", "Script Console", "Skriptkonsol"), + ("window.panel", "Smoother", "Utjämnare"), + ("window.panel", "Tools", "Verktyg"), + ("window.panel", "Tracker", "Spårare"), + ("window.panel", "Wiggler", "Vickare"), + ("window.panel", "Composition", "Komposition"), + ("window.panel", "Flowchart", "Flödesschema"), + ("window.panel", "Footage", "Filmmaterial"), + ("window.panel", "Layer", "Lager"), + ("window.panel", "Project", "Projekt"), + ("window.panel", "Render Queue", "Renderingskö"), + ("window.panel", "Timeline", "Tidslinje"), + ("window.panel", "Create Nulls From Paths", "Skapa nullobjekt från banor"), + ("window.panel", "VR Comp Editor", "VR-kompositionsredigerare"), + ("", "Help", "Hjälp"), + ("help.docs", "EffectCraft Help...", "EffectCraft-hjälp..."), + ("help.docs", "Scripting Help...", "Hjälp för skript..."), + ("help.docs", "Expression Reference...", "Uttrycksreferens..."), + ("help.docs", "Effect Reference...", "Effektreferens..."), + ("anim.browsePresets", "Animation Presets...", "Animeringsförinställningar..."), + ("app.keyboardShortcuts", "Keyboard Shortcuts...", "Kortkommandon..."), + ("help.inAppTutorials", "In-App Tutorials...", "Självstudier i appen..."), + ("help.onlineTutorials", "Online Tutorials...", "Självstudier online..."), + ("help.systemReport", "System Compatibility Report...", "Systemkompatibilitetsrapport..."), + ("help.enableLogging", "Enable Logging", "Aktivera loggning"), + ("help.revealLogFile", "Reveal Logging File", "Visa loggfil"), + ("help.discord", "Join the ArtCraft Discord...", "Gå med i ArtCraft på Discord..."), + ("help.reportIssue", "Provide Feedback...", "Ge återkoppling..."), + ("help.website", "ArtCraft Website", "ArtCrafts webbplats"), + ("help.appPage", "EffectCraft Home Page", "EffectCrafts startsida"), + ("help.github", "EffectCraft on GitHub", "EffectCraft på GitHub"), + ("file.openDemoProject", "Open Demo Project", "Öppna demoprojekt"), + ("", "Recent Script Files", "Senaste skriptfiler"), + ("layer.newPrimitive", "3D Primitive...", "3D-primitiv..."), + ("keys.setMuted", "Mute Keyframes", "Stäng av nyckelbildrutor"), + ("keys.setMuted", "Unmute Keyframes", "Slå på nyckelbildrutor"), +]; + /// Traditional Chinese (zh-hant): the same (command, English label) keys as `JAPANESE`, one /// entry per fixed menu row of the engine's menu tree, mirroring `SIMPLIFIED_CHINESE` in the /// vocabulary the sibling Craft apps' zh-hant catalogs use. @@ -8138,6 +8800,59 @@ mod tests { assert_eq!(super::first_supported(Some("ja"), &tags(&[]), super::web_draws), "ja"); } + #[test] + fn swedish_translates_menus_without_changing_bindings_or_user_names() { + let mut app = EffectcraftApp::new(effectcraft_engine::Session::default()); + app.session.execute("prefs.set", json!({"key": "general.language", "value": "en"})).unwrap(); + app.session.prefs.push_recent("File.ecproj"); + let en = crate::native_menu::build(&app); + let state = crate::native_menu::state_key(&app); + app.session.execute("prefs.set", json!({"key": "general.language", "value": "sv"})).unwrap(); + let sv = crate::native_menu::build(&app); + assert_eq!(language(&app), "sv"); + assert!(swedish(&app)); + assert!(!czech(&app)); + assert_eq!(code("sv"), "sv"); + assert_ne!(state, crate::native_menu::state_key(&app)); + let bindings = |menu: &crate::native_menu::NativeMenu| { + menu.items().into_iter().map(|i| (i.id.clone(), i.command.clone(), i.params.clone(), i.shortcut.clone(), i.enabled, i.checked)).collect::>() + }; + assert_eq!(bindings(&en), bindings(&sv)); + assert!(sv.items().iter().any(|i| i.command == "comp.new" && i.label == "Ny komposition...")); + assert!(sv.items().iter().any(|i| i.command == "keys.easyEase" && i.label == "Mjukt in och ut")); + assert!(sv.items().iter().any(|i| i.command == "file.openRecent" && i.label == "File.ecproj")); + for (source, translated) in + [("File", "Arkiv"), ("Edit", "Redigera"), ("Composition", "Komposition"), ("Layer", "Lager"), ("Window", "Fönster"), ("Help", "Hjälp")] + { + assert_eq!(label(&app, "", source), translated); + } + assert_eq!(label(&app, "unknown.command", "Text"), "Text"); + let panel = + MenuEntry { label: "Layer".into(), command: "window.panel".into(), params: json!({"panel": "layer"}), shortcut: None, alt_shortcuts: vec![] }; + assert_eq!(entry(&app, &panel, "Layer: File Åsa".into()), "Lager: File Åsa"); + assert_eq!( + submenu(&app, "Assign Shortcut to Workspace", "Assign Shortcut to “File Åsa” Workspace".into()), + "Tilldela kortkommando till arbetslayouten ”File Åsa”" + ); + assert_eq!(submenu(&app, "Assign Shortcut to 3D View", "Assign Shortcut to “Top”".into()), "Tilldela kortkommando till 3D-vyn ”Top”"); + assert_eq!(submenu(&app, "Assign Shortcut to Workspace", "Assign Shortcut to Workspace".into()), "Tilldela kortkommando till arbetslayout"); + let undo = MenuEntry { label: "Undo".into(), command: "edit.undo".into(), params: json!({}), shortcut: None, alt_shortcuts: vec![] }; + assert_eq!(entry(&app, &undo, "Can't Undo".into()), "Det går inte att ångra"); + app.session.history.undo.push(("File Åsa".into(), app.session.project.clone())); + assert_eq!(entry(&app, &undo, "Undo File Åsa".into()), "Ångra File Åsa"); + for command in ["file.revealInFinder", "layer.revealInFinder"] { + for (source, translated) in + [("Reveal in Finder", "Visa i Finder"), ("Reveal in Explorer", "Visa i Utforskaren"), ("Reveal in File Manager", "Visa i filhanteraren")] + { + assert_eq!(label(&app, command, source), translated); + assert_eq!(label(&app, "file.openRecent", source), source); + } + } + app.session.history.undo.clear(); + app.session.execute("prefs.set", json!({"key": "general.language", "value": "en"})).unwrap(); + assert_eq!(crate::native_menu::build(&app), en); + } + fn keys(nodes: &[MenuNode], out: &mut BTreeSet<(String, String)>) { for node in nodes { match node { @@ -8231,6 +8946,31 @@ mod tests { } } + /// Exercise each engine spelling on every host: a macOS-only run must still catch a + /// Windows/Linux catalog miss, while filenames and unrelated commands stay untouched. + #[test] + fn ukrainian_reveal_labels_follow_the_platform_file_manager() { + let mut app = EffectcraftApp::new(effectcraft_engine::Session::default()); + app.session.execute("prefs.set", json!({"key": "general.language", "value": "uk"})).unwrap(); + for command in ["file.revealInFinder", "layer.revealInFinder"] { + for (source, translated) in [ + ("Reveal in Finder", "Показати у Finder"), + ("Reveal in Explorer", "Показати у Провіднику"), + ("Reveal in File Manager", "Показати у файловому менеджері"), + ] { + let e = + MenuEntry { label: source.into(), command: command.into(), params: json!({"item": "My file.mp4"}), shortcut: None, alt_shortcuts: vec![] }; + assert_eq!(label(&app, command, source), translated); + assert_eq!(entry(&app, &e, source.into()), translated); + assert_eq!(label(&app, "file.openRecent", source), source); + } + assert_eq!(label(&app, command, "My file.mp4"), "My file.mp4"); + } + app.session.execute("prefs.set", json!({"key": "general.language", "value": "en"})).unwrap(); + assert_eq!(label(&app, "file.revealInFinder", "Reveal in Explorer"), "Reveal in Explorer"); + assert_eq!(label(&app, "layer.revealInFinder", "Reveal in File Manager"), "Reveal in File Manager"); + } + #[test] fn language_changes_native_labels_without_changing_commands_or_parameters() { let mut app = EffectcraftApp::new(effectcraft_engine::Session::default()); @@ -8334,6 +9074,10 @@ mod tests { (Some("fr"), "fr"), (Some("fr-FR"), "fr"), (Some("fr_CA.UTF-8"), "fr"), + (Some("sv"), "sv"), + (Some("sv-SE"), "sv"), + (Some("sv-FI"), "sv"), + (Some("sv_SE.UTF-8"), "sv"), (Some("en-US"), "en"), (Some("jv-ID"), "en"), (Some("nl-NL"), "en"), @@ -8349,6 +9093,7 @@ mod tests { assert_eq!(spanish(&app), system_language() == "es"); assert_eq!(czech(&app), system_language() == "cs"); assert_eq!(polish(&app), system_language() == "pl"); + assert_eq!(swedish(&app), system_language() == "sv"); app.session.execute("prefs.set", json!({"key":"general.language", "value":"ja"})).unwrap(); assert!(japanese(&app)); app.session.execute("prefs.set", json!({"key":"general.language", "value":"zh-hans"})).unwrap(); @@ -8377,6 +9122,7 @@ mod tests { ("cs", CZECH), ("pl", POLISH), ("ka", GEORGIAN), + ("sv", SWEDISH), ] { for (command, en, translated) in catalog { assert_eq!(en.contains("..."), translated.contains("..."), "{code} {command} / {en}: {translated}"); diff --git a/crates/ui-egui/src/i18n/effects.rs b/crates/ui-egui/src/i18n/effects.rs index bb7e3715a..6a1b600c4 100644 --- a/crates/ui-egui/src/i18n/effects.rs +++ b/crates/ui-egui/src/i18n/effects.rs @@ -71,6 +71,7 @@ fn catalog(language: &str) -> Option<&'static Catalog> { static TRADITIONAL: Catalog = Catalog { rows: TRADITIONAL_CHINESE, categories: TRADITIONAL_CHINESE_CATEGORIES, index: OnceLock::new() }; static JAPANESE: Catalog = Catalog { rows: JAPANESE_EFFECTS, categories: JAPANESE_CATEGORIES, index: OnceLock::new() }; static GEORGIAN_CATALOG: Catalog = Catalog { rows: GEORGIAN, categories: GEORGIAN_CATEGORIES, index: OnceLock::new() }; + static SWEDISH_CATALOG: Catalog = Catalog { rows: SWEDISH, categories: SWEDISH_CATEGORIES, index: OnceLock::new() }; match language { "zh-hans" => Some(&SIMPLIFIED), "zh-hant" => Some(&TRADITIONAL), @@ -78,6 +79,7 @@ fn catalog(language: &str) -> Option<&'static Catalog> { // this one catalog instead of inventing a second mechanism. "ja" => Some(&JAPANESE), "ka" => Some(&GEORGIAN_CATALOG), + "sv" => Some(&SWEDISH_CATALOG), _ => None, } } @@ -1165,6 +1167,343 @@ const SIMPLIFIED_CHINESE_CATEGORIES: &[(&str, &str)] = &[ ("Utility", "实用工具"), ]; +/// Swedish (`sv`), written from the English source. +const SWEDISH: &[Row] = &[ + ("ec.3d.channelextract", "3D Channel Extract", "Extrahera 3D-kanal"), + ("ec.3d.cryptomatte", "Cryptomatte", "Cryptomatte"), + ("ec.3d.depthmatte", "Depth Matte", "Djupmatte"), + ("ec.3d.depthoffield", "Depth of Field", "Skärpedjup"), + ("ec.3d.extractor", "EXtractoR", "EXtractoR"), + ("ec.3d.fog3d", "Fog 3D", "3D-dimma"), + ("ec.3d.identifier", "IDentifier", "IDentifier"), + ("ec.3d.idmatte", "ID Matte", "ID-matte"), + ("ec.audio.backwards", "Backwards", "Baklänges"), + ("ec.audio.basstreble", "Bass & Treble", "Bas och diskant"), + ("ec.audio.compressor", "Compressor", "Kompressor"), + ("ec.audio.delay", "Delay", "Delay"), + ("ec.audio.distortion", "Distortion", "Distorsion"), + ("ec.audio.flangechorus", "Flange & Chorus", "Flanger och chorus"), + ("ec.audio.gate", "Gate", "Gate"), + ("ec.audio.highlowpass", "High-Low Pass", "Hög-/lågpass"), + ("ec.audio.modulator", "Modulator", "Modulator"), + ("ec.audio.parametriceq", "Parametric EQ", "Parametrisk EQ"), + ("ec.audio.reverb", "Reverb", "Reverb"), + ("ec.audio.stereomixer", "Stereo Mixer", "Stereomixer"), + ("ec.audio.tone", "Tone", "Ton"), + ("ec.blur.bilateral", "Bilateral Blur", "Bilateral oskärpa"), + ("ec.blur.cameralens", "Camera Lens Blur", "Kameralinsoskärpa"), + ("ec.blur.camerashakedeblur", "Camera-Shake Deblur", "Ta bort oskärpa från kameraskakning"), + ("ec.blur.cccross", "CC Cross Blur", "CC Korsoskärpa"), + ("ec.blur.ccradial", "CC Radial Blur", "CC Radiell oskärpa"), + ("ec.blur.ccradialfast", "CC Radial Fast Blur", "CC Snabb radiell oskärpa"), + ("ec.blur.ccvector", "CC Vector Blur", "CC Vektoroskärpa"), + ("ec.blur.channel", "Channel Blur", "Kanaloskärpa"), + ("ec.blur.compound", "Compound Blur", "Sammansatt oskärpa"), + ("ec.blur.directional", "Directional Blur", "Riktad oskärpa"), + ("ec.blur.fastbox", "Fast Box Blur", "Snabb rutoskärpa"), + ("ec.blur.gaussian", "Gaussian Blur", "Gaussisk oskärpa"), + ("ec.blur.radial", "Radial Blur", "Radiell oskärpa"), + ("ec.blur.reduceflicker", "Reduce Interlace Flicker", "Minska flimmer från sammanflätning"), + ("ec.blur.sharpen", "Sharpen", "Skärpa"), + ("ec.blur.smart", "Smart Blur", "Smart oskärpa"), + ("ec.blur.unsharp", "Unsharp Mask", "Oskarp mask"), + ("ec.channel.arithmetic", "Arithmetic", "Aritmetik"), + ("ec.channel.blend", "Blend", "Blanda"), + ("ec.channel.calculations", "Calculations", "Beräkningar"), + ("ec.channel.cccomposite", "CC Composite", "CC Komposit"), + ("ec.channel.combiner", "Channel Combiner", "Kanalkombinerare"), + ("ec.channel.compoundarithmetic", "Compound Arithmetic", "Sammansatt aritmetik"), + ("ec.channel.invert", "Invert", "Invertera"), + ("ec.channel.minimax", "Minimax", "Minimax"), + ("ec.channel.removecolormatting", "Remove Color Matting", "Ta bort färgkantbehandling"), + ("ec.channel.setchannels", "Set Channels", "Ange kanaler"), + ("ec.channel.setmatte", "Set Matte", "Ange matte"), + ("ec.channel.shiftchannels", "Shift Channels", "Flytta kanaler"), + ("ec.channel.solidcomposite", "Solid Composite", "Enfärgad komposit"), + ("ec.color.autocolor", "Auto Color", "Autofärg"), + ("ec.color.autocontrast", "Auto Contrast", "Autokontrast"), + ("ec.color.autolevels", "Auto Levels", "Autonivåer"), + ("ec.color.blackwhite", "Black & White", "Svartvitt"), + ("ec.color.brightnesscontrast", "Brightness & Contrast", "Ljusstyrka och kontrast"), + ("ec.color.broadcast", "Broadcast Colors", "Broadcast-färger"), + ("ec.color.cccolorneutralizer", "CC Color Neutralizer", "CC Färgneutraliserare"), + ("ec.color.cccoloroffset", "CC Color Offset", "CC Färgförskjutning"), + ("ec.color.cckernel", "CC Kernel", "CC Kärna"), + ("ec.color.cctoner", "CC Toner", "CC Toner"), + ("ec.color.changecolor", "Change Color", "Ändra färg"), + ("ec.color.changetocolor", "Change to Color", "Ändra till färg"), + ("ec.color.channelmixer", "Channel Mixer", "Kanalmixer"), + ("ec.color.colorama", "Colorama", "Colorama"), + ("ec.color.colorbalance", "Color Balance", "Färgbalans"), + ("ec.color.colorbalancehls", "Color Balance (HLS)", "Färgbalans (HLS)"), + ("ec.color.colorlink", "Color Link", "Färglänk"), + ("ec.color.colorstabilizer", "Color Stabilizer", "Färgstabiliserare"), + ("ec.color.curves", "Curves", "Kurvor"), + ("ec.color.equalize", "Equalize", "Utjämna"), + ("ec.color.exposure", "Exposure", "Exponering"), + ("ec.color.gammapedestalgain", "Gamma/Pedestal/Gain", "Gamma/svartnivå/förstärkning"), + ("ec.color.huesaturation", "Hue/Saturation", "Nyans/mättnad"), + ("ec.color.leavecolor", "Leave Color", "Behåll färg"), + ("ec.color.levels", "Levels", "Nivåer"), + ("ec.color.levelsic", "Levels (Individual Controls)", "Nivåer (individuella kontroller)"), + ("ec.color.lumetri", "Lumetri Color", "Lumetri-färg"), + ("ec.color.ociocdl", "OCIO CDL Transform", "OCIO CDL-transformering"), + ("ec.color.ociocolorspace", "OCIO Color Space Transform", "OCIO färgrymdstransformering"), + ("ec.color.ociodisplay", "OCIO Display Transform", "OCIO visningstransformering"), + ("ec.color.ociofile", "OCIO File Transform", "OCIO filtransformering"), + ("ec.color.ociolook", "OCIO Look Transform", "OCIO look-transformering"), + ("ec.color.photofilter", "Photo Filter", "Fotofilter"), + ("ec.color.psarbitrarymap", "PS Arbitrary Map", "PS godtycklig mappning"), + ("ec.color.selectivecolor", "Selective Color", "Selektiv färg"), + ("ec.color.shadowhighlight", "Shadow/Highlight", "Skugga/högdager"), + ("ec.color.tint", "Tint", "Färgton"), + ("ec.color.tritone", "Tritone", "Tretoning"), + ("ec.color.vibrance", "Vibrance", "Lyster"), + ("ec.color.videolimiter", "Video Limiter", "Videobegränsare"), + ("ec.control.angle", "Angle Control", "Vinkelkontroll"), + ("ec.control.checkbox", "Checkbox Control", "Kryssrutekontroll"), + ("ec.control.color", "Color Control", "Färgkontroll"), + ("ec.control.dropdown", "Dropdown Menu Control", "Kontroll för listmeny"), + ("ec.control.layer", "Layer Control", "Lagerkontroll"), + ("ec.control.point", "Point Control", "Punktkontroll"), + ("ec.control.point3d", "3D Point Control", "3D-punktkontroll"), + ("ec.control.slider", "Slider Control", "Skjutreglagekontroll"), + ("ec.control.stereo3d", "Stereo 3D Controls", "Stereo 3D-kontroller"), + ("ec.distort.bezierwarp", "Bezier Warp", "Bezierförvrängning"), + ("ec.distort.bulge", "Bulge", "Utbuktning"), + ("ec.distort.ccbender", "CC Bender", "CC Bender"), + ("ec.distort.ccbendit", "CC Bend It", "CC Bend It"), + ("ec.distort.ccblobbylize", "CC Blobbylize", "CC Blobbylize"), + ("ec.distort.ccflomotion", "CC Flo Motion", "CC Flo Motion"), + ("ec.distort.ccgriddler", "CC Griddler", "CC Griddler"), + ("ec.distort.cclens", "CC Lens", "CC Objektiv"), + ("ec.distort.ccpageturn", "CC Page Turn", "CC Sidvändning"), + ("ec.distort.ccpowerpin", "CC Power Pin", "CC Power Pin"), + ("ec.distort.ccripplepulse", "CC Ripple Pulse", "CC Krusningspuls"), + ("ec.distort.ccslant", "CC Slant", "CC Lutning"), + ("ec.distort.ccsmear", "CC Smear", "CC Utsmetning"), + ("ec.distort.ccsplit", "CC Split", "CC Dela"), + ("ec.distort.ccsplit2", "CC Split 2", "CC Dela 2"), + ("ec.distort.cctiler", "CC Tiler", "CC Tiler"), + ("ec.distort.cornerpin", "Corner Pin", "Hörnförankring"), + ("ec.distort.displacementmap", "Displacement Map", "Förskjutningskarta"), + ("ec.distort.liquify", "Liquify", "Gör flytande"), + ("ec.distort.magnify", "Magnify", "Förstora"), + ("ec.distort.meshwarp", "Mesh Warp", "Nätförvrängning"), + ("ec.distort.mirror", "Mirror", "Spegel"), + ("ec.distort.offset", "Offset", "Förskjutning"), + ("ec.distort.opticscompensation", "Optics Compensation", "Optikkompensation"), + ("ec.distort.polar", "Polar Coordinates", "Polära koordinater"), + ("ec.distort.puppet", "Puppet", "Docka"), + ("ec.distort.reshape", "Reshape", "Omforma"), + ("ec.distort.ripple", "Ripple", "Krusning"), + ("ec.distort.rollingshutterrepair", "Rolling Shutter Repair", "Reparera rullande slutare"), + ("ec.distort.smear", "Smear", "Utsmetning"), + ("ec.distort.spherize", "Spherize", "Sfärisera"), + ("ec.distort.transform", "Transform", "Transformera"), + ("ec.distort.turbulentdisplace", "Turbulent Displace", "Turbulent förskjutning"), + ("ec.distort.twirl", "Twirl", "Virvel"), + ("ec.distort.twirllegacy", "Twirl (Legacy)", "Virvel (äldre)"), + ("ec.distort.upscale", "Detail-preserving Upscale", "Detaljbevarande uppskalning"), + ("ec.distort.warp", "Warp", "Förvräng"), + ("ec.distort.warpstabilizer", "Warp Stabilizer", "Warp Stabilizer"), + ("ec.distort.wavewarp", "Wave Warp", "Vågförvrängning"), + ("ec.generate.advancedlightning", "Advanced Lightning", "Avancerad blixt"), + ("ec.generate.audiospectrum", "Audio Spectrum", "Ljudspektrum"), + ("ec.generate.audiowaveform", "Audio Waveform", "Ljudvågform"), + ("ec.generate.beam", "Beam", "Stråle"), + ("ec.generate.ccgluegun", "CC Glue Gun", "CC Glue Gun"), + ("ec.generate.cclightburst", "CC Light Burst 2.5", "CC Ljusutbrott 2.5"), + ("ec.generate.cclightrays", "CC Light Rays", "CC Ljusstrålar"), + ("ec.generate.cclightsweep", "CC Light Sweep", "CC Ljussvep"), + ("ec.generate.ccthreads", "CC Threads", "CC Trådar"), + ("ec.generate.cellpattern", "Cell Pattern", "Cellmönster"), + ("ec.generate.checkerboard", "Checkerboard", "Schackbräde"), + ("ec.generate.circle", "Circle", "Cirkel"), + ("ec.generate.ellipse", "Ellipse", "Ellips"), + ("ec.generate.eyedropperfill", "Eyedropper Fill", "Pipettfyllning"), + ("ec.generate.fill", "Fill", "Fyllning"), + ("ec.generate.fourcolor", "4-Color Gradient", "Fyrfärgsgradient"), + ("ec.generate.fractal", "Fractal", "Fraktal"), + ("ec.generate.gradientramp", "Gradient Ramp", "Gradientramp"), + ("ec.generate.grid", "Grid", "Rutnät"), + ("ec.generate.lensflare", "Lens Flare", "Linsreflex"), + ("ec.generate.paintbucket", "Paint Bucket", "Färghink"), + ("ec.generate.radiowaves", "Radio Waves", "Radiovågor"), + ("ec.generate.scribble", "Scribble", "Klotter"), + ("ec.generate.stroke", "Stroke", "Kontur"), + ("ec.generate.vegas", "Vegas", "Vegas"), + ("ec.generate.writeon", "Write-on", "Framskrivning"), + ("ec.key.advancedspill", "Advanced Spill Suppressor", "Avancerad spilldämpning"), + ("ec.key.ccsimplewireremoval", "CC Simple Wire Removal", "CC Enkel trådborttagning"), + ("ec.key.colordifference", "Color Difference Key", "Färgdifferensnyckel"), + ("ec.key.colorkey", "Color Key", "Färgnyckel"), + ("ec.key.colorrange", "Color Range", "Färgomfång"), + ("ec.key.differencematte", "Difference Matte", "Differensmatte"), + ("ec.key.extract", "Extract", "Extrahera"), + ("ec.key.innerouter", "Inner/Outer Key", "Inre/yttre nyckel"), + ("ec.key.keycleaner", "Key Cleaner", "Nyckelrensare"), + ("ec.key.linearcolor", "Linear Color Key", "Linjär färgnyckel"), + ("ec.key.luma", "Luma Key", "Lumanyckel"), + ("ec.key.screen", "Screen Key", "Skärmnyckel"), + ("ec.key.spill", "Spill Suppressor", "Spilldämpning"), + ("ec.key.unmult", "Unmult", "Unmult"), + ("ec.keying.keylight", "Key Light", "Key Light"), + ("ec.matte.mattechoker", "Matte Choker", "Mattekrympning"), + ("ec.matte.objectmatte", "Object Matte", "Objektmatte"), + ("ec.matte.refinehard", "Refine Hard Matte", "Förfina hård matte"), + ("ec.matte.refinesoft", "Refine Soft Matte", "Förfina mjuk matte"), + ("ec.matte.rotobrush", "Roto Brush & Refine Edge", "Rotopensel och förfina kant"), + ("ec.matte.simplechoker", "Simple Choker", "Enkel krympning"), + ("ec.noise.addgrain", "Add Grain", "Lägg till korn"), + ("ec.noise.curlnoise", "Curl Noise", "Curl-brus"), + ("ec.noise.dustscratches", "Dust & Scratches", "Damm och repor"), + ("ec.noise.fractal", "Fractal Noise", "Fraktalbrus"), + ("ec.noise.matchgrain", "Match Grain", "Matcha korn"), + ("ec.noise.median", "Median", "Median"), + ("ec.noise.medianlegacy", "Median (Legacy)", "Median (äldre)"), + ("ec.noise.noise", "Noise", "Brus"), + ("ec.noise.noisealpha", "Noise Alpha", "Alfabrus"), + ("ec.noise.noisehls", "Noise HLS", "HLS-brus"), + ("ec.noise.noisehlsauto", "Noise HLS Auto", "HLS-brus auto"), + ("ec.noise.removegrain", "Remove Grain", "Ta bort korn"), + ("ec.noise.turbulent", "Turbulent Noise", "Turbulent brus"), + ("ec.obsolete.basic3d", "Basic 3D", "Grundläggande 3D"), + ("ec.obsolete.basictext", "Basic Text", "Grundläggande text"), + ("ec.obsolete.gaussianlegacy", "Gaussian Blur (Legacy)", "Gaussisk oskärpa (äldre)"), + ("ec.obsolete.lightning", "Lightning", "Blixt"), + ("ec.obsolete.mochashape", "Mocha shape", "Mocha-form"), + ("ec.obsolete.pathtext", "Path Text", "Text längs bana"), + ("ec.paint.paint", "Paint", "Måla"), + ("ec.perspective.3dglasses", "3D Glasses", "3D-glasögon"), + ("ec.perspective.bevelalpha", "Bevel Alpha", "Alfafasning"), + ("ec.perspective.beveledges", "Bevel Edges", "Fasade kanter"), + ("ec.perspective.cameratracker", "3D Camera Tracker", "3D-kameraspårning"), + ("ec.perspective.cccylinder", "CC Cylinder", "CC Cylinder"), + ("ec.perspective.ccenvironment", "CC Environment", "CC Miljö"), + ("ec.perspective.ccsphere", "CC Sphere", "CC Sfär"), + ("ec.perspective.ccspotlight", "CC Spotlight", "CC Strålkastare"), + ("ec.perspective.dropshadow", "Drop Shadow", "Slagskugga"), + ("ec.perspective.radialshadow", "Radial Shadow", "Radiell skugga"), + ("ec.sim.carddance", "Card Dance", "Kortdans"), + ("ec.sim.caustics", "Caustics", "Kaustik"), + ("ec.sim.ccballaction", "CC Ball Action", "CC Bollåtgärd"), + ("ec.sim.ccbubbles", "CC Bubbles", "CC Bubblor"), + ("ec.sim.ccdrizzle", "CC Drizzle", "CC Duggregn"), + ("ec.sim.cchair", "CC Hair", "CC Hår"), + ("ec.sim.ccmrmercury", "CC Mr. Mercury", "CC Mr. Mercury"), + ("ec.sim.ccparticlesystems2", "CC Particle Systems II", "CC Partikelsystem II"), + ("ec.sim.ccparticleworld", "CC Particle World", "CC Partikelvärld"), + ("ec.sim.ccpixelpolly", "CC Pixel Polly", "CC Pixel Polly"), + ("ec.sim.ccrainfall", "CC Rainfall", "CC Regn"), + ("ec.sim.ccscatterize", "CC Scatterize", "CC Utspridning"), + ("ec.sim.ccsnowfall", "CC Snowfall", "CC Snöfall"), + ("ec.sim.ccstarburst", "CC Star Burst", "CC Stjärnexplosion"), + ("ec.sim.foam", "Foam", "Skum"), + ("ec.sim.particleplayground", "Particle Playground", "Partikellekplats"), + ("ec.sim.shatter", "Shatter", "Krossa"), + ("ec.sim.waveworld", "Wave World", "Vågvärld"), + ("ec.stylize.brushstrokes", "Brush Strokes", "Penseldrag"), + ("ec.stylize.cartoon", "Cartoon", "Tecknat"), + ("ec.stylize.ccblockload", "CC Block Load", "CC Blockladdning"), + ("ec.stylize.ccburnfilm", "CC Burn Film", "CC Bränn film"), + ("ec.stylize.ccglass", "CC Glass", "CC Glas"), + ("ec.stylize.cchextile", "CC HexTile", "CC HexTile"), + ("ec.stylize.cckaleida", "CC Kaleida", "CC Kaleida"), + ("ec.stylize.ccmrsmoothie", "CC Mr. Smoothie", "CC Mr. Smoothie"), + ("ec.stylize.ccplastic", "CC Plastic", "CC Plast"), + ("ec.stylize.ccrepetile", "CC RepeTile", "CC RepeTile"), + ("ec.stylize.ccthreshold", "CC Threshold", "CC Tröskel"), + ("ec.stylize.ccthresholdrgb", "CC Threshold RGB", "CC Tröskel RGB"), + ("ec.stylize.ccvignette", "CC Vignette", "CC Vinjett"), + ("ec.stylize.coloremboss", "Color Emboss", "Färgrelief"), + ("ec.stylize.emboss", "Emboss", "Relief"), + ("ec.stylize.findedges", "Find Edges", "Hitta kanter"), + ("ec.stylize.glow", "Glow", "Glöd"), + ("ec.stylize.mosaic", "Mosaic", "Mosaik"), + ("ec.stylize.motiontile", "Motion Tile", "Rörlig sida vid sida"), + ("ec.stylize.posterize", "Posterize", "Posterisera"), + ("ec.stylize.roughenedges", "Roughen Edges", "Ojämna kanter"), + ("ec.stylize.scatter", "Scatter", "Spridning"), + ("ec.stylize.strobe", "Strobe Light", "Stroboskopljus"), + ("ec.stylize.texturize", "Texturize", "Texturera"), + ("ec.stylize.threshold", "Threshold", "Tröskel"), + ("ec.text.numbers", "Numbers", "Siffror"), + ("ec.text.timecode", "Timecode", "Tidskod"), + ("ec.time.ccforcemotionblur", "CC Force Motion Blur", "CC Tvinga rörelseoskärpa"), + ("ec.time.ccwidetime", "CC Wide Time", "CC Bred tid"), + ("ec.time.echo", "Echo", "Eko"), + ("ec.time.pixelmotionblur", "Pixel Motion Blur", "Pixelrörelseoskärpa"), + ("ec.time.posterizetime", "Posterize Time", "Posterisera tid"), + ("ec.time.timedifference", "Time Difference", "Tidsdifferens"), + ("ec.time.timedisplacement", "Time Displacement", "Tidsförskjutning"), + ("ec.time.timewarp", "Timewarp", "Tidsförvrängning"), + ("ec.transition.blockdissolve", "Block Dissolve", "Blockövertoning"), + ("ec.transition.cardwipe", "Card Wipe", "Kortridå"), + ("ec.transition.ccglasswipe", "CC Glass Wipe", "CC Glasridå"), + ("ec.transition.ccgridwipe", "CC Grid Wipe", "CC Rutnätsridå"), + ("ec.transition.ccimagewipe", "CC Image Wipe", "CC Bildridå"), + ("ec.transition.ccjaws", "CC Jaws", "CC Käftar"), + ("ec.transition.cclightwipe", "CC Light Wipe", "CC Ljusridå"), + ("ec.transition.cclinesweep", "CC Line Sweep", "CC Linjesvep"), + ("ec.transition.ccradialscalewipe", "CC Radial ScaleWipe", "CC Radiell skalridå"), + ("ec.transition.ccscalewipe", "CC Scale Wipe", "CC Skalridå"), + ("ec.transition.cctwister", "CC Twister", "CC Virvel"), + ("ec.transition.ccwarpomatic", "CC WarpoMatic", "CC WarpoMatic"), + ("ec.transition.gradientwipe", "Gradient Wipe", "Gradientridå"), + ("ec.transition.iriswipe", "Iris Wipe", "Irisridå"), + ("ec.transition.linearwipe", "Linear Wipe", "Linjär ridå"), + ("ec.transition.radialwipe", "Radial Wipe", "Radiell ridå"), + ("ec.transition.venetian", "Venetian Blinds", "Persienner"), + ("ec.utility.applylut", "Apply Color LUT", "Använd färg-LUT"), + ("ec.utility.ccoverbrights", "CC Overbrights", "CC Överljust"), + ("ec.utility.cineon", "Cineon Converter", "Cineon-konverterare"), + ("ec.utility.colorprofileconverter", "Color Profile Converter", "Färgprofilkonverterare"), + ("ec.utility.facemeasurements", "Face Measurements", "Ansiktsmått"), + ("ec.utility.facetrackpoints", "Face Track Points", "Ansiktsspårningspunkter"), + ("ec.utility.growbounds", "Grow Bounds", "Väx gränser"), + ("ec.utility.hdrcompander", "HDR Compander", "HDR-kompander"), + ("ec.utility.hdrcompression", "HDR Highlight Compression", "HDR-högdagerkomprimering"), + ("ec.vr.blur", "VR Blur", "VR-oskärpa"), + ("ec.vr.chromaticaberrations", "VR Chromatic Aberrations", "VR-kromatiska aberrationer"), + ("ec.vr.colorgradients", "VR Color Gradients", "VR-färggradienter"), + ("ec.vr.converter", "VR Converter", "VR-konverterare"), + ("ec.vr.denoise", "VR De-Noise", "VR-brusreducering"), + ("ec.vr.digitalglitch", "VR Digital Glitch", "VR-digitala störningar"), + ("ec.vr.fractalnoise", "VR Fractal Noise", "VR-fraktalbrus"), + ("ec.vr.glow", "VR Glow", "VR-glöd"), + ("ec.vr.planetosphere", "VR Plane to Sphere", "VR-plan till sfär"), + ("ec.vr.rotatesphere", "VR Rotate Sphere", "VR-rotera sfär"), + ("ec.vr.sharpen", "VR Sharpen", "VR-skärpa"), + ("ec.vr.spheretoplane", "VR Sphere to Plane", "VR-sfär till plan"), + ("ec.3d.instance3d", "3D Layer Instance", "3D-lagerinstans"), +]; + +/// Swedish (`sv`), written from the English source. +const SWEDISH_CATEGORIES: &[(&str, &str)] = &[ + ("3D Channel", "3D-kanal"), + ("Audio", "Ljud"), + ("Blur & Sharpen", "Oskärpa och skärpa"), + ("Channel", "Kanal"), + ("Color Correction", "Färgkorrigering"), + ("Distort", "Förvräng"), + ("Expression Controls", "Uttryckskontroller"), + ("Generate", "Generera"), + ("Immersive Video", "Immersiv video"), + ("Keying", "Keying"), + ("Matte", "Matte"), + ("Noise & Grain", "Brus och korn"), + ("Obsolete", "Föråldrade"), + ("Paint", "Måla"), + ("Perspective", "Perspektiv"), + ("Simulation", "Simulering"), + ("Stylize", "Stilisera"), + ("Text", "Text"), + ("Time", "Tid"), + ("Transition", "Övergång"), + ("Utility", "Verktyg"), +]; + #[cfg(test)] mod tests { use super::*; @@ -1200,7 +1539,7 @@ mod tests { const PENDING: &[(&str, &[Row])] = &[("zh-hant", TRADITIONAL_CHINESE)]; /// The languages whose tables are being filled in: guarded like [`PENDING`] row by row. - const PARTIAL: &[(&str, &[Row])] = &[("ja", JAPANESE_EFFECTS), ("ka", GEORGIAN)]; + const PARTIAL: &[(&str, &[Row])] = &[("ja", JAPANESE_EFFECTS), ("ka", GEORGIAN), ("sv", SWEDISH)]; /// A pending language may lag Simplified Chinese but may not invent ids or disagree about /// which effect an id names: a translator fills these tables row by row. While they are @@ -1229,9 +1568,13 @@ mod tests { #[test] fn every_category_row_names_a_category() { let categories = effects::categories(); - for (language, rows) in - [("zh-hans", SIMPLIFIED_CHINESE_CATEGORIES), ("zh-hant", TRADITIONAL_CHINESE_CATEGORIES), ("ja", JAPANESE_CATEGORIES), ("ka", GEORGIAN_CATEGORIES)] - { + for (language, rows) in [ + ("zh-hans", SIMPLIFIED_CHINESE_CATEGORIES), + ("zh-hant", TRADITIONAL_CHINESE_CATEGORIES), + ("ja", JAPANESE_CATEGORIES), + ("ka", GEORGIAN_CATEGORIES), + ("sv", SWEDISH_CATEGORIES), + ] { for (english, translated) in rows { assert!(categories.contains(english), "{language} lists {english}, which is not a category"); assert!(!translated.is_empty(), "empty {language} translation for {english}"); @@ -1279,6 +1622,29 @@ mod tests { set_current("en"); } + /// Every Swedish row names an effect the registry has, by the registry's English name; an + /// effect without a row draws its English name, so a new effect does not block other work. + /// Names and categories draw in Swedish and search finds either name. + #[test] + fn swedish_rows_match_the_registry() { + let registry = effects::registry(); + for (id, english, translated) in SWEDISH { + let Some(spec) = registry.iter().find(|spec| spec.id == *id) else { + panic!("Swedish row {id} is not an effect in the registry"); + }; + assert_eq!(*english, spec.name, "{id}: the Swedish catalog says {english:?}, the registry {:?}", spec.name); + assert!(!translated.is_empty(), "{id}: empty Swedish translation"); + } + set_current("sv"); + assert_eq!(name("ec.blur.gaussian", "Gaussian Blur"), "Gaussisk oskärpa"); + assert_eq!(group("ec.blur.gaussian", "Gaussian Blur 2"), "Gaussisk oskärpa 2"); + assert_eq!(group("ec.blur.gaussian", "My Blur"), "My Blur"); + assert_eq!(category("Blur & Sharpen"), "Oskärpa och skärpa"); + assert!(matches("ec.blur.gaussian", "Gaussian Blur", "gaussisk")); + assert!(matches("ec.blur.gaussian", "Gaussian Blur", "blur")); + set_current("en"); + } + /// The Effects & Presets search answers to either name, so a Chinese interface can be /// searched in Chinese while an English one still finds the effect by its registry name. #[test] diff --git a/crates/ui-egui/src/i18n/ui.rs b/crates/ui-egui/src/i18n/ui.rs index ed4378271..058ed147a 100644 --- a/crates/ui-egui/src/i18n/ui.rs +++ b/crates/ui-egui/src/i18n/ui.rs @@ -22,7 +22,7 @@ use std::fmt::Display; use std::sync::OnceLock; thread_local! { - /// The resolved interface language ("en", "ja", "zh-hans", "zh-hant", "uk", "pt-br", "cs", "es", "pl", "ka"); "en" until the first + /// The resolved interface language ("en", "ja", "zh-hans", "zh-hant", "uk", "pt-br", "cs", "es", "pl", "ka", "sv"); "en" until the first /// frame sets it. static CURRENT: Cell<&'static str> = const { Cell::new("en") }; } @@ -53,6 +53,7 @@ const ROWS: &[(&str, &[(&str, &str)])] = &[ ("pl", POLISH), ("ka", GEORGIAN), ("ka", GEORGIAN_PANELS), + ("sv", SWEDISH), ]; /// The catalog for `language`, indexed by English source (built on first use: panels translate @@ -67,6 +68,7 @@ fn catalog(language: &str) -> Option<&'static Index> { static ES: OnceLock = OnceLock::new(); static PL: OnceLock = OnceLock::new(); static KA: OnceLock = OnceLock::new(); + static SV: OnceLock = OnceLock::new(); let (index, rows) = match language { "ja" => (&JA, JAPANESE), "zh-hans" => (&HANS, SIMPLIFIED_CHINESE), @@ -78,6 +80,7 @@ fn catalog(language: &str) -> Option<&'static Index> { "pl" => (&PL, POLISH), // Georgian also reads its own rows for text the other catalogs don't have yet. "ka" => return Some(KA.get_or_init(|| GEORGIAN.iter().chain(GEORGIAN_PANELS).copied().collect())), + "sv" => (&SV, SWEDISH), _ => return None, }; Some(index.get_or_init(|| rows.iter().copied().collect())) @@ -2400,6 +2403,1173 @@ const SIMPLIFIED_CHINESE: &[(&str, &str)] = &[ ("Record Options...", "记录选项..."), ]; +/// Swedish (`sv`), written from the English source. +const SWEDISH: &[(&str, &str)] = &[ + ("Appearance Settings…", "Utseendeinställningar…"), + ("Add to favorites", "Lägg till i favoriter"), + ("Remove from favorites", "Ta bort från favoriter"), + (" OK ", " OK "), + (" Delete ", " Radera "), + (" Open Auto-Save ", " Öppna autosparad fil "), + ("(missing)", "(saknas)"), + ("360 View Orientation", "Orientering för 360-vy"), + ("3:2 Pulldown: {}", "3:2-pulldown: {}"), + ( + "A clean-room, open-source compositor for motion graphics and visual effects: native on macOS, Windows and Linux, and in the browser. Part of the ArtCraft family of creative apps.", + "En clean room-utvecklad kompositör med öppen källkod för rörlig grafik och visuella effekter: inbyggd på macOS, Windows och Linux samt i webbläsaren. Del av ArtCraft-familjen av kreativa program.", + ), + ("About EffectCraft", "Om EffectCraft"), + ("About...", "Om..."), + ("Active", "Aktiv"), + ("Active Camera", "Aktiv kamera"), + ("Alpha", "Alfa"), + ("Adapt Feature On Every Frame", "Anpassa spårdetalj i varje bildruta"), + ("Adaptive Sample Limit:", "Gräns för adaptiva sampel:"), + ("Add Animator", "Lägg till animerare"), + ("Add Comment", "Lägg till kommentar"), + ("Add Formatting", "Lägg till formatering"), + ("Add Group", "Lägg till grupp"), + ("Add Mirror", "Lägg till spegel"), + ("Add Selected As", "Lägg till markerade som"), + ("Add a comment", "Lägg till en kommentar"), + ("Add a shape, fill, stroke or path operation", "Lägg till en form, fyllning, kontur eller banoperation"), + ("Add to Composition", "Lägg till i komposition"), + ("Add to Favorites", "Lägg till i favoriter"), + ("Add:", "Lägg till:"), + ("Adjust Exposure (stops)", "Justera exponering (stopp)"), + ("Adjust composition duration to the time span of the selected layers", "Anpassa kompositionens längd till de markerade lagrens tidsspann"), + ("Advanced 3D", "Avancerad 3D"), + ("Align Layers to:", "Justera lager mot:"), + ("All six face cameras turn together; the scene is not changed.", "Alla sex sidokameror vrids tillsammans; scenen ändras inte."), + ("Anchor:", "Ankare:"), + ("Aperture", "Bländare"), + ("Appearance Mode", "Utseendeläge"), + ("Appearance Mode: {}", "Utseendeläge: {}"), + ("Apply Dimensions:", "Använd dimensioner:"), + ("Apply Motion To:", "Använd rörelse på:"), + ("Arrange", "Ordna"), + ("Assign", "Tilldela"), + ("Auto", "Auto"), + ("Auto-saves", "Automatiska sparningar"), + ("Back", "Tillbaka"), + ("Background Color:", "Bakgrundsfärg:"), + ("Blend Mode:", "Blandningsläge:"), + ("Blending Mode", "Blandningsläge"), + ("Blur", "Oskärpa"), + ("Blur Level", "Oskärpenivå"), + ("Boundary", "Gräns"), + ("Browser Storage", "Webbläsarlagring"), + ("Browse…", "Bläddra…"), + ("Brush Dynamics", "Penseldynamik"), + ("Caching frames…", "Cachelagrar bildrutor…"), + ("Cancel", "Avbryt"), + ("Casts Shadows", "Kastar skuggor"), + ("Change Renderer…", "Byt renderare…"), + ( + "Changing a shortcut creates a custom preset; the default stays as it is.", + "Om du ändrar ett kortkommando skapas en anpassad förinställning; standardinställningen förblir som den är.", + ), + ("Channel", "Kanal"), + ("Channel:", "Kanal:"), + ("Chapter:", "Kapitel:"), + ("Choose...", "Välj..."), + ("Classic 3D", "Klassisk 3D"), + ("Clear", "Rensa"), + ("Clear list", "Rensa listan"), + ("Click a key to see its commands.", "Klicka på en tangent för att se dess kommandon."), + ( + "Click above the bar to add an opacity stop, below it to add a color stop.", + "Klicka ovanför fältet för att lägga till ett opacitetsstopp och under det för att lägga till ett färgstopp.", + ), + ("Click adds a point (½ height = no change)", "Klicka för att lägga till en punkt (½ höjd = ingen ändring)"), + ("Click adds a point; drag one off to remove", "Klicka för att lägga till en punkt; dra ut en punkt för att ta bort den"), + ("Click to make this viewer active", "Klicka för att göra den här visningen aktiv"), + ("Click to reveal the expression in the timeline", "Klicka för att visa uttrycket i tidslinjen"), + ("Click to show the active composition here", "Klicka för att visa den aktiva kompositionen här"), + ("Click, then click in the Composition panel", "Klicka och klicka sedan i panelen Komposition"), + ("Clone Options", "Klonalternativ"), + ("Clone Source Overlay:", "Överlägg för klonkälla:"), + ("Close", "Stäng"), + ("Close Panel", "Stäng panel"), + ("Close tutorial", "Stäng självstudien"), + ("Color", "Färg"), + ("Color Depth: {}", "Färgdjup: {}"), + ("Color:", "Färg:"), + ("Colour map", "Färgkarta"), + ("Columns", "Kolumner"), + ("Comment:", "Kommentar:"), + ("Community", "Gemenskap"), + ("Composition", "Komposition"), + ("Composition Mini-Flowchart", "Kompositionens miniflödesschema"), + ("Composition Name:", "Kompositionsnamn:"), + ("Composition Settings ▸ 3D Renderer", "Kompositionsinställningar ▸ 3D-renderare"), + ("Composition Settings…", "Kompositionsinställningar…"), + ("Composition marker bin: drag a marker to the time ruler", "Kompositionens markörbin: dra en markör till tidslinjalen"), + ("Cone Angle", "Konvinkel"), + ("Cone Feather", "Konfjädring"), + ("Constrain Proportions", "Behåll proportioner"), + ("Continuous (Lock Outgoing to Incoming)", "Kontinuerlig (lås utgående till inkommande)"), + ("Cue Point", "Referenspunkt"), + ("Current Render", "Aktuell rendering"), + ("Dark", "Mörk"), + ("Dark Theme", "Mörkt tema"), + ("Darker", "Mörkare"), + ("Default Output:", "Standardutgång:"), + ("Default: {}", "Standard: {}"), + ("Defaults", "Standardvärden"), + ("Delete", "Radera"), + ("Delete Selected Points", "Radera markerade punkter"), + ("Delete selected project items", "Radera markerade projektobjekt"), + ("Delete this template", "Radera den här mallen"), + ("Depth of Field", "Skärpedjup"), + ("Discord", "Discord"), + ("Distribute Layers:", "Fördela lager:"), + ("Don't Recover", "Återställ inte"), + ("Don't Save", "Spara inte"), + ("Double-click a layer to open it in the Layer panel", "Dubbelklicka på ett lager för att öppna det i panelen Lager"), + ("Double-click footage in the Project panel to open it here", "Dubbelklicka på material i panelen Projekt för att öppna det här"), + ("Double-click to edit the comment", "Dubbelklicka för att redigera kommentaren"), + ("Download", "Hämta"), + ( + "Drag properties here from the timeline,\nor use Animation > Add Property to Essential Graphics.", + "Dra hit egenskaper från tidslinjen,\neller använd Animering > Lägg till egenskap i Grundläggande grafik.", + ), + ("Drag to change", "Dra för att ändra"), + ("Drag to create a guide", "Dra för att skapa en stödlinje"), + ("Drag to slip the source", "Dra för att slip-flytta källan"), + ("Drop Frame", "Drop frame"), + ("Duplicate", "Duplicera"), + ("Duration:", "Längd:"), + ("Edit Gradient…", "Redigera gradient…"), + ("Edit Target: {}", "Redigeringsmål: {}"), + ("EffectCraft didn't quit normally last time.", "EffectCraft avslutades inte normalt förra gången."), + ("Effects & Presets options", "Alternativ för Effekter och förinställningar"), + ("Copy Presets Folder Path", "Kopiera sökväg till förinställningsmappen"), + ("Effects: {}", "Effekter: {}"), + ("Empty folder", "Tom mapp"), + ("Enable Depth of Field", "Aktivera skärpedjup"), + ("Enable Expression", "Aktivera uttryck"), + ("Enhance", "Förbättra"), + ("Essential Properties — {}", "Grundläggande egenskaper — {}"), + ("Event", "Händelse"), + ("Export Template…", "Exportera mall…"), + ("Export...", "Exportera..."), + ("Expression Language Menu", "Meny för uttrycksspråk"), + ("Expression pick whip: drag onto a property", "Uttryckets plockpiska: dra till en egenskap"), + ("Expression:", "Uttryck:"), + ("Eyedropper: click, then click in the Composition panel", "Pipett: klicka och klicka sedan i panelen Komposition"), + ("Falloff", "Avtagande"), + ("Falloff Distance", "Avstånd för avtagande"), + ("Favorites", "Favoriter"), + ("Field Render: {}", "Fältrendering: {}"), + ("Figures", "Figurer"), + ("Fill Target", "Fyllningsmål"), + ("Finished", "Klar"), + ("Flowchart: {}", "Flödesschema: {}"), + ("Focus Distance", "Fokusavstånd"), + ("Follow Feature Rotation and Scale", "Följ detaljens rotation och skala"), + ("Footage: {}", "Material: {}"), + ("Format: {}", "Format: {}"), + ("Frame Aspect Ratio: {}", "Bildförhållande för bildruta: {}"), + ("Frame Blending: {}", "Bildblandning: {}"), + ("Frame Rate:", "Bildfrekvens:"), + ("Frame Render Time {}ms", "Renderingstid per bildruta {} ms"), + ("Frame Target:", "Bildrutemål:"), + ("Freeze", "Frys"), + ("Grab bag", "Blandat"), + ("Gradient Editor", "Gradientredigerare"), + ("Grid", "Rutnät"), + ("Guide Layers: {}", "Stödlager: {}"), + ("Guides", "Stödlinjer"), + ("Height:", "Höjd:"), + ("Hide This", "Dölj den här"), + ("Histogram", "Histogram"), + ("Hold In Place", "Håll kvar på plats"), + ("Home", "Start"), + ("If Confidence is Below", "Om konfidensen är under"), + ("Import", "Importera"), + ("Import and Add to Composition", "Importera och lägg till i komposition"), + ("Import...", "Importera..."), + ("Imported media", "Importerade media"), + ("Influence:", "Inverkan:"), + ("Install from File…", "Installera från fil…"), + ("Intensity", "Intensitet"), + ("Inverted", "Inverterad"), + ("Join the ArtCraft community on Discord", "Gå med i ArtCrafts community på Discord"), + ("Key: {}", "Tangent: {}"), + ("LEARN", "LÄR DIG"), + ("Label", "Etikett"), + ("Label Colors and Names:", "Etikettfärger och namn:"), + ("Label:", "Etikett:"), + ("Latest auto-save: {}", "Senaste autosparning: {}"), + ("Layer", "Lager"), + ("Layer controls", "Lagerkontroller"), + ("Layer:", "Lager:"), + ("Layer: {}", "Lager: {}"), + ("Learn", "Lär dig"), + ("Leave all attributes in \"{}\"", "Lämna alla attribut i \"{}\""), + ("Licence: {}", "Licens: {}"), + ("Ligatures", "Ligaturer"), + ("Light", "Ljus"), + ("Light Theme", "Ljust tema"), + ("Light Type", "Ljustyp"), + ("Lighter", "Ljusare"), + ("Link Selected Property", "Länka markerad egenskap"), + ("Location:", "Plats:"), + ("Lock Aspect Ratio to {}", "Lås bildförhållandet till {}"), + ("Lock to Zoom", "Lås till zoom"), + ("Locked: {} — {}", "Låst: {} — {}"), + ("Log:", "Log:"), + ("Loop (Trace Path)", "Loopa (följ bana)"), + ("MIT OR Apache-2.0 • Fonts: Inter, JetBrains Mono (OFL)", "MIT OR Apache-2.0 • Typsnitt: Inter, JetBrains Mono (OFL)"), + ("Magnification ratio popup", "Meny för förstoringsgrad"), + ("Make Comp Size", "Anpassa till kompositionsstorlek"), + ("Markers", "Markörer"), + ("Masks", "Masker"), + ("Maximize Panel", "Maximera panel"), + ("Media Replacement", "Ersätt media"), + ("Mesh:", "Nät:"), + ("Diameter:", "Diameter:"), + ("Method Used: {} Average Error: {} pixels", "Använd metod: {} Medelfel: {} pixlar"), + ("Models folder: {}", "Modellmapp: {}"), + ("Modifiers:", "Modifieringstangenter:"), + ("More", "Mer"), + ("More ArtCraft apps", "Fler ArtCraft-appar"), + ("More tutorials", "Fler självstudier"), + ("Motion Blur", "Rörelseoskärpa"), + ("Motion Blur: {}", "Rörelseoskärpa: {}"), + ("Motion Sketch: drag to record", "Rörelseskiss: dra för att spela in"), + ("Move Down", "Flytta ned"), + ("Move Up", "Flytta upp"), + ("Move to Project Root", "Flytta till projektets rot"), + ("Name", "Namn"), + ("Name:", "Namn:"), + ("Navigation", "Navigering"), + ("New", "Nytt"), + ("New Comp from Selection", "Ny komposition från markering"), + ("Replace with Precomposition", "Ersätt med förkomposition"), + ("New Duration:", "Ny längd:"), + ("New composition name:", "Namn på ny komposition:"), + ("New from Render Queue item:", "Ny från objekt i renderingskön:"), + ("New from Template", "Ny från mall"), + ("Next", "Nästa"), + ("Nice work. Pick another tutorial on the Home screen's Learn tab.", "Bra jobbat! Välj en annan självstudie på fliken Lär dig på startskärmen."), + ( + "No VR environments yet. Create one with Composition ▸ VR ▸ Create VR Environment…", + "Inga VR-miljöer ännu. Skapa en med Komposition ▸ VR ▸ Skapa VR-miljö…", + ), + ("No audio layer selected", "Inget ljudlager markerat"), + ("No background jobs running", "Inga bakgrundsjobb körs"), + ("No composition markers", "Inga kompositionsmarkörer"), + ("No contributor data was built into this copy.", "Inga uppgifter om bidragsgivare finns inbyggda i den här kopian."), + ("No device list from this host; the system default output is used.", "Värden tillhandahåller ingen enhetslista. Systemets standardutgång används."), + ("No layer selected", "Inget lager markerat"), + ("No matching effects or presets", "Inga matchande effekter eller förinställningar"), + ("No matching fonts", "Inga matchande typsnitt"), + ("Variable fonts only", "Endast variabla typsnitt"), + ("No model credits were built into this copy.", "Inga modellkrediteringar finns inbyggda i den här kopian."), + ("No nested compositions", "Inga kapslade kompositioner"), + ("No shortcut", "Inget kortkommando"), + ("No unlocked layer selected", "Inget upplåst lager markerat"), + ("No video", "Ingen video"), + ("None", "Ingen"), + ("Not applied: tick it in the list to add it.", "Inte använd: markera den i listan för att lägga till den."), + ("Not assigned", "Inte tilldelad"), + ("Note: Shadows are only cast from layers with Cast Shadows enabled.", "Obs! Skuggor kastas bara från lager där Kasta skuggor är aktiverat."), + ("Notify", "Meddela"), + ("OK", "OK"), + ("Offset:", "Förskjutning:"), + ("On ({}) stop:", "Vid stopp ({}):"), + ("One-Node Camera", "Kamera med en nod"), + ("Opacity:", "Opacitet:"), + ("Open Composition", "Öppna komposition"), + ("used once", "används en gång"), + ("used {} times", "används {} gånger"), + ("Compositions that use this item", "Kompositioner som använder det här objektet"), + ("Open Last Saved Project", "Öppna senast sparade projekt"), + ("Open New Composition", "Öppna ny komposition"), + ("Open Output", "Öppna utdata"), + ("Open a composition to build Essential Graphics", "Öppna en komposition för att bygga grundläggande grafik"), + ("Open a composition to see its scopes", "Öppna en komposition för att se dess mätinstrument"), + ("Open a composition to track motion.", "Öppna en komposition för att spåra rörelse."), + ("Opus Tuning: {}", "Opus-optimering: {}"), + ("Original Duration:", "Ursprunglig längd:"), + ("Output Cycle: {}", "Utdatacykel: {}"), + ("Output To:", "Utdata till:"), + ("Overlay", "Överlägg"), + ("Parameter Name:", "Parameternamn:"), + ("Parent pick whip: drag onto a layer", "Överordnad väljare: dra till ett lager"), + ("Pixel Aspect Ratio:", "Pixelproportioner:"), + ("Playing on Video Preview", "Spelas upp i videoförhandsgranskningen"), + ("Post-Render Action: {}", "Åtgärd efter rendering: {}"), + ("Preserve frame rate when nested or in render queue", "Bevara bildfrekvensen när den är kapslad eller i renderingskön"), + ("Preserve resolution when nested", "Bevara upplösningen när den är kapslad"), + ("Preset", "Förinställning"), + ("Preset:", "Förinställning:"), + ("Presets", "Förinställningar"), + ("Previous", "Föregående"), + ("Primary:", "Primär:"), + ("Process Before Match", "Bearbeta före matchning"), + ("Profile: {}", "Profil: {}"), + ( + "Project color depth: click to cycle 8/16/32 bpc, Alt-click for Project Settings", + "Projektets färgdjup: klicka för att växla mellan 8/16/32 bpc, Alt-klicka för projektinställningar", + ), + ("Project: {}", "Projekt: {}"), + ("Projects", "Projekt"), + ("Property pick whip: drag onto a property", "Egenskapsväljare: dra till en egenskap"), + ("Protected Region", "Skyddad region"), + ("Proxy Use: {}", "Proxyanvändning: {}"), + ("Push All to Comp", "Skjut alla till kompositionen"), + ("RGB", "RGB"), + ("Radius", "Radie"), + ("Rate Control: {}", "Bithastighetsstyrning: {}"), + ("Recent", "Senaste"), + ("Recording", "Spelar in"), + ("Remove", "Ta bort"), + ("Rename", "Byt namn"), + ("Render: {} ms • UI {} fps{}", "Rendering: {} ms • UI {} bild/s{}"), + ("Renderer:", "Renderare:"), + ("Request Persistent Storage", "Begär beständig lagring"), + ("Reset", "Återställ"), + ("Reset Labels", "Återställ etiketter"), + ("Reset Preset", "Återställ förinställning"), + ("Reset to Default", "Återställ till standard"), + ("Reset to Saved Layout", "Återställ till sparad layout"), + ("Resolution/Down Sample Factor Popup", "Meny för upplösning/nedsamplingsfaktor"), + ("Restore Panel Size", "Återställ panelstorlek"), + ("Reverse the order", "Vänd på ordningen"), + ("Revert All", "Återgå för alla"), + ("Roman Hanging Punctuation", "Hängande interpunktion (roman)"), + ("Roving:", "Rörlig:"), + ("Ruler zero point (drag to move, double-click to reset)", "Linjalens nollpunkt (dra för att flytta, dubbelklicka för att återställa)"), + ("Rulers", "Linjaler"), + ("Run", "Kör"), + ("Sample Format: {}", "Samplingsformat: {}"), + ("Samples Per Frame:", "Samplingar per bildruta:"), + ("Save from #{}", "Spara från #{}"), + ("Saved {}", "Sparat {}"), + ("Script… (⌘/Ctrl+Enter runs)", "Skript… (⌘/Ctrl+Enter kör)"), + ("Search commands or shortcuts", "Sök kommandon eller kortkommandon"), + ("Select", "Markera"), + ("Select a command to change its shortcut.", "Markera ett kommando för att ändra dess kortkommando."), + ("Select a layer to see its effects", "Markera ett lager för att se dess effekter"), + ("Select a layer to see its properties", "Markera ett lager för att se dess egenskaper"), + ("({}) Selected Objects", "({}) markerade objekt"), + ( + "Select a layer with a mask or shape path (or the path property), or Puppet pins.", + "Markera ett lager med en mask- eller formbana (eller banegenskapen) eller marionettnålar.", + ), + ("Select a text layer", "Markera ett textlager"), + ("Select an item in the Project panel", "Markera ett objekt i panelen Projekt"), + ("Select animated properties to show them in the Graph Editor", "Markera animerade egenskaper för att visa dem i grafredigeraren"), + ( + "Select the leader pin, then Shift-click the pins that should trail it (hair, cloth, tails)", + "Markera ledarnålen och Shift-klicka sedan på nålarna som ska följa efter den (hår, tyg, svansar)", + ), + ("Set Ground Plane and Origin", "Ange markplan och origo"), + ("Set Paint Colors to Black and White (D)", "Ställ in målarfärger på svart och vitt (D)"), + ("Settings", "Inställningar"), + ("Settings Name:", "Inställningsnamn:"), + ("Shadow Darkness", "Skuggmörkhet"), + ("Shadow Diffusion", "Skuggdiffusion"), + ("Shadows", "Skuggor"), + ("Shape…", "Form…"), + ("Show", "Visa"), + ("Show Layer Name", "Visa lagernamn"), + ("Show Source Name", "Visa källnamn"), + ("Show me", "Visa mig"), + ("Show:", "Visa:"), + ("Shutter Angle:", "Slutarvinkel:"), + ("Shutter Phase:", "Slutarfas:"), + ("Size", "Storlek"), + ("Skip", "Hoppa över"), + ("Snapping", "Fäst"), + ("Snapping options", "Fästalternativ"), + ("Snapshot", "Ögonblicksbild"), + ("Solo Supported Properties", "Solo för egenskaper som stöds"), + ("Solo Switches: {}", "Soloväxlar: {}"), + ("Sort", "Sortera"), + ("Spacing:", "Avstånd:"), + ("Spatial Interpolation:", "Rumslig interpolering:"), + ("Speed:", "Hastighet:"), + ("Start Timecode:", "Starttidskod:"), + ("Start: {} Duration: {}", "Start: {} Längd: {}"), + ("Step {} of {}: {}", "Steg {} av {}: {}"), + ("Stop", "Stoppa"), + ("Stop {} at {}°", "Stopp {} vid {}°"), + ("Stored in: {}", "Lagras i: {}"), + ("Stretch", "Sträck"), + ("Stretch Factor:", "Sträckfaktor:"), + ("Stylistic Sets", "Stilistiska uppsättningar"), + ("Subpixel Positioning", "Subpixelpositionering"), + ("Swap Colors", "Byt plats på färger"), + ("Swap Paint Colors (X)", "Byt plats på målarfärger (X)"), + ("Sync with System", "Synka med systemet"), + ("System Default", "Systemstandard"), + ("Table", "Tabell"), + ("Template name", "Mallnamn"), + ("Template: {}\n{}", "Mall: {}\n{}"), + ("Temporal Interpolation:", "Tidsinterpolering:"), + ("The Media Browser is not available here (use File ▸ Import)", "Mediebläddraren är inte tillgänglig här (använd Arkiv ▸ Importera)"), + ("The OpenEXR layer shown in red, green, blue and alpha", "OpenEXR-lagret visas i rött, grönt, blått och alfa"), + ("The render queue is empty.", "Renderingskön är tom."), + ( + "These adjacent keyframes cannot interpolate because their stop counts differ.", + "De här intilliggande nyckelbildrutorna kan inte interpoleras eftersom de har olika antal stopp.", + ), + ("This ScriptUI panel has closed", "Den här ScriptUI-panelen har stängts"), + ("This change will create a new solid for this layer.", "Den här ändringen skapar ett nytt enfärgat lager för det här lagret."), + ("Time", "Tid"), + ("Time Stretch…", "Tidssträckning…"), + ("Time:", "Tid:"), + ("Time: {}", "Tid: {}"), + ("Title/Action Safe", "Text-/bildsäkert område"), + ("Title/action safe", "Textsäkert/bildsäkert område"), + ("Toggle Switches / Modes", "Växla reglage/lägen"), + ("Track Name:", "Spårnamn:"), + ( + "Trained models are available in the desktop app; the browser uses the classic engine.", + "Tränade modeller finns i skrivbordsappen; webbläsaren använder den klassiska motorn.", + ), + ("Transform", "Transformera"), + ("Transparency grid", "Transparensrutnät"), + ("Tutorial complete", "Självstudien är klar"), + ("Two-Node Camera", "Kamera med två noder"), + ("Type", "Typ"), + ("Type a command or effect…", "Skriv ett kommando eller en effekt…"), + ("URL:", "URL:"), + ("Undock Panel", "Lossa panel"), + ("Move Panel to New Window", "Flytta panelen till ett nytt fönster"), + ("Move Panel to Main Window", "Flytta panelen till huvudfönstret"), + ("Unfreeze", "Tina upp"), + ("Unlink {}", "Ta bort länk till {}"), + ( + "Use this option to place the currently selected layers together into a new intermediate composition.", + "Använd det här alternativet för att placera de markerade lagren tillsammans i en ny mellanliggande komposition.", + ), + ("VR Environments", "VR-miljöer"), + ("Value:", "Värde:"), + ("Variable Font Axes", "Axlar för variabla typsnitt"), + ("Video Codec: {}", "Videokodek: {}"), + ("View:", "Vy:"), + ("Welcome to EffectCraft", "Välkommen till EffectCraft"), + ("Width:", "Bredd:"), + ("You can undo this.", "Du kan ångra detta."), + ("You can't undo this.", "Du kan inte ångra detta."), + ("Your changes will be lost if you don't save them.", "Dina ändringar går förlorade om du inte sparar dem."), + ("Zoom", "Zoom"), + ("built-in", "inbyggd"), + ("frames per second", "bilder per sekund"), + ("template name", "mallnamn"), + ("{} contributors · {} commits", "{} bidragsgivare · {} commits"), + ("{} x {}, {}MB per 8bpc frame", "{} x {}, {} MB per bildruta i 8 bpc"), + ("{} — coming soon", "{} – kommer snart"), + ("{} — double-click to open, {}-click to reveal", "{} – dubbelklicka för att öppna, {}-klicka för att visa i mappen"), + ("⌘/Ctrl-drag a pin to record its motion", "⌘/Ctrl-dra en nål för att spela in dess rörelse"), + ("▣ {}", "▣ {}"), + ("⚠ {} is used by:", "⚠ {} används av:"), + ("3D Reference Axes", "3D-referensaxlar"), + ("Affect all layers that use this solid", "Påverka alla lager som använder den här enfärgade ytan"), + ("Choose grid and guide options", "Välj alternativ för rutnät och stödlinjer"), + ("Colorize", "Färglägg"), + ("Custom", "Anpassad"), + ("Custom...", "Anpassad..."), + ("Fit", "Anpassa"), + ("Fit up to 100%", "Anpassa upp till 100 %"), + ("Full", "Full"), + ("Half", "Halv"), + ("Only this layer uses this solid.", "Bara det här lagret använder den här enfärgade ytan."), + ("Proportional Grid", "Proportionellt rutnät"), + ("Quarter", "Fjärdedel"), + ("Region of Interest", "Intresseområde"), + ("Reset Exposure", "Återställ exponering"), + ("Show Channel and Color Management Settings", "Visa inställningar för kanal och färghantering"), + ("Show Snapshot (hold)", "Visa ögonblicksbild (håll ned)"), + ("Take Snapshot", "Ta ögonblicksbild"), + ("Third", "Tredje"), + ("Toggle Mask and Shape Path Visibility", "Växla synlighet för mask- och formbanor"), + ("Toggle Transparency Grid", "Växla transparensrutnät"), + ("16 bits per channel", "16 bitar per kanal"), + ("32 bits per channel (float)", "32 bitar per kanal (flyttal)"), + ("8 bits per channel", "8 bitar per kanal"), + ("Adaptive Resolution", "Adaptiv upplösning"), + ("Adobe-style built-in", "Inbyggd i Adobe-stil"), + ("Blue", "Blå"), + ("Current Settings", "Aktuella inställningar"), + ("Disable Per-character 3D", "Inaktivera 3D per tecken"), + ("Draft", "Utkast"), + ("Enable Per-character 3D", "Aktivera 3D per tecken"), + ("Fast Draft", "Snabbt utkast"), + ("Fast Previews (Draft 3D, Faster Effects)", "Snabba förhandsgranskningar (3D-utkast, snabbare effekter)"), + ("Green", "Grön"), + ("Import Image Sequence", "Importera bildsekvens"), + ("Import PDF / Illustrator File", "Importera PDF-/Illustrator-fil"), + ("Import Photoshop File", "Importera Photoshop-fil"), + ("Interpret Unlabeled Alpha As", "Tolka omärkt alfa som"), + ("Join the ArtCraft Discord", "Gå med i ArtCraft på Discord"), + ("Mercury GPU Acceleration ({})", "Mercury GPU-acceleration ({})"), + ("Mercury Software Only", "Endast Mercury-programvara"), + ("OCIO (built-in ACES config)", "OCIO (inbyggd ACES-konfiguration)"), + ("Off (Final Quality)", "Av (slutlig kvalitet)"), + ("OpenGL (compatibility)", "OpenGL (kompatibilitet)"), + ("Opus Bitrate: {} kbps", "Opus-bithastighet: {} kbit/s"), + ("RGB Straight", "RGB (rak)"), + ("Red", "Röd"), + ("Tone map", "Tonmappning"), + ("Use In-Window Menu Bar on macOS", "Använd menyrad i fönstret på macOS"), + ("Wireframe", "Trådram"), + ("sRGB IEC61966-2.1 (default)", "sRGB IEC61966-2.1 (standard)"), + ("New Project", "Nytt projekt"), + ("Open Project…", "Öppna projekt…"), + ("Templates", "Mallar"), + ("EffectCraft home page", "EffectCrafts webbplats"), + ("EffectCraft on GitHub", "EffectCraft på GitHub"), + ("Motion graphics and visual effects · version {}", "Rörlig grafik och visuella effekter · version {}"), + ("New Composition", "Ny komposition"), + ("Open Demo Project", "Öppna demoprojekt"), + ("Import Footage…", "Importera material…"), + ("Filter recent files", "Filtrera senaste filer"), + ("NAME", "NAMN"), + ("OPENED", "ÖPPNAD"), + ("SIZE", "STORLEK"), + ("KIND", "TYP"), + ("Your recent files will show here", "Dina senaste filer visas här"), + ("Create a new project, or open the demo project to look around.", "Skapa ett nytt projekt, eller öppna demoprojektet för att titta runt."), + ("No recent files match the filter", "Inga senaste filer matchar filtret"), + ("Try another name or folder.", "Prova ett annat namn eller en annan mapp."), + ("Just now", "Nyss"), + ("Yesterday", "I går"), + ("{} minute ago", "för {} minut sedan"), + ("{} minutes ago", "för {} minuter sedan"), + ("{} hour ago", "för {} timme sedan"), + ("{} hours ago", "för {} timmar sedan"), + ("{} day ago", "för {} dag sedan"), + ("{} days ago", "för {} dagar sedan"), + ("EffectCraft project", "EffectCraft-projekt"), + ("After Effects project", "After Effects-projekt"), + ("Lottie animation", "Lottie-animering"), + ("Project", "Projekt"), + ("General", "Allmänt"), + ("Language", "Språk"), + ("Levels of Undo", "Antal ångranivåer"), + ("Path Point and Handle Size", "Storlek på banpunkter och handtag"), + ("Recent Projects Shown", "Antal senaste projekt som visas"), + ("Options", "Alternativ"), + ("Show Tool Tips", "Visa verktygstips"), + ("Create Layers at Composition Start Time", "Skapa lager vid kompositionens starttid"), + ("Switches Affect Nested Comps", "Växlar påverkar kapslade kompositioner"), + ("Default Spatial Interpolation to Linear", "Linjär spatial interpolering som standard"), + ("Preserve Constant Vertex and Feather Point Count when Editing Masks", "Bevara konstant antal hörn och fjäderpunkter vid redigering av masker"), + ("Synchronize Time of All Related Items", "Synkronisera tid för alla relaterade objekt"), + ("Expression Pick Whip Writes Compact English", "Uttryckets plockpiska skriver kompakt engelska"), + ("Create Split Layers Above Original Layer", "Skapa delade lager ovanför originallagret"), + ("Use System Color Picker", "Använd systemets färgväljare"), + ( + "EffectCraft always uses its own colour picker (the same on every platform and the web).", + "EffectCraft använder alltid sin egen färgväljare (densamma på alla plattformar och på webben).", + ), + ("Startup & Repair", "Start och reparation"), + ("Show Home Screen When Launching", "Visa startskärmen vid start"), + ("Show Home Screen When Opening a Project", "Visa startskärmen när ett projekt öppnas"), + ("Offer to Open the Latest Auto-Save After a Crash", "Erbjud att öppna den senaste autosparningen efter en krasch"), + ("Window Graphics", "Fönstergrafik"), + ("Automatic", "Automatisk"), + ( + "Window Graphics applies from the next launch. When the graphics driver stops EffectCraft as its window opens, the next launch switches to OpenGL.", + "Fönstergrafik tillämpas från nästa start. Om grafikdrivrutinen stoppar EffectCraft när fönstret öppnas byter nästa start till OpenGL.", + ), + ("Repair", "Reparera"), + ("Reset Settings", "Återställ inställningar"), + ("Reset Keyboard Shortcuts", "Återställ kortkommandon"), + ("Empty Disk Cache", "Töm diskcache"), + ("New Project Loads Template", "Nytt projekt läser in mall"), + ("Template Project", "Mallprojekt"), + ("Auto-Save", "Spara automatiskt"), + ("Automatically Save Projects", "Spara projekt automatiskt"), + ("Save Every", "Spara var"), + ("Minutes", "Minuter"), + ("Maximum Project Versions", "Maximalt antal projektversioner"), + ("Auto-Save Location", "Plats för automatisk sparning"), + ("Next to Project", "Bredvid projektet"), + ("Custom Location", "Anpassad plats"), + ("Save When Starting Render Queue", "Spara när renderingskön startas"), + ("Save Now", "Spara nu"), + ("Motion Path", "Rörelsebana"), + ("All Keyframes", "Alla nyckelbildrutor"), + ("No Motion Path", "Ingen rörelsebana"), + ("No More Than (Seconds)", "Högst (sekunder)"), + ("No More Than (Keyframes)", "Högst (nyckelbildrutor)"), + ("Seconds", "Sekunder"), + ("Keyframes", "Nyckelbildrutor"), + ("Display", "Visning"), + ("Show Rendering Progress in Info Panel and Flowchart", "Visa renderingsförlopp i panelen Info och flödesschemat"), + ("Hardware Accelerate Composition, Layer and Footage Panels", "Maskinvaruaccelerera panelerna Komposition, Lager och Material"), + ("Panels are always drawn by the GPU (wgpu).", "Paneler ritas alltid av GPU:n (wgpu)."), + ("Previews", "Förhandsgranskningar"), + ("Adaptive Resolution Limit", "Gräns för adaptiv upplösning"), + ("Show Internal Wireframes", "Visa interna trådmodeller"), + ("Cache Frames When Idle", "Cachelagra bildrutor vid inaktivitet"), + ("Viewer Zoom Quality", "Zoomkvalitet i visningsfönstret"), + ("Faster", "Snabbare"), + ("More Accurate", "Mer exakt"), + ("Display Color Space", "Visningsfärgrymd"), + ("GPU Information...", "GPU-information..."), + ("Appearance", "Utseende"), + ("Brightness", "Ljusstyrka"), + ("UI Scale", "Gränssnittsskala"), + ("Labels and Colors", "Etiketter och färger"), + ("Use Label Color for Layer Handles and Paths", "Använd etikettfärg för lagerhandtag och banor"), + ("Use Label Color for Related Tabs", "Använd etikettfärg för relaterade flikar"), + ("Cycle Mask Colors", "Växla maskfärger"), + ("Use Gradients", "Använd gradienter"), + ("Menu Bar", "Menyrad"), + ("Grids & Guides", "Rutnät och stödlinjer"), + ("Gridline Every", "Stödlinje var"), + ("Subdivisions", "Underindelningar"), + ("Style", "Stil"), + ("Lines", "Rader"), + ("Dashed Lines", "Streckade linjer"), + ("Dots", "Punkter"), + ("Horizontal", "Horisontell"), + ("Vertical", "Vertikal"), + ("Safe Margins", "Säkra marginaler"), + ("Action-safe", "Bildsäkert område"), + ("Title-safe", "Titelsäker"), + ("Labels", "Etiketter"), + ("Text Engine", "Textmotor"), + ("Latin", "Latin"), + ("South Asian and Middle Eastern", "Sydasiatiska och mellanösterländska"), + ("Show Font Preview", "Visa förhandsgranskning av typsnitt"), + ("Number of Recent Fonts to Display", "Antal senaste typsnitt som visas"), + ("Show Font Names in English", "Visa typsnittsnamn på engelska"), + ("Still Footage", "Stillbildsmaterial"), + ("Length of Composition", "Kompositionens längd"), + ("Duration (Seconds)", "Längd (sekunder)"), + ("Still Duration", "Stillbildslängd"), + ("Sequence Footage", "Sekvensmaterial"), + ("Report Missing Frames", "Rapportera saknade bildrutor"), + ("Automatically Reload Footage", "Läs in material igen automatiskt"), + ("Off", "Av"), + ("Non-Sequence Footage", "Material som inte är sekvenser"), + ("All Footage", "Allt material"), + ("Ask User", "Fråga användaren"), + ("Guess", "Gissa"), + ("Ignore", "Ignorera"), + ("Straight", "Rak"), + ("Premultiplied", "Förmultiplicerad"), + ("Default Drag Import As", "Standardimport vid dragning"), + ("Footage", "Material"), + ("Composition - Retain Layer Sizes", "Komposition – behåll lagerstorlekar"), + ("Export", "Exportera"), + ("Default Output Folder", "Standardmapp för utgång"), + ("Segment Sequences", "Segmentera sekvenser"), + ("Files per Segment", "Filer per segment"), + ("files", "filer"), + ("Segment Movie Files", "Segmentera filmfiler"), + ("Segment Size", "Segmentstorlek"), + ("Append Bit Depth to File Name", "Lägg till bitdjup i filnamnet"), + ("Audio", "Ljud"), + ("Audio Hardware", "Ljudhårdvara"), + ("Preview Sample Rate", "Samplingsfrekvens för förhandsgranskning"), + ("Audio Output Mapping", "Mappning av ljudutgång"), + ("Left", "Vänster"), + ("Right", "Höger"), + ("channel", "kanal"), + ("Disk", "Disk"), + ("Disk Cache", "Diskcache"), + ("Enable Disk Cache", "Aktivera diskcache"), + ("Maximum Disk Cache Size", "Maximal storlek på diskcache"), + ("Disk Cache Folder", "Mapp för diskcache"), + ("Media Cache", "Mediecache"), + ("Database and Cache Folder", "Databas- och cachemapp"), + ("Conformed Audio Folder", "Mapp för konformerat ljud"), + ("Memory & CPU", "Minne och processor"), + ("RAM Reserved for Other Applications", "RAM reserverat för andra program"), + ("Cache Budgets", "Cachebudgetar"), + ("Layer Cache", "Lagercache"), + ("Footage Frame Cache", "Bildrutecache för material"), + ("Preview (RAM) Cache", "Förhandsgranskningscache (RAM)"), + ("Reduce Cache Size When System Is Low on Memory", "Minska cachestorleken när systemet har ont om minne"), + ("Video", "Video"), + ("Enable Video Preview Output", "Aktivera videoutgång för förhandsgranskning"), + ("Video Device", "Videoenhet"), + ("Floating Window", "Flytande fönster"), + ("Full Screen", "Helskärm"), + ("Video Output During Playback", "Videoutgång under uppspelning"), + ("Mirror on Computer Monitor", "Spegla på datorskärmen"), + ("Disable Video Output When in Background", "Inaktivera videoutgång i bakgrunden"), + ("Default 3D Renderer", "Standard-3D-renderare"), + ("Show 3D Reference Axes", "Visa 3D-referensaxlar"), + ("Extended Viewer", "Utökad visare"), + ("Realtime Shadows in Draft", "Skuggor i realtid i utkastläge"), + ("Scripting & Expressions", "Skript och uttryck"), + ("Application Scripting", "Programskriptning"), + ("Allow Scripts to Write Files and Access Network", "Tillåt skript att skriva filer och komma åt nätverket"), + ("Warn User When Executing Files", "Varna användaren när filer körs"), + ("Enable JavaScript Debugger", "Aktivera JavaScript-felsökare"), + ("Expressions Editor", "Uttrycksredigerare"), + ("Font Size", "Teckenstorlek"), + ("Syntax Highlighting", "Syntaxmarkering"), + ("Line Numbers", "Radnummer"), + ("Auto-complete", "Autokomplettering"), + ("Bracket Matching", "Parentesmatchning"), + ("Word Wrap", "Radbrytning"), + ("Show Expression Error Banner", "Visa fältet för uttrycksfel"), + ( + "Expressions use the JavaScript engine. Script errors report their file and line in the Script Console; there is no step debugger.", + "Uttryck använder JavaScript-motorn. Skriptfel rapporterar fil och rad i skriptkonsolen; det finns ingen stegvis felsökare.", + ), + ("Roto Brush", "Rotopensel"), + ("Segmentation Model", "Segmenteringsmodell"), + ( + "Roto Brush 2.0 and 3.0 use the model chosen here (Version 1.0 always uses the classic engine). Models are open source, downloaded only when you ask, and checked against their published SHA-256.", + "Rotopensel 2.0 och 3.0 använder modellen som väljs här (version 1.0 använder alltid den klassiska motorn). Modellerna är öppen källkod, laddas bara ned när du ber om det och kontrolleras mot sin publicerade SHA-256.", + ), + ("Face Tracking", "Ansiktsspårning"), + ("Face Model", "Ansiktsmodell"), + ( + "Face tracking in the Tracker panel (Outline Only and Detailed Features) uses the model chosen here. Models are open source, downloaded only when you ask, and checked against their published SHA-256.", + "Ansiktsspårning i panelen Spårning (Endast kontur och Detaljerade drag) använder modellen som väljs här. Modellerna är öppen källkod, hämtas bara när du ber om det och kontrolleras mot sin publicerade SHA-256.", + ), + ("Match System", "Enligt systemet"), + ("Default", "Standard"), + ("Stored, but not used by EffectCraft yet", "Lagras, men används inte av EffectCraft än"), + ("Total Offset", "Total förskjutning"), + ("Per Layer", "Per lager"), + ("Track", "Spåra"), + ("A built-in preset has this name", "En inbyggd förinställning har det här namnet"), + ("Cannot import dropped files: {}", "Kan inte importera släppta filer: {}"), + ("Cannot open dropped project {}: {}", "Kan inte öppna det släppta projektet {}: {}"), + ("Click in the Composition panel to sample text {}", "Klicka i panelen Komposition för att hämta text {}"), + ("Click to sample text {}", "Klicka för att hämta text {}"), + ("Comment of {}: {}", "Kommentar till {}: {}"), + ("Delete Preset", "Radera förinställning"), + ("Drop file to import", "Släpp filen för att importera"), + ("Drop {} files to import", "Släpp {} filer för att importera"), + ("Effects", "Effekter"), + ("Label of {}: {}", "Etikett för {}: {}"), + ("Mercury GPU Acceleration (no GPU: software)", "Mercury GPU-acceleration (ingen GPU: programvara)"), + ("Only one project can be opened per drop; skipped {} more", "Bara ett projekt kan öppnas per släpp; hoppade över {} till"), + ("Open in Essential Graphics", "Öppna i Grundläggande grafik"), + ("Original color: click to go back to it", "Originalfärg: klicka för att återgå till den"), + ("Project color depth: {}", "Projektets färgdjup: {}"), + ("Replaces your preset with this name", "Ersätter din förinställning med det här namnet"), + ("Resize floating panel", "Ändra storlek på flytande panel"), + ("Save Preset…", "Spara förinställning…"), + ( + "Skipped {} dropped file(s) without a local path. Use File ▸ Import ▸ File…", + "Hoppade över {} släppta fil(er) utan lokal sökväg. Använd Arkiv ▸ Importera ▸ Fil…", + ), + ("Sort by {}", "Sortera efter {}"), + ("Sort by {}, {}", "Sortera efter {}, {}"), + ("Video preview is off (Preview panel): audio only", "Videoförhandsgranskningen är av (panelen Förhandsgranskning): endast ljud"), + ("Video preview off: audio only", "Videoförhandsgranskning av: endast ljud"), + ("Copy", "Kopiera"), + ("Paste", "Klistra in"), + ("Edit Value…", "Redigera värde…"), + ("Remove Expression", "Ta bort uttryck"), + ("Copy Source Path", "Kopiera källsökväg"), + ("Resolution:", "Upplösning:"), + ("Guide Layer", "Hjälplager"), + ("Layer Styles", "Lagerstilar"), + ("Check for Updates", "Sök efter uppdateringar"), + ("Checking for updates…", "Söker efter uppdateringar…"), + ("Close font search", "Stäng typsnittssökningen"), + ("Search project", "Sök i projektet"), + ("Update check is not supported in the web browser.", "Sökning efter uppdateringar stöds inte i webbläsaren."), + ("Click to sample color", "Klicka för att ta färgprov"), + ("Advanced", "Avancerat"), + ("Rescan Fonts", "Skanna om typsnitt"), + ("Track Matte pick whip: drag onto a layer", "Track matte-väljare: dra till ett lager"), + ("Play/Stop", "Spela/stoppa"), + ("Selection Tool", "Markeringsverktyg"), + ("Hand Tool", "Handverktyg"), + ("Zoom Tool", "Zoomverktyg"), + ("Orbit Around Cursor Tool", "Verktyg för att kretsa kring pekaren"), + ("Pan Under Cursor Tool", "Verktyg för att panorera under pekaren"), + ("Dolly Towards Cursor Tool", "Verktyget Dolly mot pekaren"), + ("Rotation Tool", "Rotationsverktyg"), + ("Pan Behind (Anchor Point) Tool", "Verktyg för att panorera bakom (ankarpunkt)"), + ("Rectangle Tool", "Rektangelverktyg"), + ("Rounded Rectangle Tool", "Verktyg för rundad rektangel"), + ("Ellipse Tool", "Ellipsverktyg"), + ("Polygon Tool", "Polygonverktyg"), + ("Star Tool", "Stjärnverktyg"), + ("Pen Tool", "Pennverktyg"), + ("Add Vertex Tool", "Verktyget Lägg till hörnpunkt"), + ("Delete Vertex Tool", "Verktyget Radera hörnpunkt"), + ("Convert Vertex Tool", "Verktyget Konvertera hörnpunkt"), + ("Mask Feather Tool", "Maskfjädringsverktyg"), + ("Horizontal Type Tool", "Horisontellt textverktyg"), + ("Vertical Type Tool", "Vertikalt textverktyg"), + ("Brush Tool", "Penselverktyg"), + ("Clone Stamp Tool", "Klonstämpelverktyg"), + ("Eraser Tool", "Suddgummiverktyg"), + ("Roto Brush Tool", "Rotopenselverktyg"), + ("Refine Edge Tool", "Verktyg för kantförfining"), + ("Object Matte Tool", "Objektmatteverktyg"), + ("Puppet Position Pin Tool", "Verktyg för positionsnål (docka)"), + ("Puppet Starch Pin Tool", "Verktyg för styvhetsnål (docka)"), + ("Puppet Bend Pin Tool", "Docknålsverktyg för böjning"), + ("Puppet Advanced Pin Tool", "Avancerat docknålsverktyg"), + ("Puppet Overlap Pin Tool", "Docknålsverktyg för överlappning"), + ("Shortcut", "Kortkommando"), + ("Range", "Omfång"), + ("Play From", "Spela upp från"), + ("Frame Rate", "Bildfrekvens"), + ("Resolution", "Upplösning"), + ("Overlays", "Överlägg"), + ("Layer Controls", "Lagerkontroller"), + ("Loop", "Loopa"), + ("Cache Before Playback", "Cachelagra före uppspelning"), + ("Pre-roll", "Förrullning"), + ("Post-roll", "Efterrullning"), + ("If caching, play cached frames", "Spela upp cachade bildrutor vid cachning"), + ("Apply", "Använd"), + ("Analyze", "Analysera"), + ("Create Camera", "Skapa kamera"), + ("Add Point", "Lägg till punkt"), + ("Remove Point", "Ta bort punkt"), + ("Render", "Rendera"), + ("Save Current as Template…", "Spara aktuellt som mall…"), + ("New Composition From Footage", "Ny komposition från material"), + ("Search effects and presets", "Sök effekter och förinställningar"), + ("Search", "Sök"), + ("(no composition)", "(ingen komposition)"), + ("per second", "per sekund"), + ("Waveform", "Vågform"), + ("steps", "steg"), + ("Building waveform…", "Skapar vågform…"), + ("No effects. Drag one from Effects & Presets.", "Inga effekter. Dra hit en från Effekter och förinställningar."), + ( + "Click the ring to add a colour; Alt-click a stop (or drag it off) to remove it", + "Klicka på ringen för att lägga till en färg; Alt-klicka på ett färgstopp (eller dra bort det) för att ta bort det", + ), + ( + "Start from a ready-made project. Opening a template makes an untitled copy.", + "Börja från ett färdigt projekt. När du öppnar en mall skapas en namnlös kopia.", + ), + ("Square Pixels", "Kvadratiska pixlar"), + ("Basic", "Grundläggande"), + ("3D Renderer", "3D-renderare"), + ("Black", "Svart"), + ("White", "Vit"), + ("Composition Settings", "Kompositionsinställningar"), + ("Force alphabetical order", "Tvinga bokstavsordning"), + ("Frame rate (fps)", "Bildfrekvens (bild/s)"), + ("Import Kind", "Importtyp"), + ("Delay (s)", "Delay (s)"), + ("Amount (%)", "Mängd (%)"), + ("Cascade (farther pins trail longer)", "Överlappande (nålar längre bort släpar efter mer)"), + ("Speed (%)", "Hastighet (%)"), + ("Use Draft Deformation", "Använd utkastdeformation"), + ("Show Mesh", "Visa nät"), + ("Scale X (%)", "Skala X (%)"), + ("Scale Y (%)", "Skala Y (%)"), + ("Rotation (degrees)", "Rotation (grader)"), + ("Move X", "Flytta X"), + ("Move Y", "Flytta Y"), + ("Position (pixels)", "Position (pixlar)"), + ("Position (percent of the composition)", "Position (procent av kompositionen)"), + ("Use Dimensions From", "Använd dimensioner från"), + ("Still Duration (seconds)", "Stillbildslängd (sekunder)"), + ("Add to Render Queue", "Lägg till i renderingskön"), + ("Sequence Layers", "Lägg lager i sekvens"), + ("Duration (seconds)", "Längd (sekunder)"), + ("Matte color (premultiplied)", "Mattefärg (förmultiplicerad)"), + ("Invert Alpha", "Invertera alfa"), + ("Assume this frame rate", "Anta denna bildfrekvens"), + ("Separate Fields", "Separera fält"), + ("Pixel Aspect Ratio", "Pixelbildförhållande"), + ("Loop (times)", "Loopa (antal gånger)"), + ("Assign Profile", "Tilldela profil"), + ("Preserve RGB", "Bevara RGB"), + ("Interpret As Linear Light", "Tolka som linjärt ljus"), + ("Start Timecode", "Starttidskod"), + ("Override Start", "Åsidosätt start"), + ("Time display style", "Tidsvisningsformat"), + ("Color engine", "Färgmotor"), + ("Working space", "Arbetsfärgrymd"), + ("Working gamma", "Arbetsgamma"), + ("Linearize working space", "Linjärisera arbetsfärgrymden"), + ("Blend colors using 1.0 gamma", "Blanda färger med gamma 1,0"), + ("Output color space", "Färgrymd för utdata"), + ("Video rendering and effects", "Videorendering och effekter"), + ("Time Span", "Tidsintervall"), + ("Blur (pixels before auto-trace)", "Oskärpa (pixlar före automatisk vektorisering)"), + ("Tolerance (pixels)", "Tolerans (pixlar)"), + ("Threshold (%)", "Tröskel (%)"), + ("Minimum Area (pixels)", "Minsta area (pixlar)"), + ("Corner Roundness (%)", "Hörnrundhet (%)"), + ("Apply To New Layer", "Använd på nytt lager"), + ("Sensitivity threshold (0–1, lower finds more)", "Känslighetströskel (0–1, lägre hittar fler)"), + ("Time field (empty: automatic)", "Tidsfält (tomt: automatiskt)"), + ("Video start (ISO date-time, hh:mm:ss, timecode; empty: file date)", "Videostart (ISO-datum och tid, hh:mm:ss, tidskod; tom: filens datum)"), + ("First sample at (comp seconds)", "Första sampel vid (sekunder i kompositionen)"), + ("Frame rate", "Bildfrekvens"), + ("Color (#rrggbb)", "Färg (#rrggbb)"), + ("Embed footage files", "Bädda in materialfiler"), + ("Embed up to (MB)", "Bädda in upp till (MB)"), + ("Orient Along Path", "Orientera längs banan"), + ("Orient Towards Camera", "Orientera mot kameran"), + ("Orient Towards Point of Interest", "Orientera mot intressepunkten"), + ("Single Composition", "Enskild komposition"), + ("Multiple Compositions", "Flera kompositioner"), + ("Dissolve Front Layer", "Övertona främre lager"), + ("Cross Dissolve Front and Back Layers", "Korsövertona främre och bakre lager"), + ("Interpret Straight - Unmatted", "Tolka som rak – utan matte"), + ("Interpret Premultiplied - Matted With Color", "Tolka som förmultiplicerad – mattad med färg"), + ("Upper Field First", "Övre fältet först"), + ("Lower Field First", "Undre fält först"), + ("Rec. 2020", "Rec. 2020"), + ("Use Source File Timecode", "Använd källfilens tidskod"), + ("Feet + Frames (35mm)", "Fot + bildrutor (35 mm)"), + ("Feet + Frames (16mm)", "Fot + bildrutor (16 mm)"), + ("Current Frame", "Aktuell bildruta"), + ("Work Area", "Arbetsområde"), + ("Create Markers", "Skapa markörer"), + ("Split Layers", "Dela lager"), + ("Split and Precompose", "Dela och förkomponera"), + ("All layers", "Alla lager"), + ("None (leave them out)", "Ingen (utelämna dem)"), + ("Nested sequences", "Kapslade sekvenser"), + ("Solid…", "Enfärgat lager…"), + ("Light…", "Ljus…"), + ("Camera…", "Kamera…"), + ("Null Object", "Nullobjekt"), + ("Shape Layer", "Formlager"), + ("Adjustment Layer", "Justeringslager"), + ("Layer Settings…", "Lagerinställningar…"), + ("Create Shapes from Vector Layer", "Skapa former från vektorlager"), + ("Create Shapes from Text", "Skapa former från text"), + ("Create Masks from Text", "Skapa masker från text"), + ("New Mask", "Ny mask"), + ("Center In View", "Centrera i vyn"), + ("Fit to Comp", "Anpassa till kompositionen"), + ("Flip Horizontal", "Vänd vågrätt"), + ("Flip Vertical", "Vänd lodrätt"), + ("Enable Time Remapping", "Aktivera tidsomvandling"), + ("Time-Reverse Layer", "Tidsomvänd lager"), + ("Freeze Frame", "Frys bildruta"), + ("Freeze On Last Frame", "Frys på sista bildrutan"), + ("Add Marker", "Lägg till markör"), + ("Bring Layer to Front", "Lägg lager överst"), + ("Bring Layer Forward", "Flytta fram lager"), + ("Send Layer Backward", "Flytta bak lager"), + ("Send Layer to Back", "Lägg lager underst"), + ("Pre-compose…", "Förkomponera…"), + ("Split Layer", "Dela lager"), + ("Layer Style Options...", "Lagerstilsalternativ..."), + ("Convert to Editable Styles", "Konvertera till redigerbara stilar"), + ("Show All", "Visa alla"), + ("Remove All", "Ta bort alla"), + ("Separate Dimensions", "Separera dimensioner"), + ("Add Property to Essential Graphics", "Lägg till egenskap i Grundläggande grafik"), + ("Continuous Bezier", "Kontinuerlig bezier"), + ("Auto Bezier", "Automatisk bezier"), + ("Lock To Time", "Lås till tid"), + ("Rove Across Time", "Flytande över tid"), + ("Anchor Point", "Ankarpunkt"), + ("All Transform Properties", "Alla transformeringsegenskaper"), + ("Line Anchor", "Radankare"), + ("Line Spacing", "Radavstånd"), + ("Character Offset", "Teckenförskjutning"), + ("Character Value", "Teckenvärde"), + ("Fill Color: RGB", "Fyllningsfärg: RGB"), + ("Fill Color: Hue", "Fyllningsfärg: nyans"), + ("Fill Color: Saturation", "Fyllningsfärg: mättnad"), + ("Fill Color: Brightness", "Fyllningsfärg: ljusstyrka"), + ("Fill Color: Opacity", "Fyllningsfärg: opacitet"), + ("Stroke Color: RGB", "Konturfärg: RGB"), + ("Stroke Color: Hue", "Konturfärg: nyans"), + ("Stroke Color: Saturation", "Konturfärg: mättnad"), + ("Stroke Color: Brightness", "Konturfärg: ljusstyrka"), + ("Stroke Color: Opacity", "Konturfärg: opacitet"), + ("Stroke Width", "Konturbredd"), + ("Front: Color", "Framsida: färg"), + ("Bevel: Color", "Fasning: Färg"), + ("Side: Color", "Sida: färg"), + ("Back: Color", "Baksida: Färg"), + ("Effect Controls", "Effektkontroller"), + ("Effects & Presets", "Effekter och förinställningar"), + ("Motion Sketch", "Rörelseskiss"), + ("Render Queue", "Renderingskö"), + ("Mask Interpolation", "Maskinterpolering"), + ("Script Console", "Skriptkonsol"), + ("Essential Graphics", "Grundläggande grafik"), + ("ScriptUI Panel", "ScriptUI-panel"), + ("Lumetri Scopes", "Lumetri-scope"), + ("Media Browser", "Mediebläddrare"), + ("Content-Aware Fill", "Innehållsmedveten fyllning"), + ("Create Nulls From Paths", "Skapa nullobjekt från banor"), + ("VR Comp Editor", "VR-kompositionsredigerare"), + ("Media Duration", "Medielängd"), + ("File Path", "Sökväg"), + ("Interpret Footage", "Tolka material"), + ("Create a new Folder", "Skapa en ny mapp"), + ("Create a new Composition", "Skapa en ny komposition"), + ("First Frame", "Första bildrutan"), + ("Previous Frame", "Föregående bildruta"), + ("Next Frame", "Nästa bildruta"), + ("Last Frame", "Sista bildrutan"), + ("Name (A–Z)", "Namn (A–Ö)"), + ("Merged PRs", "Sammanslagna PR:er"), + ("Lines added", "Tillagda rader"), + ("Lines deleted", "Borttagna rader"), + ("Line delta", "Raddifferens"), + ("Binary assets added", "Binära resurser tillagda"), + ("Binary assets removed", "Binära resurser borttagna"), + ("First commit", "Första commit"), + ("Last commit", "Senaste commit"), + ("Display name", "Visningsnamn"), + ("Real name", "Riktigt namn"), + ("ArtCraft website", "ArtCrafts webbplats"), + ("Source code on GitHub", "Källkod på GitHub"), + ("Preset Name", "Namn på förinställning"), + ("Lock Aspect Ratio", "Lås proportioner"), + ("Frame Rate presets", "Förinställningar för bildfrekvens"), + ("Background Color", "Bakgrundsfärg"), + ("Shutter Angle", "Slutarvinkel"), + ("Shutter Phase", "Slutarfas"), + ("Samples Per Frame", "Samplingar per bildruta"), + ("Adaptive Sample Limit", "Adaptiv samplingsgräns"), + ("X and Y", "X och Y"), + ("X only", "Endast X"), + ("Y only", "Endast Y"), + ("Track Camera", "Spåra kamera"), + ("Warp Stabilizer", "Warp Stabilizer"), + ("Track Motion", "Spåra rörelse"), + ("Stabilize Motion", "Stabilisera rörelse"), + ("Motion Source:", "Rörelsekälla:"), + ("Current Track:", "Aktuell spårning:"), + ("Track Type:", "Spårtyp:"), + ("Motion Target:", "Rörelsemål:"), + ("Track Mask:", "Spåra mask:"), + ("Analyze forward", "Analysera framåt"), + ("Analyze backward", "Analysera bakåt"), + ("Continue Tracking", "Fortsätt spårning"), + ("Stop Tracking", "Stoppa spårning"), + ("Adapt Feature", "Anpassa detalj"), + ("Extrapolate Motion", "Extrapolera rörelse"), + ("Attach Point", "Fästpunkt"), + ("Track Name", "Spårnamn"), + ("Motion Tracker Options", "Alternativ för rörelsespårare"), + ("Motion Tracker Apply Options", "Tillämpningsalternativ för rörelsespårare"), + ("Edit Value Graph", "Redigera värdediagram"), + ("Edit Speed Graph", "Redigera hastighetsdiagram"), + ("Show Reference Graph", "Visa referensdiagram"), + ( + "Auto-Select Graph Type (speed graph for spatial properties, else value graph)", + "Välj diagramtyp automatiskt (hastighetsdiagram för rumsliga egenskaper, annars värdediagram)", + ), + ("Auto-zoom graph height", "Zooma diagramhöjden automatiskt"), + ("Fit all graphs to view", "Anpassa alla kurvor till vyn"), + ("Fit selection to view", "Anpassa markeringen till vyn"), + ("Snap (key drags snap to the current time and other keys)", "Fäst (nyckelbildrutor som dras fästs mot aktuell tid och andra nyckelbildrutor)"), + ("Show Transform Box when multiple keys are selected", "Visa transformeringsruta när flera nyckelbildrutor är markerade"), + ("Separate Dimensions (Position)", "Separera dimensioner (position)"), + ("Convert selected keyframes to Hold", "Konvertera markerade nyckelbildrutor till Håll"), + ("Convert selected keyframes to Linear", "Konvertera markerade nyckelbildrutor till Linjär"), + ("Convert selected keyframes to Auto Bezier", "Konvertera markerade nyckelbildrutor till Automatisk bezier"), + ("Easy Ease (F9)", "Mjukt in och ut (F9)"), + ("Easy Ease In (Shift+F9)", "Mjukt in (Shift+F9)"), + ("Easy Ease Out (Ctrl+Shift+F9)", "Mjukt ut (Ctrl+Shift+F9)"), + ("Spatial Path", "Rumslig bana"), + ("Temporal Path", "Temporal bana"), + ("All the Same", "Alla likadana"), + ("All Independently", "Alla oberoende av varandra"), + ("Noise Type:", "Brustyp:"), + ("Apply To:", "Använd på:"), + ("Temporal Graph", "Temporalt diagram"), + ("Keyframe Rate:", "Nyckelbildrutefrekvens:"), + ("Capture speed at:", "Spela in hastighet vid:"), + ("Start Capture", "Starta inspelning"), + ("Cancel Capture", "Avbryt inspelning"), + ("Small Caps", "Kapitäler"), + ("All Small Caps", "Alla som kapitäler"), + ("Superscript / Superior", "Upphöjd / superior"), + ("Subscript / Inferior", "Nedsänkt / inferior"), + ("Standard Ligatures", "Standardligaturer"), + ("Discretionary Ligatures", "Valfria ligaturer"), + ("Contextual Alternates", "Kontextuella alternativ"), + ("Stylistic Alternates", "Stilistiska alternativ"), + ("Titling Alternates", "Rubrikalternativ"), + ("Default Figure Style", "Standardfigurstil"), + ("Tabular Lining", "Tabellsiffror, versala"), + ("Proportional Oldstyle", "Proportionella medievalsiffror"), + ("Proportional Lining", "Proportionella versalsiffror"), + ("Tabular Oldstyle", "Medievalsiffror i tabellbredd"), + ("Fill Over Stroke", "Fyllning över kontur"), + ("Stroke Over Fill", "Kontur över fyllning"), + ("Stroke order", "Konturordning"), + ("Single-line Composer", "Enradssättare"), + ("Every-line Composer", "Flerradssättning"), + ("Text direction", "Textriktning"), + ("Recently Used", "Senast använda"), + ("User Presets", "Användarförinställningar"), + ("Remove from Favorites", "Ta bort från favoriter"), + ("Show Animation Presets", "Visa animeringsförinställningar"), + (" Refresh List", " Uppdatera listan"), + (" Clear Recently Used", " Rensa senast använda"), + ("Show 32 bpc Effects Only", "Visa endast 32 bpc-effekter"), + ("Show GPU Accelerated Effects Only", "Visa endast GPU-accelererade effekter"), + ("Show Effects for All Color Depths", "Visa effekter för alla färgdjup"), + ("* Animation Presets", "* Animeringsförinställningar"), + ("Select a layer to apply to", "Markera ett lager att tillämpa på"), + ("Alpha Expansion:", "Alfaexpansion:"), + ("Fill Method:", "Fyllningsmetod:"), + ("Edge Blend", "Kantblandning"), + ("Entire Duration", "Hela längden"), + ("Reference Frame:", "Referensbildruta:"), + ("Use Current Time", "Använd aktuell tid"), + ("Generate Fill Layer", "Generera fyllningslager"), + ("Lighting Correction:", "Belysningskorrigering:"), + ("Create Text and Camera", "Skapa text och kamera"), + ("Create Solid and Camera", "Skapa enfärgat lager och kamera"), + ("Create Null and Camera", "Skapa nullobjekt och kamera"), + ("Create Shadow Catcher, Camera and Light", "Skapa skuggfångare, kamera och ljus"), + ("Unable to solve camera", "Det gick inte att beräkna kameran"), + ("Waiting to solve", "Väntar på beräkning"), + ("track point", "spårpunkt"), + ("Ruler zero point", "Linjalens nollpunkt"), + ("Vertical ruler", "Vertikal linjal"), + ("Horizontal ruler", "Vågrät linjal"), + ("Viewer controls", "Visningskontroller"), + ("Resolution/Down Sample Factor", "Upplösning/nedsamplingsfaktor"), + ("Adjust Exposure", "Justera exponering"), + ("Snapshot taken", "Ögonblicksbild tagen"), + ("Fast Previews", "Snabba förhandsgranskningar"), + ("3D View", "3D-vy"), + ("Current time", "Aktuell tid"), + ("Layer Transform", "Lagertransformering"), + ("Reset Transform", "Återställ transformering"), + ("Text Animation", "Textanimering"), + ("Text Animation Presets", "Förinställningar för textanimering"), + ("EffectCraft on getartcraft.com", "EffectCraft på getartcraft.com"), + ("Small Screen", "Liten skärm"), + ("Tool Creates Shape", "Verktyget skapar form"), + ("Tool Creates Mask", "Verktyget skapar mask"), + ("Blend Mode", "Blandningsläge"), + ("Show mesh", "Visa nät"), + ("Record Options...", "Inspelningsalternativ..."), + ("Export Scene to Blender...", "Exportera scen till Blender..."), + ( + "Hands-on tutorials that run inside EffectCraft. Do each step yourself, or press Show me.", + "Praktiska självstudier som körs i EffectCraft. Gör varje steg själv eller tryck på Visa mig.", + ), + ( + "JavaScript with the After Effects scripting object model — try app.project.numItems", + "JavaScript med objektmodellen för skript i After Effects – prova app.project.numItems", + ), + ("Label {} color", "Färg för etikett {}"), + ("Label {} name", "Namn på etikett {}"), + ("Output file name template", "Mall för utdatafilens namn"), + ("Output file: {}", "Utdatafil: {}"), + ("Preview", "Förhandsgranska"), + ("Stroke width presets", "Förinställda konturbredder"), +]; + const TRADITIONAL_CHINESE: &[(&str, &str)] = &[ ("Click to sample color", "按一下以取樣顏色"), ("Appearance Settings…", "外觀設定…"), @@ -7621,6 +8791,7 @@ mod tests { ("menus/shortcuts.rs", include_str!("../menus/shortcuts.rs")), ("state.rs", include_str!("../state.rs")), ("prefs_live.rs", include_str!("../prefs_live.rs")), + ("updates_ui.rs", include_str!("../updates_ui.rs")), ("widgets.rs", include_str!("../widgets.rs")), ("panels/anim_tools.rs", include_str!("../panels/anim_tools.rs")), ("panels/camera_tracker_ui.rs", include_str!("../panels/camera_tracker_ui.rs")), @@ -7794,6 +8965,19 @@ mod tests { set_current("en"); } + /// Swedish panels translate, fill values in order and keep project content. + #[test] + fn swedish_panels_translate_and_keep_project_content() { + set_current("sv"); + assert_eq!(tr("Composition Name:"), "Kompositionsnamn:"); + assert_eq!(tr("Cancel"), "Avbryt"); + assert_eq!(tr("my layer.mp4"), "my layer.mp4"); + assert_eq!(tr_args("Proxy Use: {}", &[&"Best"]), "Proxyanvändning: Best"); + assert_eq!(tr_args("Step {} of {}: {}", &[&1, &3, &"Colour"]), "Steg 1 av 3: Colour"); + set_current("en"); + assert_eq!(tr("Cancel"), "Cancel"); + } + /// Values fill the placeholders in order, and a missing value is dropped instead of panicking. #[test] fn tr_args_fills_values_in_order() { diff --git a/crates/ui-egui/src/native_menu.rs b/crates/ui-egui/src/native_menu.rs index 7876ec180..1d892b38a 100644 --- a/crates/ui-egui/src/native_menu.rs +++ b/crates/ui-egui/src/native_menu.rs @@ -248,6 +248,8 @@ pub fn build(app: &EffectcraftApp) -> NativeMenu { "Usługi" } else if crate::i18n::georgian(app) { "სერვისები" + } else if crate::i18n::swedish(app) { + "Tjänster" } else { "Services" } @@ -565,6 +567,27 @@ mod tests { assert_eq!(translated, ["Служби", "Приховати EffectCraft", "Приховати решту", "Показати все"]); } + #[test] + fn swedish_translates_macos_predefined_items() { + if !cfg!(target_os = "macos") { + return; + } + let mut app = EffectcraftApp::new(effectcraft_engine::Session::default()); + app.session.execute("prefs.set", json!({"key": "general.language", "value": "sv"})).unwrap(); + fn labels(nodes: &[NativeNode], out: &mut Vec) { + for node in nodes { + match node { + NativeNode::Predefined { label, .. } => out.push(label.clone()), + NativeNode::Submenu { children, .. } => labels(children, out), + _ => {} + } + } + } + let mut translated = vec![]; + labels(&build(&app).menus, &mut translated); + assert_eq!(translated, ["Tjänster", "Dölj EffectCraft", "Göm övriga", "Visa alla"]); + } + #[test] fn czech_translates_macos_predefined_items() { if !cfg!(target_os = "macos") { diff --git a/docs/gaps.md b/docs/gaps.md index ab691dfff..016aeff22 100644 --- a/docs/gaps.md +++ b/docs/gaps.md @@ -327,8 +327,8 @@ Issues #41–#47 (all from the Linux AppImage 0.1.1, 5 October): panning the vie - Localisation of the interface ([localization-parity.md](localization-parity.md)): since 6–12 October the menus are translated into Japanese, Simplified and Traditional Chinese, Ukrainian, - Spanish, Brazilian Portuguese, Russian, French, German, Czech and Georgian, and the panel catalog covers - Japanese, both Chinese, Ukrainian, Brazilian Portuguese, Czech and Georgian. Next: effect and parameter + Spanish, Brazilian Portuguese, Russian, French, German, Czech, Georgian and Swedish, and the panel catalog covers + Japanese, both Chinese, Ukrainian, Brazilian Portuguese, Czech, Georgian and Swedish. Next: effect and parameter names, the remaining panel strings (Spanish, Russian, French, German), Korean and Italian, and native-speaker review of all of them. - Accessibility (keyboard navigation, screen readers, contrast), user documentation and diff --git a/docs/localization-parity.md b/docs/localization-parity.md index 59b3f792c..244fcc704 100644 --- a/docs/localization-parity.md +++ b/docs/localization-parity.md @@ -27,10 +27,10 @@ interface; Arabic and Hebrew text *in layers* is supported through its Middle Ea Chinese (998), Traditional Chinese (951, after #2244 pruned the table), Ukrainian (524), Brazilian Portuguese (695), Czech (518) and Spanish (513); counted at this tree. Georgian has the Simplified Chinese catalog's 694 rows, plus 191 for panels converted to the catalog since - (885 in all). + (885 in all). Swedish (added later) also has one. - **Effect names:** `crates/ui-egui/src/i18n/effects.rs`, keyed by **effect id**, in Simplified - Chinese (307 rows, one per effect in the registry), Japanese (297 of the 307 ids) and Georgian - (307 rows, plus its 21 categories). The registry's + Chinese (307 rows, one per effect in the registry), Japanese (297 of the 307 ids), Georgian + (307 rows, plus its 21 categories) and Swedish (307 rows, plus its 21 categories). The registry's English name stays the effect's identity: `effect.list`, `effect.apply {"effect": …}`, scripts and expressions match on it, and the property tree stores it as the effect group's name. Only the drawing — the Effect menu, Effect Controls, the Timeline and Effects & Presets — goes @@ -88,7 +88,7 @@ counted, so the true percentages are slightly lower. | Korean | `ko` | 0 | — | Hangul fallback probe added (#599, closed); not checked on macOS here | no | none | 9–13 h + review | | Vietnamese | `vi` | 0 | — | Latin with stacked diacritics; untested | no | none (After Effects: none) | 8–12 h + review | -Other languages EffectCraft ships (5): +Other languages EffectCraft ships (6): | Language | Code | UI strings translated | Status | To `full` | |---|---|---|---|---| @@ -97,6 +97,7 @@ Other languages EffectCraft ships (5): | Polish | `pl` | 1,325 (≈ 34%): menus 630 rows, panels 695 | partial; unwrapped UI, effects and engine text still in English; AI-drafted, native review welcome | Remaining strings + native review | | Czech | `cs` | 1,147 (≈ 29%): menus 629 rows, panels 518 | Existing catalog entries covered; unwrapped UI, effects and engine text still in English; AI-assisted, not yet native-speaker proofread | Remaining strings + independent native review | | Georgian | `ka` | 1,514 (≈ 39%): menus 629 rows, panels 885 (the Simplified Chinese catalog's 694 plus 191 Georgian-only rows: form dialogs, context menus, column headers), effect names 307 + 21 categories; native-speaker reviewed | partial | 5–8 h | +| Swedish | `sv` | menus 630 rows, panels 723, effect names 307 and categories 21; added after the measurement above | Settings, Edit menu and Match System (`sv-*` locales) offer it; parameter and engine text still in English; not yet native-speaker reviewed | Remaining strings + native review | Russian (`ru`) has a menu catalog (630 rows, ≈ 15%); After Effects also ships Italian, which EffectCraft does not (8–12 h). diff --git a/docs/preferences.md b/docs/preferences.md index 2b80ffa0f..5ef215ab8 100644 --- a/docs/preferences.md +++ b/docs/preferences.md @@ -30,7 +30,7 @@ Commands (CLI, MCP, control channel): ### Settings that change behaviour -- `general.language`: interface language (`system` / `en` / `ja` / `zh-hans` / `zh-hant` / `uk` / `es` / `pt-br` / `ka`), Settings ▸ General ▸ Language; menu labels change immediately. `system` (Match System, the default) follows the operating system's interface language where EffectCraft has a translation and is English otherwise: a Simplified Chinese locale (`zh`, `zh-CN`, `zh_CN.UTF-8`, `zh-Hans-CN`, `zh-SG`) selects `zh-hans`, a Traditional one (`zh-TW`, `zh-HK`, `zh-Hant`, `zh_MO`) selects `zh-hant`, a Ukrainian one (`uk`, `uk-UA`, `uk_UA.UTF-8`) selects `uk`, a Spanish one (`es`, `es-ES`, `es_MX.UTF-8`) selects `es`, a Portuguese one (`pt`, `pt-BR`, `pt_PT.UTF-8`) selects `pt-br`, a Georgian one (`ka`, `ka-GE`, `ka_GE.UTF-8`) selects `ka`; the browser build follows `?lang=` in the address, then the browser's languages (`navigator.languages`). Choose **Español** or **Português (Brasil)** for Spanish or Brazilian Portuguese menus (panels stay in English for now); choose **Українська** for Ukrainian menus and cataloged panel, dialog, button and tooltip text; Ukrainian uses the bundled UI fonts. Native Japanese, Simplified and Traditional Chinese UI uses installed system fonts; the web host must supply a Japanese font. The same setting picks the CJK fallback for the interface *and* the Han preference of the text engine, so the composition's own text is drawn with the same language's glyph forms (the text engine's preference is process-global); swapping the language reinstalls the fonts, so it applies without a restart. Two catalogs back the text: the menus are keyed by `(command, English label)` (`crates/ui-egui/src/i18n.rs`), and the rest of the interface - panels, dialogs, buttons, tooltips - is keyed by its English source string (`crates/ui-egui/src/i18n/ui.rs`, with rows for Japanese, Simplified and Traditional Chinese and Ukrainian), where a panel writes `tr("Rename")`, or `tr_args("Proxy Use: {}", &[&quality])` when the row carries a value. A row that is missing falls back to English, so a new string shows up untranslated rather than empty; the `missing_translations_report` test lists what each language lacks, and the tests in `ui.rs` fail on an unused row. +- `general.language`: interface language (`system` / `en` / `ja` / `zh-hans` / `zh-hant` / `uk` / `es` / `pt-br` / `ka` / `sv`), Settings ▸ General ▸ Language; menu labels change immediately. `system` (Match System, the default) follows the operating system's interface language where EffectCraft has a translation and is English otherwise: a Simplified Chinese locale (`zh`, `zh-CN`, `zh_CN.UTF-8`, `zh-Hans-CN`, `zh-SG`) selects `zh-hans`, a Traditional one (`zh-TW`, `zh-HK`, `zh-Hant`, `zh_MO`) selects `zh-hant`, a Ukrainian one (`uk`, `uk-UA`, `uk_UA.UTF-8`) selects `uk`, a Spanish one (`es`, `es-ES`, `es_MX.UTF-8`) selects `es`, a Portuguese one (`pt`, `pt-BR`, `pt_PT.UTF-8`) selects `pt-br`, a Georgian one (`ka`, `ka-GE`, `ka_GE.UTF-8`) selects `ka`, a Swedish one (`sv`, `sv-SE`, `sv_SE.UTF-8`) selects `sv`; the browser build follows `?lang=` in the address, then the browser's languages (`navigator.languages`). Choose **Español** or **Português (Brasil)** for Spanish or Brazilian Portuguese menus (panels stay in English for now); choose **Українська** for Ukrainian menus and cataloged panel, dialog, button and tooltip text; Ukrainian uses the bundled UI fonts. Choose **Svenska** for Swedish menus, panels and effect names. Native Japanese, Simplified and Traditional Chinese UI uses installed system fonts; the web host must supply a Japanese font. The same setting picks the CJK fallback for the interface *and* the Han preference of the text engine, so the composition's own text is drawn with the same language's glyph forms (the text engine's preference is process-global); swapping the language reinstalls the fonts, so it applies without a restart. Two catalogs back the text: the menus are keyed by `(command, English label)` (`crates/ui-egui/src/i18n.rs`), and the rest of the interface - panels, dialogs, buttons, tooltips - is keyed by its English source string (`crates/ui-egui/src/i18n/ui.rs`, with rows for Japanese, Simplified and Traditional Chinese and Ukrainian), where a panel writes `tr("Rename")`, or `tr_args("Proxy Use: {}", &[&quality])` when the row carries a value. A row that is missing falls back to English, so a new string shows up untranslated rather than empty; the `missing_translations_report` test lists what each language lacks, and the tests in `ui.rs` fail on an unused row. - `general.undoLevels`: Levels of Undo - `general.pathPointSize`: Path Point and Handle Size - `general.recentItems`: Recent Projects Shown