mirror of
https://github.com/storytold/effectcraft.git
synced 2026-11-02 06:27:11 -06:00
Merge PR #1541
This commit is contained in:
+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" => {
|
||||
@@ -189,6 +195,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))
|
||||
}
|
||||
|
||||
@@ -207,6 +220,7 @@ fn menu_catalog(language: &str) -> Option<&'static [(&'static str, &'static str,
|
||||
"cs" => CZECH,
|
||||
"pl" => POLISH,
|
||||
"ka" => GEORGIAN,
|
||||
"sv" => SWEDISH,
|
||||
_ => return None,
|
||||
})
|
||||
}
|
||||
@@ -283,6 +297,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() {
|
||||
@@ -424,6 +439,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()
|
||||
@@ -1068,6 +1094,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.
|
||||
@@ -8150,6 +8812,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 {
|
||||
@@ -8243,6 +8958,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());
|
||||
@@ -8364,6 +9104,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"),
|
||||
@@ -8379,6 +9123,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();
|
||||
@@ -8407,6 +9152,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