mirror of
https://github.com/storytold/effectcraft.git
synced 2026-10-31 23:58:21 +00:00
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 <noreply@anthropic.com>
This commit is contained in:
1 parent
44f95f766c
commit
46881e0d5f
10 files changed
+2353
-15
No files matched your search
+1
-1
@@ -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
|
||||
|
||||
@@ -10,6 +10,7 @@ pub const LANGUAGES: &[(&str, &str)] = &[
|
||||
("Français", "fr"),
|
||||
("Polski", "pl"),
|
||||
("Português (Brasil)", "pt-br"),
|
||||
("Svenska", "sv"),
|
||||
("Русский", "ru"),
|
||||
("Українська", "uk"),
|
||||
("ქართული", "ka"),
|
||||
|
||||
@@ -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;
|
||||
|
||||
+748
-2
@@ -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::<Vec<_>>()
|
||||
};
|
||||
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}");
|
||||
|
||||
@@ -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]
|
||||
|
||||
+1185
-1
File diff suppressed because it is too large.
Load diff
@@ -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<String>) {
|
||||
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") {
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
@@ -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).
|
||||
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
Reference in new issue
Block a user