Merge pull request #987 from Losminek/cs-ui

i18n: add Czech (cs) interface language

# Conflicts:
#	crates/engine/src/prefs.rs
#	crates/ui-egui/src/i18n.rs
#	crates/ui-egui/src/i18n/ui.rs
#	docs/localization-parity.md
This commit is contained in:
Brandon Thomas committed 2026-10-12 05:22:10 -04:00
commit af671f6997
8 files changed
+1349 -11

No files matched your search

+2
View File
@@ -58,6 +58,8 @@ sync_github_name = false
[people.vangel76]
real_name = "Valentin Klein"
display_name = "Valentin Klein"
[people.Losminek]
sync_github_name = true
[people.webdevtodayjason]
+1
View File
@@ -35,6 +35,7 @@ pub const LANGUAGES: &[(&str, &str)] = &[
("Русский", "ru"),
("Français", "fr"),
("Deutsch", "de"),
("Čeština", "cs"),
];
/// Settings ▸ Startup & Repair ▸ Window Graphics: (label, `startup.windowGraphics` value).
+8
View File
@@ -675,6 +675,14 @@ fn interface_language_is_validated_persisted_and_backward_compatible() {
let mut es = Session { config: Some(store.clone()), ..Default::default() };
es.load_settings();
assert_eq!(es.prefs.general.language, "es");
// Czech uses the same validation, persistence and JSON round-trip as every catalog.
assert!(crate::prefs::LANGUAGES.contains(&("Čeština", "cs")));
s.execute("prefs.set", json!({"key": "general.language", "value": "cs"})).unwrap();
assert_eq!(s.execute("prefs.get", json!({"key": "general.language"})).unwrap(), json!("cs"));
let mut cs = Session { config: Some(store.clone()), ..Default::default() };
cs.load_settings();
assert_eq!(cs.prefs.general.language, "cs");
assert_eq!(Prefs::from_json(r#"{"general":{"language":"cs"}}"#).general.language, "cs");
s.execute("prefs.set", json!({"key": "general.language", "value": "ja"})).unwrap();
let mut reloaded = Session { config: Some(store), ..Default::default() };
reloaded.load_settings();
+742 -3
View File
@@ -11,7 +11,7 @@ use effectcraft_engine::menus::MenuEntry;
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; 9] = ["ja", "zh-hans", "zh-hant", "uk", "es", "pt-br", "ru", "fr", "de"];
const CATALOG_CODES: [&str; 10] = ["ja", "zh-hans", "zh-hant", "uk", "es", "pt-br", "ru", "fr", "de", "cs"];
/// 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).
@@ -57,6 +57,11 @@ pub(crate) fn brazilian_portuguese(app: &EffectcraftApp) -> bool {
language(app) == "pt-br"
}
/// The UI is in Czech.
pub(crate) fn czech(app: &EffectcraftApp) -> bool {
language(app) == "cs"
}
/// 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 stays in English because it has no system-locale probe.
@@ -72,7 +77,7 @@ fn system_language() -> &'static str {
}
/// 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`).
/// `zh-TW` → `zh-hant`, `uk-UA` → `uk`, `es-ES` → `es`, `pt-BR` → `pt-br`, `cs-CZ` → `cs`).
fn supported(locale: Option<&str>) -> &'static str {
let Some(locale) = locale else { return "en" };
let mut parts = locale.split(['-', '_']);
@@ -82,6 +87,7 @@ fn supported(locale: Option<&str>) -> &'static str {
"ja" => "ja",
"uk" => "uk",
"es" => "es",
"cs" => "cs",
// The only Portuguese catalog: Brazil's, also for Portugal rather than English.
"pt" => "pt-br",
"zh" => {
@@ -103,6 +109,13 @@ pub(crate) fn label<'a>(app: &EffectcraftApp, command: &str, source: &'a str) ->
_ => {}
}
}
if language == "cs" && matches!(command, "file.revealInFinder" | "layer.revealInFinder") {
match source {
"Reveal in Explorer" => return "Zobrazit v Průzkumníku",
"Reveal in File Manager" => return "Zobrazit ve správci souborů",
_ => {}
}
}
match language {
"ja" => lookup(JAPANESE, command, source),
"zh-hans" => lookup(SIMPLIFIED_CHINESE, command, source),
@@ -113,6 +126,7 @@ pub(crate) fn label<'a>(app: &EffectcraftApp, command: &str, source: &'a str) ->
"ru" => lookup(RUSSIAN, command, source),
"fr" => lookup(FRENCH, command, source),
"de" => lookup(GERMAN, command, source),
"cs" => lookup(CZECH, command, source),
_ => source,
}
}
@@ -133,6 +147,7 @@ pub(crate) fn entry(app: &EffectcraftApp, e: &MenuEntry, shown: String) -> Strin
"uk" => ("Скасувати", "Немає дій для скасування", "Повторити", "Немає дій для повторення"),
"es" => ("Deshacer", "No se puede deshacer", "Rehacer", "No se puede rehacer"),
"pt-br" => ("Desfazer", "Não há nada para desfazer", "Refazer", "Não há nada para refazer"),
"cs" => ("Zpět", "Není co vrátit", "Znovu", "Není co zopakovat"),
_ => return shown,
};
match e.command.as_str() {
@@ -155,6 +170,17 @@ pub(crate) fn entry(app: &EffectcraftApp, e: &MenuEntry, shown: String) -> Strin
pub(crate) fn submenu(app: &EffectcraftApp, source: &str, shown: String) -> String {
match language(app) {
"cs" => {
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!("Přiřadit zkratku pracovnímu prostoru „{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!("Přiřadit zkratku 3D zobrazení „{name}“");
}
}
"uk" => {
if source == "Assign Shortcut to Workspace" {
if let Some(name) = shown.strip_prefix("Assign Shortcut to “").and_then(|s| s.strip_suffix("” Workspace")) {
@@ -5895,6 +5921,629 @@ const GERMAN: &[(&str, &str, &str)] = &[
// <<< generated i18n catalogs
/// Czech (cs): original phrase translations of every fixed menu entry.
const CZECH: &[(&str, &str, &str)] = &[
("", "EffectCraft", "EffectCraft"),
("app.about", "About EffectCraft...", "O aplikaci EffectCraft..."),
("", "Settings...", "Nastavení..."),
("app.settings", "General...", "Obecné..."),
("app.settings", "Startup & Repair...", "Spuštění a oprava..."),
("app.settings", "Project...", "Projekt..."),
("app.settings", "Composition...", "Kompozice..."),
("app.settings", "Previews...", "Náhledy..."),
("app.settings", "Appearance...", "Vzhled..."),
("app.settings", "Grids & Guides...", "Mřížky a vodítka..."),
("app.settings", "Labels...", "Štítky..."),
("app.settings", "Type...", "Text..."),
("app.settings", "Import...", "Import..."),
("app.settings", "Export...", "Export..."),
("app.settings", "Audio...", "Zvuk..."),
("app.settings", "Disk...", "Disk..."),
("app.settings", "Memory & CPU...", "Paměť a CPU..."),
("app.settings", "Video...", "Video..."),
("app.settings", "3D...", "3D..."),
("app.settings", "Scripting & Expressions...", "Skripty a výrazy..."),
("app.hide", "Hide EffectCraft", "Skrýt EffectCraft"),
("app.hideOthers", "Hide Others", "Skrýt ostatní"),
("app.showAll", "Show All", "Zobrazit vše"),
("app.quit", "Quit EffectCraft", "Ukončit EffectCraft"),
("", "File", "Soubor"),
("", "New", "Nový"),
("file.newProject", "New Project", "Nový projekt"),
("file.newFromTemplate", "New Project from Template...", "Nový projekt ze šablony..."),
("project.newFolder", "New Folder", "Nová složka"),
("file.open", "Open Project...", "Otevřít projekt..."),
("", "Open Recent", "Otevřít nedávné"),
("file.clearRecent", "Clear Recent Projects", "Vymazat nedávné projekty"),
("file.close", "Close", "Zavřít"),
("file.closeProject", "Close Project", "Zavřít projekt"),
("file.save", "Save", "Uložit"),
("", "Save As", "Uložit jako"),
("file.saveAs", "Save As...", "Uložit jako..."),
("file.saveCopy", "Save a Copy...", "Uložit kopii..."),
("file.saveCopyAsXml", "Save a Copy As XML...", "Uložit kopii jako XML..."),
("templates.saveAs", "Save as Template...", "Uložit jako šablonu..."),
("file.incrementAndSave", "Increment and Save", "Zvýšit číslo verze a uložit"),
("file.revert", "Revert", "Vrátit k uložené verzi"),
("", "Import", "Importovat"),
("file.import", "File...", "Soubor..."),
("file.importMultiple", "Multiple Files...", "Více souborů..."),
("file.importTimeline", "Adobe Premiere Pro Project...", "Projekt Adobe Premiere Pro..."),
("file.importPlaceholder", "Placeholder...", "Zástupný záznam..."),
("file.importSolid", "Solid...", "Plná vrstva..."),
("file.importLottie", "Lottie...", "Lottie..."),
("file.importVanishingPoint", "Vanishing Point (.vpe)...", "Úběžný bod (.vpe)..."),
("essential.importTemplate", "Essential Graphics Template...", "Šablona základní grafiky..."),
("", "Import Recent Footage", "Importovat nedávný záznam"),
("file.clearRecentFootage", "Clear Recent Footage", "Vymazat nedávné záznamy"),
("", "Export", "Exportovat"),
("renderQueue.add", "Add to Render Queue", "Přidat do fronty vykreslování"),
("file.exportTimeline", "Adobe Premiere Pro Project...", "Projekt Adobe Premiere Pro..."),
("file.exportLottie", "Lottie JSON...", "Lottie JSON..."),
("essential.exportTemplate", "Essential Graphics Template...", "Šablona základní grafiky..."),
("app.find", "Find", "Najít"),
("layer.addItem", "Add Footage to Comp", "Přidat záznam do kompozice"),
("file.newCompFromSelection", "New Comp from Selection...", "Nová kompozice z výběru..."),
("", "Dependencies", "Závislosti"),
("file.collectFiles", "Collect Files...", "Shromáždit soubory..."),
("file.consolidateFootage", "Consolidate All Footage", "Sloučit duplicitní záznamy"),
("file.removeUnusedFootage", "Remove Unused Footage", "Odstranit nepoužité záznamy"),
("file.reduceProject", "Reduce Project", "Zredukovat projekt"),
("file.findMissing", "Find Missing Effects", "Najít chybějící efekty"),
("file.findMissing", "Find Missing Fonts", "Najít chybějící písma"),
("file.findMissing", "Find Missing Footage", "Najít chybějící záznamy"),
("file.relinkFootage", "Relink Missing Footage...", "Znovu připojit chybějící záznamy..."),
("file.watchFolder", "Watch Folder...", "Sledovat složku..."),
("", "Scripts", "Skripty"),
("file.installScript", "Install Script File...", "Nainstalovat soubor skriptu..."),
("file.installScriptUIPanel", "Install ScriptUI Panel...", "Nainstalovat panel ScriptUI..."),
("file.runScript", "Run Script File...", "Spustit soubor skriptu..."),
("", "Create Proxy", "Vytvořit zástupný soubor"),
("file.createProxy", "Still...", "Statický snímek..."),
("file.createProxy", "Movie...", "Video..."),
("", "Set Proxy", "Nastavit zástupný soubor"),
("file.setProxy", "File...", "Soubor..."),
("file.setProxyNone", "None", "Žádný"),
("", "Interpret Footage", "Interpretovat záznam"),
("file.interpretFootage", "Main...", "Hlavní..."),
("file.interpretProxy", "Proxy...", "Zástupný..."),
("file.rememberInterpretation", "Remember Interpretation", "Zapamatovat interpretaci"),
("file.applyInterpretation", "Apply Interpretation", "Použít interpretaci"),
("", "Replace Footage", "Nahradit záznam"),
("file.replaceFootage", "File...", "Soubor..."),
("file.replaceWithPlaceholder", "Placeholder...", "Zástupný záznam..."),
("file.replaceWithSolid", "Solid...", "Plná vrstva..."),
("file.replaceWithLayeredComp", "With Layered Comp", "Kompozicí s vrstvami"),
("file.reloadFootage", "Reload Footage", "Znovu načíst záznam"),
("file.revealInFinder", "Reveal in Finder", "Zobrazit ve Finderu"),
("file.projectSettings", "Project Settings...", "Nastavení projektu..."),
("app.quit", "Exit", "Ukončit"),
("", "Edit", "Úpravy"),
("edit.undo", "Undo", "Zpět"),
("edit.redo", "Redo", "Znovu"),
("", "History", "Historie"),
("app.commandPalette", "Quick Apply...", "Rychle použít..."),
("edit.cut", "Cut", "Vyjmout"),
("edit.copy", "Copy", "Kopírovat"),
("edit.copyWithPropertyLinks", "Copy with Property Links", "Kopírovat s odkazy na vlastnosti"),
("edit.copyWithRelativePropertyLinks", "Copy with Relative Property Links", "Kopírovat s relativními odkazy na vlastnosti"),
("edit.copyExpressionOnly", "Copy Expression Only", "Kopírovat pouze výraz"),
("edit.paste", "Paste", "Vložit"),
("edit.pasteReversedKeyframes", "Paste Reversed Keyframes", "Vložit klíčové snímky v opačném pořadí"),
("edit.pasteTextMatchFormatting", "Paste Text and Match Formatting", "Vložit text a přizpůsobit formátování"),
("edit.pasteTextFormattingOnly", "Paste Text Formatting Only", "Vložit pouze formátování textu"),
("edit.clear", "Clear", "Vymazat"),
("edit.duplicate", "Duplicate", "Duplikovat"),
("edit.splitLayer", "Split Layer", "Rozdělit vrstvu"),
("edit.liftWorkArea", "Lift Work Area", "Vyjmout pracovní oblast bez posunu"),
("edit.extractWorkArea", "Extract Work Area", "Vyjmout pracovní oblast s posunem"),
("edit.selectAll", "Select All", "Vybrat vše"),
("edit.deselectAll", "Deselect All", "Zrušit výběr"),
("", "Label", "Štítek"),
("edit.selectLabelGroup", "Select Label Group", "Vybrat skupinu podle štítku"),
("edit.label", "None", "Žádný"),
("edit.label", "Red", "Červený"),
("edit.label", "Yellow", "Žlutý"),
("edit.label", "Aqua", "Akvamarínový"),
("edit.label", "Pink", "Růžový"),
("edit.label", "Lavender", "Levandulový"),
("edit.label", "Peach", "Broskvový"),
("edit.label", "Sea Foam", "Mořská pěna"),
("edit.label", "Blue", "Modrý"),
("edit.label", "Green", "Zelený"),
("edit.label", "Purple", "Fialový"),
("edit.label", "Orange", "Oranžový"),
("edit.label", "Brown", "Hnědý"),
("edit.label", "Fuchsia", "Fuchsiový"),
("edit.label", "Cyan", "Azurový"),
("edit.label", "Sandstone", "Pískovcový"),
("edit.label", "Dark Green", "Tmavě zelený"),
("app.settings", "Edit Label Colors...", "Upravit barvy štítků..."),
("", "Select Keyframe Label Group", "Vybrat skupinu podle štítku klíčových snímků"),
("keys.selectLabelGroup", "On Selected Layers", "Na vybraných vrstvách"),
("keys.selectLabelGroup", "On All Layers", "Na všech vrstvách"),
("keys.selectLabelGroup", "Visible Keyframes on Selected Layers", "Viditelné klíčové snímky na vybraných vrstvách"),
("keys.selectLabelGroup", "Visible Keyframes on All Layers", "Viditelné klíčové snímky na všech vrstvách"),
("", "Purge", "Vyprázdnit"),
("edit.purge", "All Cache...", "Celou mezipaměť..."),
("edit.purge", "All Memory & Disk Cache...", "Celou paměťovou a diskovou mezipaměť..."),
("edit.purge", "All Memory", "Veškerou paměť"),
("edit.purge", "All Disk Cache...", "Celou diskovou mezipaměť..."),
("edit.purge", "All 3D Cache...", "Celou 3D mezipaměť..."),
("edit.purgeUndo", "Undo", "Historii vracení změn"),
("edit.purge", "Image Cache Memory", "Paměť obrazové mezipaměti"),
("edit.purge", "Snapshot", "Snímek náhledu"),
("edit.editOriginal", "Edit Original...", "Upravit originál..."),
("", "Templates", "Šablony"),
("app.templates", "Render Settings...", "Nastavení vykreslování..."),
("app.templates", "Output Module...", "Výstupní modul..."),
("app.keyboardShortcuts", "Keyboard Shortcuts", "Klávesové zkratky"),
("", "Preferences", "Předvolby"),
("", "Composition", "Kompozice"),
("comp.new", "New Composition...", "Nová kompozice..."),
("comp.settings", "Composition Settings...", "Nastavení kompozice..."),
("comp.setPosterTime", "Set Poster Time", "Nastavit čas reprezentativního snímku"),
("comp.trimToWorkArea", "Trim Comp to Work Area", "Oříznout kompozici na pracovní oblast"),
("comp.cropToRegionOfInterest", "Crop Comp to Region of Interest", "Oříznout kompozici na oblast zájmu"),
("comp.cropToLayerBounds", "Crop Comp to Selected Layer(s) Bounds", "Oříznout kompozici na hranice vybrané vrstvy (vrstev)"),
("render.addOutputModule", "Add Output Module", "Přidat výstupní modul"),
("", "Preview", "Náhled"),
("playback.toggle", "Play Current Preview", "Přehrát aktuální náhled"),
("playback.cacheWhenIdle", "Cache Frames When Idle", "Ukládat snímky do mezipaměti při nečinnosti"),
("playback.audio", "Audio", "Zvuk"),
("", "Save Frame As", "Uložit snímek jako"),
("comp.saveFrameAs", "File...", "Soubor..."),
("comp.saveFrameAsPsd", "Photoshop Layers...", "Vrstvy Photoshopu..."),
("comp.saveFrameAsExr", "ProEXR...", "ProEXR..."),
("comp.copyFrame", "Copy Frame to Clipboard", "Kopírovat snímek do schránky"),
("render.preRender", "Pre-render...", "Předvykreslit..."),
("render.saveCurrentPreview", "Save Current Preview...", "Uložit aktuální náhled..."),
("comp.openInEssentialGraphics", "Open in Essential Graphics", "Otevřít v základní grafice"),
("", "Responsive Design — Time", "Responzivní návrh — čas"),
("comp.responsiveTime", "Create Intro", "Vytvořit úvod"),
("comp.responsiveTime", "Create Outro", "Vytvořit závěr"),
("comp.responsiveTime", "Create Protected Region from Work Area", "Vytvořit chráněnou oblast z pracovní oblasti"),
("comp.flowchart", "Composition Flowchart", "Vývojový diagram kompozice"),
("comp.miniFlowchart", "Composition Mini-Flowchart", "Malý vývojový diagram kompozice"),
("", "VR", "VR"),
("comp.vr.createEnvironment", "Create VR Environment...", "Vytvořit prostředí VR..."),
("comp.vr.extractCubemap", "Extract Cubemap...", "Extrahovat krychlovou mapu..."),
("", "Layer", "Vrstva"),
("layer.newText", "Text", "Text"),
("layer.newSolid", "Solid...", "Plná vrstva..."),
("layer.newLight", "Light...", "Světlo..."),
("layer.newCamera", "Camera...", "Kamera..."),
("layer.newNull", "Null Object", "Prázdný objekt"),
("layer.newShape", "Shape Layer", "Vrstva tvaru"),
("layer.newAdjustment", "Adjustment Layer", "Vrstva úprav"),
("layer.newContentAwareFill", "Content-Aware Fill Layer...", "Vrstva výplně podle obsahu..."),
("layer.new3dPrimitive", "Cube", "Krychle"),
("layer.new3dPrimitive", "Sphere", "Koule"),
("layer.new3dPrimitive", "Plane", "Rovina"),
("layer.new3dPrimitive", "Torus", "Prstenec"),
("layer.new3dPrimitive", "Cone", "Kužel"),
("layer.new3dPrimitive", "Cylinder", "Válec"),
("layer.settings", "Layer Settings...", "Nastavení vrstvy..."),
("layer.openLayer", "Open Layer", "Otevřít vrstvu"),
("layer.openSource", "Open Layer Source", "Otevřít zdroj vrstvy"),
("layer.revealInFinder", "Reveal in Finder", "Zobrazit ve Finderu"),
("", "Mask", "Maska"),
("layer.addMask", "New Mask", "Nová maska"),
("layer.mask.shape", "Mask Shape...", "Tvar masky..."),
("layer.mask.set", "Mask Feather...", "Prolnutí okrajů masky..."),
("layer.mask.set", "Mask Opacity...", "Krytí masky..."),
("layer.mask.set", "Mask Expansion...", "Rozšíření masky..."),
("layer.mask.reset", "Reset Mask", "Obnovit masku"),
("layer.mask.remove", "Remove Mask", "Odstranit masku"),
("layer.mask.removeAll", "Remove All Masks", "Odstranit všechny masky"),
("track.mask", "Track Mask", "Sledovat masku"),
("", "Mode", "Režim"),
("layer.mask.mode", "None", "Žádný"),
("layer.mask.mode", "Add", "Přičíst"),
("layer.mask.mode", "Subtract", "Odečíst"),
("layer.mask.mode", "Intersect", "Průnik"),
("layer.mask.mode", "Lighten", "Zesvětlit"),
("layer.mask.mode", "Darken", "Ztmavit"),
("layer.mask.mode", "Difference", "Rozdíl"),
("layer.mask.invert", "Inverted", "Invertovaná"),
("layer.mask.lock", "Locked", "Zamknutá"),
("", "Motion Blur", "Rozostření pohybem"),
("layer.mask.motionBlur", "Same As Layer", "Stejné jako u vrstvy"),
("layer.mask.motionBlur", "On", "Zapnuto"),
("layer.mask.motionBlur", "Off", "Vypnuto"),
("", "Feather Falloff", "Průběh prolnutí okrajů"),
("layer.mask.featherFalloff", "Smooth", "Plynulý"),
("layer.mask.featherFalloff", "Linear", "Lineární"),
("layer.mask.unlockAll", "Unlock All Masks", "Odemknout všechny masky"),
("layer.mask.lockOthers", "Lock Other Masks", "Zamknout ostatní masky"),
("layer.mask.hideLocked", "Hide Locked Masks", "Skrýt zamknuté masky"),
("", "Mask and Shape Path", "Cesta masky a tvaru"),
("path.rotoBezier", "RotoBezier", "RotoBezier"),
("mask.setClosed", "Closed", "Uzavřená"),
("path.convertToBezier", "Convert To Bezier Path", "Převést na Bézierovu cestu"),
("path.setFirstVertex", "Set First Vertex", "Nastavit první vrchol"),
("path.freeTransform", "Free Transform Points", "Volně transformovat body"),
("", "Quality", "Kvalita"),
("layer.quality", "Best", "Nejlepší"),
("layer.quality", "Draft", "Pracovní"),
("layer.quality", "Wireframe", "Drátový model"),
("layer.sampling", "Bilinear", "Bilineární"),
("layer.sampling", "Bicubic", "Bikubické"),
("", "Switches", "Přepínače"),
("layer.hideOtherVideo", "Hide Other Video", "Skrýt ostatní video"),
("layer.showAllVideo", "Show All Video", "Zobrazit veškeré video"),
("layer.unlockAll", "Unlock All Layers", "Odemknout všechny vrstvy"),
("layer.expressions", "Enable Expressions", "Povolit výrazy"),
("layer.expressions", "Disable Expressions", "Zakázat výrazy"),
("layer.setSwitch", "Shy", "Skrýt z časové osy"),
("layer.setSwitch", "Lock", "Zamknout"),
("layer.setSwitch", "Audio", "Zvuk"),
("layer.setSwitch", "Video", "Video"),
("layer.setSwitch", "Solo", "Sólo"),
("layer.setSwitch", "Effect", "Efekt"),
("layer.setSwitch", "Collapse", "Sbalit transformace"),
("layer.setSwitch", "Motion Blur", "Rozostření pohybem"),
("layer.setSwitch", "Adjustment Layer", "Vrstva úprav"),
("", "Transform", "Transformace"),
("layer.transform", "Reset", "Obnovit"),
("layer.setTransform", "Anchor Point...", "Kotevní bod..."),
("layer.setTransform", "Position...", "Pozice..."),
("layer.setTransform", "Scale...", "Měřítko..."),
("layer.setTransform", "Orientation...", "Orientace..."),
("layer.setTransform", "Rotation...", "Otočení..."),
("layer.setTransform", "Opacity...", "Krytí..."),
("layer.transform", "Flip Horizontal", "Převrátit vodorovně"),
("layer.transform", "Flip Vertical", "Převrátit svisle"),
("layer.transform", "Center In View", "Vystředit v zobrazení"),
("layer.centerAnchor", "Center Anchor Point in Layer Content", "Vystředit kotevní bod v obsahu vrstvy"),
("layer.transform", "Fit to Comp", "Přizpůsobit kompozici"),
("layer.transform", "Fit to Comp Width", "Přizpůsobit šířce kompozice"),
("layer.transform", "Fit to Comp Height", "Přizpůsobit výšce kompozice"),
("layer.autoOrient", "Auto-Orient...", "Automaticky orientovat..."),
("", "Time", "Čas"),
("layer.enableTimeRemap", "Enable Time Remapping", "Povolit přemapování času"),
("layer.timeReverse", "Time-Reverse Layer", "Obrátit čas vrstvy"),
("layer.timeStretch", "Time Stretch...", "Roztažení času..."),
("layer.freezeFrame", "Freeze Frame", "Zmrazit snímek"),
("layer.freezeOnLastFrame", "Freeze On Last Frame", "Zmrazit na posledním snímku"),
("layer.alignVideoToData", "Align Video to Data", "Zarovnat video podle dat"),
("", "Frame Blending", "Prolnutí snímků"),
("layer.frameBlending", "Off", "Vypnuto"),
("layer.frameBlending", "Frame Mix", "Smíchání snímků"),
("layer.frameBlending", "Pixel Motion", "Pohyb pixelů"),
("layer.setSwitch", "3D Layer", "3D vrstva"),
("layer.setSwitch", "Guide Layer", "Pomocná vrstva"),
("layer.environment", "Environment Layer", "Vrstva prostředí"),
("", "Markers", "Značky"),
("layer.addMarker", "Add Marker", "Přidat značku"),
("layer.updateMarkersFromSource", "Update Markers From Source", "Aktualizovat značky ze zdroje"),
("layer.markersLock", "Lock Markers", "Zamknout značky"),
("layer.deleteAllMarkers", "Delete All Markers", "Odstranit všechny značky"),
("layer.setSwitch", "Preserve Transparency", "Zachovat průhlednost"),
("", "Blending Mode", "Režim prolnutí"),
("layer.setBlendMode", "Normal", "Normální"),
("layer.setBlendMode", "Dissolve", "Rozpustit"),
("layer.setBlendMode", "Dancing Dissolve", "Tančící rozpuštění"),
("layer.setBlendMode", "Darken", "Ztmavit"),
("layer.setBlendMode", "Multiply", "Násobit"),
("layer.setBlendMode", "Color Burn", "Ztmavit barvy"),
("layer.setBlendMode", "Classic Color Burn", "Klasické ztmavení barev"),
("layer.setBlendMode", "Linear Burn", "Lineárně ztmavit"),
("layer.setBlendMode", "Darker Color", "Tmavší barva"),
("layer.setBlendMode", "Add", "Přičíst"),
("layer.setBlendMode", "Lighten", "Zesvětlit"),
("layer.setBlendMode", "Screen", "Závoj"),
("layer.setBlendMode", "Color Dodge", "Zesvětlit barvy"),
("layer.setBlendMode", "Classic Color Dodge", "Klasické zesvětlení barev"),
("layer.setBlendMode", "Linear Dodge", "Lineárně zesvětlit"),
("layer.setBlendMode", "Lighter Color", "Světlejší barva"),
("layer.setBlendMode", "Overlay", "Překrýt"),
("layer.setBlendMode", "Soft Light", "Měkké světlo"),
("layer.setBlendMode", "Hard Light", "Tvrdé světlo"),
("layer.setBlendMode", "Linear Light", "Lineární světlo"),
("layer.setBlendMode", "Vivid Light", "Jasné světlo"),
("layer.setBlendMode", "Pin Light", "Kolíkové světlo"),
("layer.setBlendMode", "Hard Mix", "Tvrdé míchání"),
("layer.setBlendMode", "Difference", "Rozdíl"),
("layer.setBlendMode", "Classic Difference", "Klasický rozdíl"),
("layer.setBlendMode", "Exclusion", "Vyloučit"),
("layer.setBlendMode", "Subtract", "Odečíst"),
("layer.setBlendMode", "Divide", "Dělit"),
("layer.setBlendMode", "Hue", "Odstín"),
("layer.setBlendMode", "Saturation", "Sytost"),
("layer.setBlendMode", "Color", "Barva"),
("layer.setBlendMode", "Luminosity", "Světlost"),
("layer.setBlendMode", "Stencil Alpha", "Šablona alfa"),
("layer.setBlendMode", "Stencil Luma", "Šablona jasu"),
("layer.setBlendMode", "Silhouette Alpha", "Silueta alfa"),
("layer.setBlendMode", "Silhouette Luma", "Silueta jasu"),
("layer.setBlendMode", "Alpha Add", "Přičíst alfu"),
("layer.setBlendMode", "Luminescent Premul", "Luminiscenční přednásobení"),
("layer.setBlendMode", "Next Blending Mode", "Následující režim prolnutí"),
("layer.setBlendMode", "Previous Blending Mode", "Předchozí režim prolnutí"),
("", "Track Matte", "Maska stopy"),
("layer.trackMatte", "No Track Matte", "Bez masky stopy"),
("layer.trackMatte", "Alpha Matte", "Alfa maska"),
("layer.trackMatte", "Alpha Inverted Matte", "Invertovaná alfa maska"),
("layer.trackMatte", "Luma Matte", "Maska jasu"),
("layer.trackMatte", "Luma Inverted Matte", "Invertovaná maska jasu"),
("layer.trackMatte", "Matte with Layer Above", "Maskovat vrstvou výše"),
("layer.trackMatte", "Matte with Layer Below", "Maskovat vrstvou níže"),
("", "Layer Styles", "Styly vrstvy"),
("layer.style.options", "Layer Style Options...", "Možnosti stylu vrstvy..."),
("layer.style.convertToEditable", "Convert to Editable Styles", "Převést na upravitelné styly"),
("layer.style.showAll", "Show All", "Zobrazit vše"),
("layer.style.removeAll", "Remove All", "Odstranit vše"),
("layer.style.dropShadow", "Drop Shadow", "Vržený stín"),
("layer.style.innerShadow", "Inner Shadow", "Vnitřní stín"),
("layer.style.outerGlow", "Outer Glow", "Vnější záře"),
("layer.style.innerGlow", "Inner Glow", "Vnitřní záře"),
("layer.style.bevelEmboss", "Bevel and Emboss", "Úkos a reliéf"),
("layer.style.satin", "Satin", "Satén"),
("layer.style.colorOverlay", "Color Overlay", "Překrytí barvou"),
("layer.style.gradientOverlay", "Gradient Overlay", "Překrytí přechodem"),
("layer.style.stroke", "Stroke", "Tah"),
("path.groupShapes", "Group Shapes", "Seskupit tvary"),
("path.ungroupShapes", "Ungroup Shapes", "Zrušit seskupení tvarů"),
("", "Arrange", "Uspořádat"),
("layer.arrange", "Bring Layer to Front", "Přenést vrstvu do popředí"),
("layer.arrange", "Bring Layer Forward", "Posunout vrstvu vpřed"),
("layer.arrange", "Send Layer Backward", "Posunout vrstvu vzad"),
("layer.arrange", "Send Layer to Back", "Přenést vrstvu do pozadí"),
("", "Reveal", "Zobrazit"),
("layer.revealSource", "Reveal Layer Source in Project", "Zobrazit zdroj vrstvy v projektu"),
("comp.flowchart", "Reveal Layer in Project Flowchart", "Zobrazit vrstvu ve vývojovém diagramu projektu"),
("comp.revealInProject", "Reveal Composition in Project", "Zobrazit kompozici v projektu"),
("layer.revealExpressionErrors", "Reveal Expression Errors", "Zobrazit chyby výrazů"),
("", "Create", "Vytvořit"),
("layer.create", "Convert to Editable Text", "Převést na upravitelný text"),
("layer.create", "Create Shapes from Text", "Vytvořit tvary z textu"),
("layer.create", "Create Masks from Text", "Vytvořit masky z textu"),
("layer.create", "Create Shapes from Vector Layer", "Vytvořit tvary z vektorové vrstvy"),
("layer.create", "Create Keyframes from Data", "Vytvořit klíčové snímky z dat"),
("layer.create", "Null Controllers for Positional Points", "Prázdné ovladače pro poziční body"),
("layer.create", "Null Controllers for Path Points", "Prázdné ovladače pro body cesty"),
("layer.create", "Nulls Following Path Points", "Prázdné objekty sledující body cesty"),
("layer.create", "Null Tracing Along Path", "Prázdný objekt pohybující se po cestě"),
("layer.create", "Create 3D Layer Instance", "Vytvořit instanci 3D vrstvy"),
("", "Camera", "Kamera"),
("camera.fromView", "Create Camera from 3D View", "Vytvořit kameru z 3D zobrazení"),
("camera.stereoRig", "Create Stereo 3D Rig", "Vytvořit stereoskopickou 3D sestavu"),
("camera.orbitNull", "Create Orbit Null", "Vytvořit prázdný objekt pro obíhání"),
("camera.fromModel", "Create Cameras from 3D Model", "Vytvořit kamery z 3D modelu"),
("camera.linkFocusToPoi", "Link Focus Distance to Point of Interest", "Propojit vzdálenost zaostření s bodem zájmu"),
("camera.linkFocusToLayer", "Link Focus Distance to Layer", "Propojit vzdálenost zaostření s vrstvou"),
("camera.setFocusToLayer", "Set Focus Distance to Layer", "Nastavit vzdálenost zaostření na vrstvu"),
("layer.cameraSettings", "Camera Settings...", "Nastavení kamery..."),
("view.reset3DView", "Reset 3D View", "Obnovit 3D zobrazení"),
("", "Light", "Světlo"),
("light.fromModel", "Create Lights from 3D Model", "Vytvořit světla z 3D modelu"),
("light.controlWithCamera", "Control Light with Camera", "Ovládat světlo kamerou"),
("light.environmentBackground", "Create Environment Light Background Layer", "Vytvořit vrstvu pozadí pro světlo prostředí"),
("", "Material", "Materiál"),
("material.revealSource", "Reveal Material Source in Project", "Zobrazit zdroj materiálu v projektu"),
("material.reset", "Reset Material", "Obnovit materiál"),
("material.duplicateAssign", "Duplicate and Assign Material", "Duplikovat a přiřadit materiál"),
("layer.autoTrace", "Auto-trace...", "Automaticky obkreslit..."),
("layer.precompose", "Pre-compose...", "Předkomponovat..."),
("layer.sceneEditDetection", "Scene Edit Detection...", "Rozpoznat střihy scén..."),
("", "Effect", "Efekt"),
("window.panel", "Effect Controls", "Ovládací prvky efektu"),
("effect.applyLast", "Last Effect", "Poslední efekt"),
("effect.removeAll", "Remove All", "Odstranit vše"),
("effect.manage", "Manage Effects...", "Spravovat efekty..."),
("effect.plugins.load", "Load Effect Plug-in...", "Načíst zásuvný modul efektu..."),
("", "Animation", "Animace"),
("anim.savePreset", "Save Animation Preset...", "Uložit přednastavení animace..."),
("anim.applyPreset", "Apply Animation Preset...", "Použít přednastavení animace..."),
("", "Recent Animation Presets", "Nedávná přednastavení animace"),
("anim.clearRecentPresets", "Clear Recent Presets", "Vymazat nedávná přednastavení"),
("anim.browsePresets", "Browse Presets...", "Procházet přednastavení..."),
("", "Text Animation Presets", "Přednastavení animace textu"),
("layer.applyTextPreset", "Typewriter", "Psací stroj"),
("layer.applyTextPreset", "Fade Up Characters", "Postupně zobrazit znaky"),
("layer.applyTextPreset", "Bounce In Words", "Slova s odskokem"),
("layer.applyTextPreset", "Tracking In", "Zúžit prostrkání"),
("layer.applyTextPreset", "Scramble", "Promíchat znaky"),
("layer.applyTextPreset", "Blur In", "Zaostřit text"),
("layer.applyTextPreset", "Jitter", "Chvění"),
("layer.applyTextPreset", "Drop In Lines", "Spustit řádky shora"),
("anim.addKeyframe", "Add Keyframe", "Přidat klíčový snímek"),
("keys.toggleHold", "Toggle Hold Keyframe", "Přepnout podržení klíčového snímku"),
("keys.interpolation", "Keyframe Interpolation...", "Interpolace klíčových snímků..."),
("keys.velocity", "Keyframe Velocity...", "Rychlost klíčového snímku..."),
("", "Keyframe Assistant", "Pomocník klíčových snímků"),
("keys.audioToKeyframes", "Convert Audio to Keyframes", "Převést zvuk na klíčové snímky"),
("prop.convertExpressionToKeyframes", "Convert Expression to Keyframes", "Převést výraz na klíčové snímky"),
("keys.easyEase", "Easy Ease", "Snadné zpomalení"),
("keys.easyEaseIn", "Easy Ease In", "Snadné zpomalení na vstupu"),
("keys.easyEaseOut", "Easy Ease Out", "Snadné zpomalení na výstupu"),
("keys.exponentialScale", "Exponential Scale", "Exponenciální měřítko"),
("keys.rpfCameraImport", "RPF Camera Import", "Import kamery RPF"),
("layer.sequence", "Sequence Layers...", "Seřadit vrstvy za sebe..."),
("keys.timeReverse", "Time-Reverse Keyframes", "Obrátit čas klíčových snímků"),
("", "Animate Text", "Animovat text"),
("layer.enablePerChar3D", "Enable Per-character 3D", "Povolit 3D pro jednotlivé znaky"),
("layer.addTextAnimator", "Anchor Point", "Kotevní bod"),
("layer.addTextAnimator", "Position", "Pozice"),
("layer.addTextAnimator", "Scale", "Měřítko"),
("layer.addTextAnimator", "Skew", "Zkosení"),
("layer.addTextAnimator", "Rotation", "Otočení"),
("layer.addTextAnimator", "Opacity", "Krytí"),
("layer.addTextAnimator", "All Transform Properties", "Všechny vlastnosti transformace"),
("", "Fill Color", "Barva výplně"),
("layer.addTextAnimator", "RGB", "RGB"),
("layer.addTextAnimator", "Hue", "Odstín"),
("layer.addTextAnimator", "Saturation", "Sytost"),
("layer.addTextAnimator", "Brightness", "Jas"),
("", "Stroke Color", "Barva tahu"),
("layer.addTextAnimator", "Stroke Width", "Šířka tahu"),
("layer.addTextAnimator", "Tracking", "Prostrkání"),
("layer.addTextAnimator", "Line Anchor", "Kotevní bod řádku"),
("layer.addTextAnimator", "Line Spacing", "Řádkování"),
("layer.addTextAnimator", "Character Offset", "Posun znaku"),
("layer.addTextAnimator", "Character Value", "Hodnota znaku"),
("layer.addTextAnimator", "Blur", "Rozostření"),
("text.animatorFontAxes", "Variable Font Axes", "Osy variabilního písma"),
("", "Add Text Selector", "Přidat selektor textu"),
("text.addSelector", "Range", "Rozsah"),
("text.addSelector", "Wiggly", "Chvějivý"),
("text.addSelector", "Expression", "Výraz"),
("text.removeAllAnimators", "Remove All Text Animators", "Odstranit všechny animátory textu"),
("prop.setExpression", "Add Expression", "Přidat výraz"),
("essential.addProperty", "Add Property to Essential Graphics", "Přidat vlastnost do základní grafiky"),
("prop.separateDimensions", "Separate Dimensions", "Oddělit rozměry"),
("track.camera", "Track Camera", "Sledovat kameru"),
("track.warpStabilizer", "Warp Stabilizer VFX", "Stabilizátor deformací VFX"),
("track.motion", "Track Motion", "Sledovat pohyb"),
("track.stabilize", "Stabilize Motion", "Stabilizovat pohyb"),
("track.property", "Track this Property", "Sledovat tuto vlastnost"),
("anim.reveal", "Reveal Properties with Keyframes", "Zobrazit vlastnosti s klíčovými snímky"),
("anim.reveal", "Reveal Properties with Animation", "Zobrazit vlastnosti s animací"),
("anim.reveal", "Reveal All Modified Properties", "Zobrazit všechny změněné vlastnosti"),
("", "View", "Zobrazení"),
("view.newViewer", "New Viewer", "Nový prohlížeč"),
("view.splitLockedViewer", "Split with New Locked Viewer", "Rozdělit s novým zamknutým prohlížečem"),
("view.zoomIn", "Zoom In", "Přiblížit"),
("view.zoomOut", "Zoom Out", "Oddálit"),
("", "Resolution", "Rozlišení"),
("view.res.full", "Full", "Plné"),
("view.res.half", "Half", "Poloviční"),
("view.res.third", "Third", "Třetinové"),
("view.res.quarter", "Quarter", "Čtvrtinové"),
("view.res.custom", "Custom...", "Vlastní..."),
("view.displayColorManagement", "Use Display Color Management", "Použít správu barev monitoru"),
("", "Simulate Output", "Simulovat výstup"),
("view.simulateOutput", "No Output Simulation", "Bez simulace výstupu"),
("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)", "Starší Macintosh RGB (gama 1.8)"),
("view.simulateOutput", "Internet Standard RGB (sRGB)", "Internetový standard RGB (sRGB)"),
("view.simulateOutput", "UHDTV (Rec. 2020)", "UHDTV (Rec. 2020)"),
("view.simulateOutput", "Display P3", "Display P3"),
("view.simulateOutput", "Linear (1.0 Gamma)", "Lineární (gama 1.0)"),
("view.customRgb", "My Custom RGB...", "Moje vlastní RGB..."),
("view.simulateOutput", "Custom...", "Vlastní..."),
("view.rulers", "Show Rulers", "Zobrazit pravítka"),
("", "Panel Background Color", "Barva pozadí panelu"),
("view.panelBackground", "Black", "Černá"),
("view.panelBackground", "Dark Gray", "Tmavě šedá"),
("view.panelBackground", "Medium Gray (Default)", "Středně šedá (výchozí)"),
("view.panelBackground", "Light Gray", "Světle šedá"),
("view.panelBackground", "White", "Bílá"),
("view.panelBackground", "Custom", "Vlastní"),
("view.panelBackground", "Select Custom Background Color...", "Vybrat vlastní barvu pozadí..."),
("view.guides", "Show Guides", "Zobrazit vodítka"),
("view.snapToGuides", "Snap to Guides", "Přichytávat k vodítkům"),
("view.lockGuides", "Lock Guides", "Zamknout vodítka"),
("view.addGuide", "Add Guide...", "Přidat vodítko..."),
("view.clearGuides", "Clear Guides", "Vymazat vodítka"),
("view.importGuides", "Import Guides...", "Importovat vodítka..."),
("view.exportGuides", "Export Guides...", "Exportovat vodítka..."),
("view.grid", "Show Grid", "Zobrazit mřížku"),
("view.snapToGrid", "Snap to Grid", "Přichytávat k mřížce"),
("view.snapping", "Snapping", "Přichytávání"),
("view.options", "View Options...", "Možnosti zobrazení..."),
("view.layerControls", "Show Layer Controls", "Zobrazit ovládací prvky vrstvy"),
("", "Switch View Layout", "Přepnout rozložení zobrazení"),
("view.layout", "1 View", "1 zobrazení"),
("view.layout", "2 Views", "2 zobrazení"),
("view.layout", "4 Views", "4 zobrazení"),
("view.shareViewOptions", "Share View Options", "Sdílet možnosti zobrazení"),
("", "Switch 3D View", "Přepnout 3D zobrazení"),
("view.3d.activeCamera", "Active Camera", "Aktivní kamera"),
("view.3d.default", "Default", "Výchozí"),
("view.3d.front", "Front", "Zepředu"),
("view.3d.left", "Left", "Zleva"),
("view.3d.top", "Top", "Shora"),
("view.3d.back", "Back", "Zezadu"),
("view.3d.right", "Right", "Zprava"),
("view.3d.bottom", "Bottom", "Zdola"),
("view.3d.custom1", "Custom View 1", "Vlastní zobrazení 1"),
("view.3d.custom2", "Custom View 2", "Vlastní zobrazení 2"),
("view.3d.custom3", "Custom View 3", "Vlastní zobrazení 3"),
("", "Assign Shortcut to 3D View", "Přiřadit zkratku 3D zobrazení"),
("view.3d.last", "Switch to Last 3D View", "Přepnout na poslední 3D zobrazení"),
("view.lookAtSelected", "Look at Selected Layers", "Zaměřit vybrané vrstvy"),
("view.lookAtAll", "Look at All Layers", "Zaměřit všechny vrstvy"),
("time.set", "Go to Time...", "Přejít na čas..."),
("view.fullScreen", "Enter Full Screen", "Přejít na celou obrazovku"),
("", "Window", "Okno"),
("", "Workspace", "Pracovní prostor"),
("window.workspace", "Default", "Výchozí"),
("window.workspace", "Review", "Revize"),
("window.workspace", "Learn", "Výuka"),
("window.workspace", "Small Screen", "Malá obrazovka"),
("window.workspace", "Standard", "Standardní"),
("window.workspace", "All Panels", "Všechny panely"),
("window.workspace", "Animation", "Animace"),
("window.workspace", "Color", "Barva"),
("window.workspace", "Effects", "Efekty"),
("window.workspace", "Essential Graphics", "Základní grafika"),
("window.workspace", "Minimal", "Minimální"),
("window.workspace", "Motion Tracking", "Sledování pohybu"),
("window.workspace", "Paint", "Malování"),
("window.workspace", "Text", "Text"),
("window.workspace", "Undocked Panels", "Odpojené panely"),
("window.resetWorkspace", "Reset to Saved Layout", "Obnovit uložené rozložení"),
("window.saveWorkspace", "Save Changes to this Workspace", "Uložit změny tohoto pracovního prostoru"),
("window.saveWorkspaceAs", "Save as New Workspace...", "Uložit jako nový pracovní prostor..."),
("window.editWorkspaces", "Edit Workspaces...", "Upravit pracovní prostory..."),
("", "Assign Shortcut to Workspace", "Přiřadit zkratku pracovnímu prostoru"),
("window.panel", "Align", "Zarovnání"),
("window.panel", "Audio", "Zvuk"),
("window.panel", "Brushes", "Štětce"),
("window.panel", "Character", "Znak"),
("window.panel", "Content-Aware Fill", "Výplň podle obsahu"),
("window.panel", "Effects & Presets", "Efekty a přednastavení"),
("window.panel", "Essential Graphics", "Základní grafika"),
("window.panel", "Info", "Informace"),
("help.inAppTutorials", "Learn", "Výuka"),
("window.panel", "Lumetri Scopes", "Měřicí přístroje Lumetri"),
("window.panel", "Mask Interpolation", "Interpolace masek"),
("window.panel", "Media Browser", "Prohlížeč médií"),
("window.panel", "Metadata", "Metadata"),
("window.panel", "Motion Sketch", "Náčrt pohybu"),
("window.panel", "Paint", "Malování"),
("window.panel", "Paragraph", "Odstavec"),
("window.panel", "Preview", "Náhled"),
("window.panel", "Progress", "Průběh"),
("window.panel", "Properties", "Vlastnosti"),
("window.panel", "Script Console", "Konzole skriptů"),
("window.panel", "Smoother", "Vyhlazení"),
("window.panel", "Tools", "Nástroje"),
("window.panel", "Tracker", "Sledování"),
("window.panel", "Wiggler", "Generátor chvění"),
("window.panel", "Composition", "Kompozice"),
("window.panel", "Flowchart", "Vývojový diagram"),
("window.panel", "Footage", "Záznam"),
("window.panel", "Layer", "Vrstva"),
("window.panel", "Project", "Projekt"),
("window.panel", "Render Queue", "Fronta vykreslování"),
("window.panel", "Timeline", "Časová osa"),
("window.panel", "Create Nulls From Paths", "Vytvořit prázdné objekty z cest"),
("window.panel", "VR Comp Editor", "Editor kompozice VR"),
("", "Help", "Nápověda"),
("help.docs", "EffectCraft Help...", "Nápověda k EffectCraft..."),
("help.docs", "Scripting Help...", "Nápověda ke skriptování..."),
("help.docs", "Expression Reference...", "Referenční příručka výrazů..."),
("help.docs", "Effect Reference...", "Referenční příručka efektů..."),
("anim.browsePresets", "Animation Presets...", "Přednastavení animace..."),
("app.keyboardShortcuts", "Keyboard Shortcuts...", "Klávesové zkratky..."),
("help.inAppTutorials", "In-App Tutorials...", "Výukové lekce v aplikaci..."),
("help.onlineTutorials", "Online Tutorials...", "Výukové lekce online..."),
("help.systemReport", "System Compatibility Report...", "Zpráva o kompatibilitě systému..."),
("help.enableLogging", "Enable Logging", "Povolit protokolování"),
("help.revealLogFile", "Reveal Logging File", "Zobrazit soubor protokolu"),
("help.discord", "Join the ArtCraft Discord...", "Připojit se na Discord ArtCraft..."),
("help.reportIssue", "Provide Feedback...", "Poskytnout zpětnou vazbu..."),
("help.website", "ArtCraft Website", "Web ArtCraft"),
("help.appPage", "EffectCraft Home Page", "Domovská stránka EffectCraft"),
("help.github", "EffectCraft on GitHub", "EffectCraft na GitHubu"),
("file.openDemoProject", "Open Demo Project", "Otevřít ukázkový projekt"),
];
#[cfg(test)]
mod tests {
use super::*;
@@ -5902,6 +6551,86 @@ mod tests {
use serde_json::json;
use std::collections::BTreeSet;
#[test]
fn czech_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": "cs"})).unwrap();
let cs = crate::native_menu::build(&app);
assert_eq!(language(&app), "cs");
assert!(czech(&app));
assert_eq!(code("cs"), "cs");
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(&cs));
assert!(cs.items().iter().any(|i| i.command == "comp.new" && i.label == "Nová kompozice..."));
assert!(cs.items().iter().any(|i| i.command == "layer.newText" && i.label == "Text"));
assert!(cs.items().iter().any(|i| i.command == "keys.easyEase" && i.label == "Snadné zpomalení"));
assert!(cs.items().iter().any(|i| i.command == "file.openRecent" && i.label == "File.ecproj"));
for (source, translated) in [
("File", "Soubor"),
("Edit", "Úpravy"),
("Composition", "Kompozice"),
("Layer", "Vrstva"),
("Effect", "Efekt"),
("Animation", "Animace"),
("View", "Zobrazení"),
("Window", "Okno"),
("Help", "Nápověda"),
] {
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 };
assert_eq!(entry(&app, &panel, "Layer: File Čeština".into()), "Vrstva: File Čeština");
assert_eq!(
submenu(&app, "Assign Shortcut to Workspace", "Assign Shortcut to “File Čeština” Workspace".into()),
"Přiřadit zkratku pracovnímu prostoru „File Čeština“"
);
assert_eq!(submenu(&app, "Assign Shortcut to 3D View", "Assign Shortcut to “Top”".into()), "Přiřadit zkratku 3D zobrazení „Top“");
assert_eq!(submenu(&app, "Assign Shortcut to Workspace", "Assign Shortcut to Workspace".into()), "Přiřadit zkratku pracovnímu prostoru");
app.session.execute("prefs.set", json!({"key": "general.language", "value": "en"})).unwrap();
assert_eq!(crate::native_menu::build(&app), en);
}
#[test]
fn czech_undo_redo_keeps_history_labels_verbatim() {
let mut app = EffectcraftApp::new(effectcraft_engine::Session::default());
app.session.execute("prefs.set", json!({"key": "general.language", "value": "cs"})).unwrap();
let undo = MenuEntry { label: "Undo".into(), command: "edit.undo".into(), params: json!({}), shortcut: None };
let redo = MenuEntry { label: "Redo".into(), command: "edit.redo".into(), params: json!({}), shortcut: None };
assert_eq!(entry(&app, &undo, "Can't Undo".into()), "Není co vrátit");
assert_eq!(entry(&app, &redo, "Can't Redo".into()), "Není co zopakovat");
app.session.history.undo.push(("File Čeština".into(), app.session.project.clone()));
app.session.history.redo.push(("Text Čeština".into(), app.session.project.clone()));
assert_eq!(entry(&app, &undo, "Undo File Čeština".into()), "Zpět File Čeština");
assert_eq!(entry(&app, &redo, "Redo Text Čeština".into()), "Znovu Text Čeština");
}
#[test]
fn czech_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": "cs"})).unwrap();
for command in ["file.revealInFinder", "layer.revealInFinder"] {
for (source, translated) in [
("Reveal in Finder", "Zobrazit ve Finderu"),
("Reveal in Explorer", "Zobrazit v Průzkumníku"),
("Reveal in File Manager", "Zobrazit ve správci souborů"),
] {
let e = MenuEntry { label: source.into(), command: command.into(), params: json!({}), shortcut: None };
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");
}
}
fn keys(nodes: &[MenuNode], out: &mut BTreeSet<(String, String)>) {
for node in nodes {
match node {
@@ -5932,6 +6661,7 @@ mod tests {
let mut russian_keys = BTreeSet::new();
let mut french_keys = BTreeSet::new();
let mut german_keys = BTreeSet::new();
let mut czech_keys = BTreeSet::new();
for (catalog, unique) in [
(JAPANESE, &mut japanese_keys),
(SIMPLIFIED_CHINESE, &mut chinese_keys),
@@ -5942,6 +6672,7 @@ mod tests {
(RUSSIAN, &mut russian_keys),
(FRENCH, &mut french_keys),
(GERMAN, &mut german_keys),
(CZECH, &mut czech_keys),
] {
for (command, en, translated) in catalog {
let key = (command.to_string(), en.to_string());
@@ -5971,6 +6702,7 @@ mod tests {
assert_eq!(ukrainian_keys, russian_keys, "the languages must translate the same entries");
assert_eq!(russian_keys, french_keys, "the languages must translate the same entries");
assert_eq!(french_keys, german_keys, "the languages must translate the same entries");
assert_eq!(japanese_keys, czech_keys, "the languages must translate the same entries");
}
/// Exercise each engine spelling on every host: a macOS-only run must still catch a
@@ -6052,6 +6784,10 @@ mod tests {
(Some("es-419"), "es"),
(Some("pt-BR"), "pt-br"),
(Some("pt_PT.UTF-8"), "pt-br"),
(Some("cs"), "cs"),
(Some("cs-CZ"), "cs"),
(Some("cs_CZ.UTF-8"), "cs"),
(Some("CS_cz.UTF-8"), "cs"),
(Some("en-US"), "en"),
(Some("jv-ID"), "en"),
(Some("de-DE"), "en"),
@@ -6065,6 +6801,7 @@ mod tests {
assert_eq!(simplified(&app), system_language() == "zh-hans");
assert_eq!(traditional(&app), system_language() == "zh-hant");
assert_eq!(spanish(&app), system_language() == "es");
assert_eq!(czech(&app), system_language() == "cs");
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();
@@ -6084,7 +6821,9 @@ mod tests {
#[test]
fn every_translated_entry_keeps_the_english_shape() {
for (code, catalog) in [("zh-hans", SIMPLIFIED_CHINESE), ("zh-hant", TRADITIONAL_CHINESE), ("uk", UKRAINIAN), ("es", SPANISH), ("pt-br", PORTUGUESE)] {
for (code, catalog) in
[("zh-hans", SIMPLIFIED_CHINESE), ("zh-hant", TRADITIONAL_CHINESE), ("uk", UKRAINIAN), ("es", SPANISH), ("pt-br", PORTUGUESE), ("cs", CZECH)]
{
for (command, en, translated) in catalog {
assert_eq!(en.contains("..."), translated.contains("..."), "{code} {command} / {en}: {translated}");
let brackets = |s: &str| s.chars().filter(|c| *c == '(' || *c == ')').count();
+566 -3
View File
@@ -19,7 +19,7 @@ use std::fmt::Display;
use std::sync::OnceLock;
thread_local! {
/// The resolved interface language ("en", "ja", "zh-hans", "zh-hant", "uk", "pt-br"); "en" until the first
/// The resolved interface language ("en", "ja", "zh-hans", "zh-hant", "uk", "pt-br", "cs"); "en" until the first
/// frame sets it.
static CURRENT: Cell<&'static str> = const { Cell::new("en") };
}
@@ -45,12 +45,14 @@ fn catalog(language: &str) -> Option<&'static Index> {
static HANT: OnceLock<Index> = OnceLock::new();
static UK: OnceLock<Index> = OnceLock::new();
static PT_BR: OnceLock<Index> = OnceLock::new();
static CS: OnceLock<Index> = OnceLock::new();
let (index, rows) = match language {
"ja" => (&JA, JAPANESE),
"zh-hans" => (&HANS, SIMPLIFIED_CHINESE),
"zh-hant" => (&HANT, TRADITIONAL_CHINESE),
"uk" => (&UK, UKRAINIAN),
"pt-br" => (&PT_BR, PORTUGUESE),
"cs" => (&CS, CZECH),
_ => return None,
};
Some(index.get_or_init(|| rows.iter().copied().collect()))
@@ -2580,6 +2582,541 @@ const PORTUGUESE: &[(&str, &str)] = &[
("⚠ {} is used by:", "⚠ {} é usado por:"),
];
/// Czech (cs): original translations covering every row in the Chinese panel catalogs.
const CZECH: &[(&str, &str)] = &[
(" OK ", " OK "),
(" Delete ", " Odstranit "),
(" Open Auto-Save ", " Otevřít automatickou zálohu "),
("(missing)", "(chybí)"),
("360 View Orientation", "Orientace zobrazení 360°"),
("3:2 Pulldown: {}", "Převod 3:2 pulldown: {}"),
(
"A clean-room, open-source compositor for motion graphics and visual effects: native on macOS, Windows and Linux, and in the browser. Part of the ArtCraft family of creative apps.",
"Kompoziční nástroj s otevřeným zdrojovým kódem pro pohyblivou grafiku a vizuální efekty, vyvinutý nezávisle metodou clean-room. Běží nativně na macOS, Windows a Linuxu i v prohlížeči. Patří do rodiny kreativních aplikací ArtCraft.",
),
("About EffectCraft", "O aplikaci EffectCraft"),
("About...", "O aplikaci…"),
("Active", "Aktivní"),
("Active Camera", "Aktivní kamera"),
("Alpha", "Alfa"),
("Adapt Feature On Every Frame", "Přizpůsobovat sledovaný prvek v každém snímku"),
("Adaptive Sample Limit:", "Limit adaptivního vzorkování:"),
("Add Animator", "Přidat animátor"),
("Add Comment", "Přidat komentář"),
("Add Formatting", "Přidat formátování"),
("Add Group", "Přidat skupinu"),
("Add Mirror", "Přidat zrcadlo"),
("Add Selected As", "Přidat vybrané jako"),
("Add a comment", "Přidat komentář"),
("Add a shape, fill, stroke or path operation", "Přidat tvar, výplň, tah nebo operaci s cestou"),
("Add to Composition", "Přidat do kompozice"),
("Add to Favorites", "Přidat do oblíbených"),
("Add:", "Přidat:"),
("Adjust Exposure (stops)", "Upravit expozici (v expozičních stupních)"),
("Adjust composition duration to the time span of the selected layers", "Přizpůsobit délku kompozice časovému rozsahu vybraných vrstev"),
("Advanced 3D", "Pokročilé 3D"),
("Align Layers to:", "Zarovnat vrstvy k:"),
("All six face cameras turn together; the scene is not changed.", "Všech šest kamer snímajících stěny se otáčí společně; scéna se nemění."),
("Anchor:", "Kotevní bod:"),
("Aperture", "Clona"),
("Appearance Mode", "Režim vzhledu"),
("Appearance Mode: {}", "Režim vzhledu: {}"),
("Apply Dimensions:", "Použít rozměry:"),
("Apply Motion To:", "Použít pohyb na:"),
("Arrange", "Uspořádat"),
("Assign", "Přiřadit"),
("Auto", "Automaticky"),
("Auto-saves", "Automatické zálohy"),
("Back", "Zpět"),
("Background Color:", "Barva pozadí:"),
("Blend Mode:", "Režim prolnutí:"),
("Blending Mode", "Režim prolnutí"),
("Blur", "Rozostření"),
("Blur Level", "Úroveň rozostření"),
("Boundary", "Hranice"),
("Browser Storage", "Úložiště prohlížeče"),
("Browse…", "Procházet…"),
("Brush Dynamics", "Dynamika štětce"),
("Caching frames…", "Ukládání snímků do mezipaměti…"),
("Cancel", "Zrušit"),
("Casts Shadows", "Vrhat stíny"),
("Change Renderer…", "Změnit vykreslovací modul…"),
(
"Changing a shortcut creates a custom preset; the default stays as it is.",
"Změna zkratky vytvoří vlastní přednastavení; výchozí přednastavení zůstane zachované.",
),
("Channel", "Kanál"),
("Channel:", "Kanál:"),
("Chapter:", "Kapitola:"),
("Choose...", "Vybrat…"),
("Classic 3D", "Klasické 3D"),
("Clear", "Vymazat"),
("Clear list", "Vymazat seznam"),
("Click a key to see its commands.", "Kliknutím na klávesu zobrazíte její příkazy."),
("Click adds a point (½ height = no change)", "Kliknutím přidáte bod (½ výšky = beze změny)"),
("Click adds a point; drag one off to remove", "Kliknutím přidáte bod; přetažením mimo jej odstraníte"),
("Click to make this viewer active", "Kliknutím aktivujete tento prohlížeč"),
("Click to reveal the expression in the timeline", "Kliknutím zobrazíte výraz na časové ose"),
("Click to show the active composition here", "Kliknutím zde zobrazíte aktivní kompozici"),
("Click, then click in the Composition panel", "Klikněte sem a poté do panelu Kompozice"),
("Clone Options", "Možnosti klonování"),
("Clone Source Overlay:", "Překrytí zdroje klonování:"),
("Close", "Zavřít"),
("Close Panel", "Zavřít panel"),
("Close tutorial", "Zavřít výukovou lekci"),
("Color", "Barva"),
("Color Depth: {}", "Barevná hloubka: {}"),
("Color:", "Barva:"),
("Colour map", "Barevná mapa"),
("Columns", "Sloupce"),
("Comment:", "Komentář:"),
("Community", "Komunita"),
("Composition", "Kompozice"),
("Composition Mini-Flowchart", "Malý vývojový diagram kompozice"),
("Composition Name:", "Název kompozice:"),
("Composition Settings ▸ 3D Renderer", "Nastavení kompozice ▸ 3D vykreslovací modul"),
("Composition Settings…", "Nastavení kompozice…"),
("Composition marker bin: drag a marker to the time ruler", "Zásobník značek kompozice: přetáhněte značku na časové pravítko"),
("Cone Angle", "Úhel kužele"),
("Cone Feather", "Prolnutí okrajů kužele"),
("Constrain Proportions", "Zachovat proporce"),
("Continuous (Lock Outgoing to Incoming)", "Spojitá (svázat výstupní tečnu se vstupní)"),
("Cue Point", "Bod události"),
("Current Render", "Aktuální vykreslování"),
("Dark", "Tmavý"),
("Dark Theme", "Tmavý motiv"),
("Darker", "Tmavší"),
("Default Output:", "Výchozí výstup:"),
("Default: {}", "Výchozí: {}"),
("Defaults", "Výchozí hodnoty"),
("Delete", "Odstranit"),
("Delete Selected Points", "Odstranit vybrané body"),
("Delete selected project items", "Odstranit vybrané položky projektu"),
("Delete this template", "Odstranit tuto šablonu"),
("Depth of Field", "Hloubka ostrosti"),
("Discord", "Discord"),
("Distribute Layers:", "Rozmístit vrstvy:"),
("Don't Recover", "Neobnovovat"),
("Don't Save", "Neukládat"),
("Double-click a layer to open it in the Layer panel", "Dvojklikem otevřete vrstvu v panelu Vrstva"),
("Double-click footage in the Project panel to open it here", "Dvojklikem na záznam v panelu Projekt jej otevřete zde"),
("Double-click to edit the comment", "Dvojklikem upravíte komentář"),
("Download", "Stáhnout"),
(
"Drag properties here from the timeline,\nor use Animation > Add Property to Essential Graphics.",
"Přetáhněte sem vlastnosti z časové osy,\nnebo použijte Animace > Přidat vlastnost do základní grafiky.",
),
("Drag to change", "Tažením změníte hodnotu"),
("Drag to create a guide", "Tažením vytvoříte vodítko"),
("Drag to slip the source", "Tažením posunete zdroj v čase"),
("Drop Frame", "Vynechávat čísla snímků"),
("Duplicate", "Duplikovat"),
("Duration:", "Délka trvání:"),
("Edit Gradient…", "Upravit přechod…"),
("Edit Target: {}", "Upravit cíl: {}"),
("Edit in the Timeline", "Upravit na časové ose"),
("EffectCraft didn't quit normally last time.", "EffectCraft nebyl při posledním použití ukončen běžným způsobem."),
("Effects & Presets options", "Možnosti efektů a přednastavení"),
("Effects: {}", "Efekty: {}"),
("Empty folder", "Prázdná složka"),
("Enable Depth of Field", "Povolit hloubku ostrosti"),
("Enable Expression", "Povolit výraz"),
("Enhance", "Vylepšit"),
("Essential Properties — {}", "Základní vlastnosti — {}"),
("Event", "Událost"),
("Export Template…", "Exportovat šablonu…"),
("Export...", "Exportovat…"),
("Expression Language Menu", "Nabídka jazyka výrazů"),
("Expression pick whip: drag onto a property", "Propojovací nástroj výrazů: přetáhněte na vlastnost"),
("Expression:", "Výraz:"),
("Eyedropper: click, then click in the Composition panel", "Kapátko: klikněte sem a poté do panelu Kompozice"),
("Falloff", "Útlum"),
("Falloff Distance", "Vzdálenost útlumu"),
("Favorites", "Oblíbené"),
("Field Render: {}", "Vykreslování půlsnímků: {}"),
("Figures", "Číslice"),
("Fill Target", "Cíl výplně"),
("Finished", "Dokončeno"),
("Flowchart: {}", "Vývojový diagram: {}"),
("Focus Distance", "Vzdálenost zaostření"),
("Follow Feature Rotation and Scale", "Sledovat otočení a měřítko prvku"),
("Footage: {}", "Záznam: {}"),
("Format: {}", "Formát: {}"),
("Frame Aspect Ratio: {}", "Poměr stran snímku: {}"),
("Frame Blending: {}", "Prolnutí snímků: {}"),
("Frame Rate:", "Snímková frekvence:"),
("Frame Render Time {}ms", "Čas vykreslení snímku {}ms"),
("Frame Target:", "Cílový rámec:"),
("Freeze", "Zmrazit"),
("Grab bag", "Mozaika"),
("Grid", "Mřížka"),
("Guide Layers: {}", "Pomocné vrstvy: {}"),
("Guides", "Vodítka"),
("Height:", "Výška:"),
("Hide This", "Skrýt toto"),
("Histogram", "Histogram"),
("Hold In Place", "Pevný časový bod"),
("Home", "Domů"),
("If Confidence is Below", "Pokud je spolehlivost nižší než"),
("Import", "Importovat"),
("Import and Add to Composition", "Importovat a přidat do kompozice"),
("Import...", "Importovat…"),
("Imported media", "Importovaná média"),
("Influence:", "Vliv:"),
("Install from File…", "Nainstalovat ze souboru…"),
("Intensity", "Intenzita"),
("Inverted", "Invertovaná"),
("Join the ArtCraft community on Discord", "Připojit se ke komunitě ArtCraft na Discordu"),
("Key: {}", "Klávesa: {}"),
("LEARN", "VÝUKA"),
("Label", "Štítek"),
("Label Colors and Names:", "Barvy a názvy štítků:"),
("Label:", "Štítek:"),
("Latest auto-save: {}", "Nejnovější automatická záloha: {}"),
("Layer", "Vrstva"),
("Layer controls", "Ovládací prvky vrstvy"),
("Layer {}", "Vrstva {}"),
("Layer:", "Vrstva:"),
("Layer: {}", "Vrstva: {}"),
("Learn", "Výuka"),
("Leave all attributes in \"{}\"", "Ponechat všechny atributy v „{}“"),
("Licence: {}", "Licence: {}"),
("Ligatures", "Ligatury"),
("Light", "Světlý"),
("Light Theme", "Světlý motiv"),
("Light Type", "Typ světla"),
("Lighter", "Světlejší"),
("Link Selected Property", "Propojit vybranou vlastnost"),
("Lock Aspect Ratio to {}", "Zamknout poměr stran na {}"),
("Lock to Zoom", "Svázat s přiblížením"),
("Locked: {} — {}", "Zamknuto: {} — {}"),
("Log:", "Protokol:"),
("Loop (Trace Path)", "Smyčka (sledovat cestu)"),
("MIT OR Apache-2.0 • Fonts: Inter, JetBrains Mono (OFL)", "MIT OR Apache-2.0 • Písma: Inter, JetBrains Mono (OFL)"),
("Magnification ratio popup", "Nabídka míry přiblížení"),
("Make Comp Size", "Nastavit velikost kompozice"),
("Masks", "Masky"),
("Maximize Panel", "Maximalizovat panel"),
("Media Replacement", "Nahrazení médií"),
("Mesh:", "Síť:"),
("Diameter:", "Průměr:"),
("Method Used: {} Average Error: {} pixels", "Použitá metoda: {} Průměrná chyba: {} px"),
("Models folder: {}", "Složka modelů: {}"),
("Modifiers:", "Modifikátory:"),
("More", "Další"),
("More ArtCraft apps", "Další aplikace ArtCraft"),
("More tutorials", "Další výukové lekce"),
("Motion Blur", "Rozostření pohybem"),
("Motion Blur: {}", "Rozostření pohybem: {}"),
("Motion Sketch: drag to record", "Náčrt pohybu: tažením zaznamenáte pohyb"),
("Move Down", "Posunout dolů"),
("Move Up", "Posunout nahoru"),
("Move to Project Root", "Přesunout do kořene projektu"),
("Name", "Název"),
("Name:", "Název:"),
("Navigation", "Navigace"),
("New", "Nový"),
("New Comp from Selection", "Nová kompozice z výběru"),
("New Duration:", "Nová délka trvání:"),
("New composition name:", "Název nové kompozice:"),
("New from Render Queue item:", "Nová šablona z položky fronty vykreslování:"),
("New from Template", "Nový ze šablony"),
("Next", "Další"),
("Nice work. Pick another tutorial on the Home screen's Learn tab.", "Hotovo. Vyberte si další lekci na kartě Výuka na domovské obrazovce."),
(
"No VR environments yet. Create one with Composition ▸ VR ▸ Create VR Environment…",
"Zatím nejsou žádná prostředí VR. Vytvořte je přes Kompozice ▸ VR ▸ Vytvořit prostředí VR…",
),
("No audio layer selected", "Není vybrána zvuková vrstva"),
("No background jobs running", "Na pozadí neběží žádné úlohy"),
("No composition markers", "Kompozice nemá žádné značky"),
("No contributor data was built into this copy.", "Tato sestava neobsahuje údaje o přispěvatelích."),
("No device list from this host; the system default output is used.", "Hostitel neposkytuje seznam zařízení; používá se výchozí systémový výstup."),
("No layer selected", "Není vybrána vrstva"),
("No matching effects or presets", "Žádné odpovídající efekty ani přednastavení"),
("No matching fonts", "Žádná odpovídající písma"),
("No model credits were built into this copy.", "Tato sestava neobsahuje údaje o použitých modelech."),
("No nested compositions", "Žádné vnořené kompozice"),
("No shortcut", "Bez zkratky"),
("No unlocked layer selected", "Není vybrána odemknutá vrstva"),
("No video", "Žádné video"),
("None", "Žádné"),
("Not applied: tick it in the list to add it.", "Nepoužito: pro přidání položku zaškrtněte v seznamu."),
("Not assigned", "Nepřiřazeno"),
("Note: Shadows are only cast from layers with Cast Shadows enabled.", "Poznámka: Stíny vrhají pouze vrstvy s povolenou volbou Vrhat stíny."),
("Notify", "Upozornit"),
("OK", "OK"),
("Offset:", "Posun:"),
("On ({}) stop:", "Při zastavení ({}):"),
("One-Node Camera", "Jednouzlová kamera"),
("Opacity:", "Krytí:"),
("Open Composition", "Otevřít kompozici"),
("Open Last Saved Project", "Otevřít poslední uložený projekt"),
("Open New Composition", "Otevřít novou kompozici"),
("Open Output", "Otevřít výstup"),
("Open a composition to build Essential Graphics", "Otevřete kompozici pro sestavení základní grafiky"),
("Open a composition to see its scopes", "Otevřete kompozici pro zobrazení měřicích přístrojů"),
("Open a composition to track motion.", "Otevřete kompozici pro sledování pohybu."),
("Opus Tuning: {}", "Ladění Opus: {}"),
("Original Duration:", "Původní délka trvání:"),
("Output Cycle: {}", "Cyklus výstupu: {}"),
("Output To:", "Výstup do:"),
("Overlay", "Překrytí"),
("Parameter Name:", "Název parametru:"),
("Parent pick whip: drag onto a layer", "Propojovací nástroj nadřazené vrstvy: přetáhněte na vrstvu"),
("Pixel Aspect Ratio:", "Poměr stran pixelů:"),
("Playing on Video Preview", "Přehrávání ve videonáhledu"),
("Post-Render Action: {}", "Akce po vykreslení: {}"),
("Preserve frame rate when nested or in render queue", "Zachovat snímkovou frekvenci při vnoření nebo ve frontě vykreslování"),
("Preserve resolution when nested", "Zachovat rozlišení při vnoření"),
("Preset", "Přednastavení"),
("Preset:", "Přednastavení:"),
("Presets", "Přednastavení"),
("Previous", "Předchozí"),
("Primary:", "Hlavní kompozice:"),
("Process Before Match", "Předzpracování před hledáním shody"),
("Profile: {}", "Profil: {}"),
(
"Project color depth: click to cycle 8/16/32 bpc, Alt-click for Project Settings",
"Barevná hloubka projektu: kliknutím přepnete 8/16/32 bpc, kliknutím s Alt otevřete Nastavení projektu",
),
("Project: {}", "Projekt: {}"),
("Projects", "Projekty"),
("Property pick whip: drag onto a property", "Propojovací nástroj vlastností: přetáhněte na vlastnost"),
("Protected Region", "Chráněná oblast"),
("Proxy Use: {}", "Použití zástupných souborů: {}"),
("Push All to Comp", "Přenést vše do kompozice"),
("RGB", "RGB"),
("Radius", "Poloměr"),
("Rate Control: {}", "Řízení datového toku: {}"),
("Recent", "Nedávné"),
("Recording", "Záznam pohybu"),
("Remove", "Odstranit"),
("Rename", "Přejmenovat"),
("Render: {} ms • UI {} fps{}", "Vykreslení: {} ms • UI {} fps{}"),
("Renderer:", "Vykreslovací modul:"),
("Request Persistent Storage", "Požádat o trvalé úložiště"),
("Reset", "Obnovit"),
("Reset Labels", "Obnovit štítky"),
("Reset Preset", "Obnovit přednastavení"),
("Reset to Default", "Obnovit výchozí hodnoty"),
("Reset to Saved Layout", "Obnovit uložené rozložení"),
("Resolution/Down Sample Factor Popup", "Nabídka rozlišení a míry podvzorkování"),
("Restore Panel Size", "Obnovit velikost panelu"),
("Reverse the order", "Obrátit pořadí"),
("Revert All", "Vrátit všechny změny"),
("Roman Hanging Punctuation", "Předsazená interpunkce latinky"),
("Roving:", "Plovoucí v čase:"),
("Ruler zero point (drag to move, double-click to reset)", "Nulový bod pravítka (tažením posunete, dvojklikem obnovíte)"),
("Rulers", "Pravítka"),
("Run", "Spustit"),
("Sample Format: {}", "Formát vzorků: {}"),
("Samples Per Frame:", "Vzorků na snímek:"),
("Save from #{}", "Uložit z #{}"),
("Saved {}", "Uloženo {}"),
("Script… (⌘/Ctrl+Enter runs)", "Skript… (⌘/Ctrl+Enter spustí)"),
("Search commands or shortcuts", "Hledat příkazy nebo zkratky"),
("Select", "Vybrat"),
("Select a command to change its shortcut.", "Vyberte příkaz pro změnu jeho zkratky."),
("Select a layer to see its effects", "Vyberte vrstvu pro zobrazení jejích efektů"),
("Select a layer to see its properties", "Vyberte vrstvu pro zobrazení jejích vlastností"),
("({}) Selected Objects", "Vybrané objekty ({})"),
(
"Select a layer with a mask or shape path (or the path property), or Puppet pins.",
"Vyberte vrstvu s cestou masky či tvaru (nebo vlastnost cesty), případně čepy nástroje Loutka.",
),
("Select a text layer", "Vyberte textovou vrstvu"),
("Select an item in the Project panel", "Vyberte položku v panelu Projekt"),
("Select animated properties to show them in the Graph Editor", "Vyberte animované vlastnosti pro zobrazení v editoru grafů"),
(
"Select the leader pin, then Shift-click the pins that should trail it (hair, cloth, tails)",
"Vyberte řídicí čep a potom se Shiftem klikněte na čepy, které jej mají následovat (vlasy, látka, ocasy)",
),
("Set Ground Plane and Origin", "Nastavit základní rovinu a počátek"),
("Set Paint Colors to Black and White (D)", "Nastavit barvy malování na černou a bílou (D)"),
("Settings", "Nastavení"),
("Settings Name:", "Název nastavení:"),
("Shadow Darkness", "Tmavost stínu"),
("Shadow Diffusion", "Rozptýlení stínu"),
("Shadows", "Stíny"),
("Shape…", "Tvar…"),
("Show", "Zobrazit"),
("Show Layer Name", "Zobrazit název vrstvy"),
("Show Source Name", "Zobrazit název zdroje"),
("Show me", "Ukázat postup"),
("Show:", "Zobrazit:"),
("Shutter Angle:", "Úhel závěrky:"),
("Shutter Phase:", "Fáze závěrky:"),
("Size", "Velikost"),
("Skip", "Přeskočit"),
("Snapping", "Přichytávání"),
("Snapping options", "Možnosti přichytávání"),
("Snapshot", "Snímek náhledu"),
("Solo Supported Properties", "Zobrazit pouze podporované vlastnosti"),
("Solo Switches: {}", "Přepínače sólo: {}"),
("Sort", "Seřadit"),
("Spacing:", "Rozestupy:"),
("Spatial Interpolation:", "Prostorová interpolace:"),
("Speed:", "Rychlost:"),
("Start Timecode:", "Počáteční časový kód:"),
("Start: {} Duration: {}", "Začátek: {} Délka trvání: {}"),
("Step {} of {}: {}", "Krok {} z {}: {}"),
("Stop", "Zastavit"),
("Stop {} at {}°", "Bod přechodu {} na {}°"),
("Stored in: {}", "Uloženo v: {}"),
("Stretch", "Roztažení"),
("Stretch Factor:", "Koeficient roztažení:"),
("Stylistic Sets", "Stylistické sady"),
("Subpixel Positioning", "Subpixelové umístění"),
("Swap Paint Colors (X)", "Prohodit barvy malování (X)"),
("Sync with System", "Synchronizovat se systémem"),
("System Default", "Výchozí systémové"),
("Table", "Tabulka"),
("Template name", "Název šablony"),
("Template: {}\n{}", "Šablona: {}\n{}"),
("Temporal Interpolation:", "Časová interpolace:"),
("The Media Browser is not available here (use File ▸ Import)", "Prohlížeč médií zde není k dispozici (použijte Soubor ▸ Importovat)"),
("The OpenEXR layer shown in red, green, blue and alpha", "Vrstva OpenEXR zobrazená v červeném, zeleném, modrém a alfa kanálu"),
("The render queue is empty.", "Fronta vykreslování je prázdná."),
("This ScriptUI panel has closed", "Tento panel ScriptUI byl zavřen"),
("This change will create a new solid for this layer.", "Tato změna vytvoří pro tuto vrstvu novou plnou vrstvu."),
("Time", "Čas"),
("Time Stretch…", "Roztažení času…"),
("Time:", "Čas:"),
("Time: {}", "Čas: {}"),
("Title/Action Safe", "Bezpečné oblasti titulků a akce"),
("Title/action safe", "Bezpečné oblasti titulků a akce"),
("Toggle Switches / Modes", "Přepnout přepínače / režimy"),
("Track Name:", "Název stopy:"),
(
"Trained models are available in the desktop app; the browser uses the classic engine.",
"Trénované modely jsou dostupné v desktopové aplikaci; prohlížeč používá klasické zpracování.",
),
("Transform", "Transformace"),
("Transparency grid", "Mřížka průhlednosti"),
("Tutorial complete", "Výuková lekce dokončena"),
("Two-Node Camera", "Dvouzlová kamera"),
("Type", "Typ"),
("Type a command or effect…", "Zadejte příkaz nebo efekt…"),
("URL:", "URL:"),
("Undock Panel", "Odpojit panel"),
("Unfreeze", "Zrušit zmrazení"),
("Unlink {}", "Odpojit {}"),
(
"Use this option to place the currently selected layers together into a new intermediate composition.",
"Tato volba vloží aktuálně vybrané vrstvy společně do nové mezilehlé kompozice.",
),
("VR Environments", "Prostředí VR"),
("Value:", "Hodnota:"),
("Variable Font Axes", "Osy variabilního písma"),
("Video Codec: {}", "Video kodek: {}"),
("View:", "Zobrazení:"),
("Welcome to EffectCraft", "Vítejte v EffectCraft"),
("Width:", "Šířka:"),
("You can undo this.", "Tuto akci lze vrátit zpět."),
("Your changes will be lost if you don't save them.", "Pokud změny neuložíte, budou ztraceny."),
("Zoom", "Přiblížení"),
("built-in", "vestavěné"),
("frames per second", "snímků za sekundu"),
("template name", "název šablony"),
("{} contributors · {} commits", "{} přispěvatelů · {} commitů"),
("{} x {}, {}MB per 8bpc frame", "{} x {}, {}MB na snímek s 8bpc"),
("{} — coming soon", "{} — již brzy"),
("{} — double-click to open, {}-click to reveal", "{} — dvojklikem otevřete, kliknutím s {} zobrazíte umístění"),
("⌘/Ctrl-drag a pin to record its motion", "Tažením čepu s ⌘/Ctrl zaznamenáte jeho pohyb"),
("▣ {}", "▣ {}"),
("⚠ {} is used by:", "⚠ {} používají:"),
("3D Reference Axes", "Referenční osy 3D"),
("Affect all layers that use this solid", "Ovlivnit všechny vrstvy používající tuto plnou vrstvu"),
("Choose grid and guide options", "Vybrat možnosti mřížky a vodítek"),
("Colorize", "Kolorovat"),
("Custom", "Vlastní"),
("Custom...", "Vlastní…"),
("Fit", "Přizpůsobit"),
("Fit up to 100%", "Přizpůsobit nejvýše do 100 %"),
("Full", "Plné"),
("Half", "Poloviční"),
("Only this layer uses this solid.", "Tuto plnou vrstvu používá pouze tato vrstva."),
("Proportional Grid", "Proporcionální mřížka"),
("Quarter", "Čtvrtinové"),
("Region of Interest", "Oblast zájmu"),
("Reset Exposure", "Obnovit expozici"),
("Show Channel and Color Management Settings", "Zobrazit nastavení kanálů a správy barev"),
("Show Snapshot (hold)", "Zobrazit snímek náhledu (podržet)"),
("Take Snapshot", "Pořídit snímek náhledu"),
("Third", "Třetinové"),
("Toggle Mask and Shape Path Visibility", "Přepnout viditelnost cest masek a tvarů"),
("Toggle Transparency Grid", "Přepnout mřížku průhlednosti"),
("16 bits per channel", "16 bitů na kanál"),
("32 bits per channel (float)", "32 bitů na kanál (plovoucí čárka)"),
("8 bits per channel", "8 bitů na kanál"),
("Adaptive Resolution", "Adaptivní rozlišení"),
("Adobe-style built-in", "Vestavěné ve stylu Adobe"),
("Blue", "Modrý"),
("Current Settings", "Aktuální nastavení"),
("Disable Per-character 3D", "Zakázat 3D pro jednotlivé znaky"),
("Draft", "Pracovní"),
("Enable Per-character 3D", "Povolit 3D pro jednotlivé znaky"),
("Fast Draft", "Rychlé pracovní"),
("Fast Previews (Draft 3D, Faster Effects)", "Rychlé náhledy (pracovní 3D, rychlejší efekty)"),
("Green", "Zelený"),
("Import Image Sequence", "Importovat sekvenci obrázků"),
("Import PDF / Illustrator File", "Importovat soubor PDF / Illustrator"),
("Import Photoshop File", "Importovat soubor Photoshop"),
("Interpret Unlabeled Alpha As", "Interpretovat neoznačenou alfu jako"),
("Join the ArtCraft Discord", "Připojit se na Discord ArtCraft"),
("Mercury GPU Acceleration ({})", "GPU akcelerace Mercury ({})"),
("Mercury Software Only", "Pouze softwarové zpracování Mercury"),
("OCIO (built-in ACES config)", "OCIO (vestavěná konfigurace ACES)"),
("Off (Final Quality)", "Vypnuto (finální kvalita)"),
("OpenGL (compatibility)", "OpenGL (kompatibilita)"),
("Opus Bitrate: {} kbps", "Datový tok Opus: {} kbps"),
("RGB Straight", "RGB bez přednásobení"),
("Red", "Červený"),
("Tone map", "Mapování tónů"),
("Use In-Window Menu Bar on macOS", "Použít nabídku v okně na macOS"),
("Wireframe", "Drátový model"),
("sRGB IEC61966-2.1 (default)", "sRGB IEC61966-2.1 (výchozí)"),
("New Project", "Nový projekt"),
("Open Project…", "Otevřít projekt…"),
("Templates", "Šablony"),
("EffectCraft home page", "Domovská stránka EffectCraft"),
("EffectCraft on GitHub", "EffectCraft na GitHubu"),
("Motion graphics and visual effects · version {}", "Pohyblivá grafika a vizuální efekty · verze {}"),
("New Composition", "Nová kompozice"),
("Open Demo Project", "Otevřít ukázkový projekt"),
("Import Footage…", "Importovat záznam…"),
("Filter recent files", "Filtrovat nedávné soubory"),
("NAME", "NÁZEV"),
("OPENED", "OTEVŘENO"),
("SIZE", "VELIKOST"),
("KIND", "DRUH"),
("Your recent files will show here", "Zde se zobrazí vaše nedávné soubory"),
("Create a new project, or open the demo project to look around.", "Vytvořte nový projekt nebo otevřete ukázkový projekt a prozkoumejte aplikaci."),
("No recent files match the filter", "Filtru neodpovídají žádné nedávné soubory"),
("Try another name or folder.", "Zkuste jiný název nebo složku."),
("Just now", "Právě teď"),
("Yesterday", "Včera"),
("{} minute ago", "Před {} minutou"),
("{} minutes ago", "Před {} minutami"),
("{} hour ago", "Před {} hodinou"),
("{} hours ago", "Před {} hodinami"),
("{} day ago", "Před {} dnem"),
("{} days ago", "Před {} dny"),
("EffectCraft project", "Projekt EffectCraft"),
("After Effects project", "Projekt After Effects"),
("Lottie animation", "Animace Lottie"),
("Project", "Projekt"),
("Click above the bar to add an opacity stop, below it to add a color stop.", "Kliknutím nad pruh přidáte bod krytí, kliknutím pod něj bod barvy."),
("Gradient Editor", "Editor přechodu"),
("Location:", "Umístění:"),
(
"These adjacent keyframes cannot interpolate because their stop counts differ.",
"Tyto sousední klíčové snímky nelze interpolovat, protože mají různý počet bodů přechodu.",
),
("Variable fonts only", "Jen proměnná písma"),
];
#[cfg(test)]
mod tests {
use super::*;
@@ -2674,15 +3211,41 @@ mod tests {
fn catalogs() -> Vec<(&'static str, &'static str)> {
JAPANESE
.iter()
.copied()
.chain(SIMPLIFIED_CHINESE.iter().copied())
.chain(TRADITIONAL_CHINESE.iter().copied())
.chain(UKRAINIAN.iter().copied())
.chain(PORTUGUESE.iter().copied())
.chain(CZECH.iter().copied())
.collect()
}
#[test]
fn czech_panels_translate_and_keep_project_content_and_argument_order() {
set_current("cs");
assert_eq!(tr("Composition Name:"), "Název kompozice:");
assert_eq!(tr("Cancel"), "Zrušit");
assert_eq!(tr("my layer.mp4"), "my layer.mp4");
assert_eq!(tr_args("Proxy Use: {}", &[&"Best"]), "Použití zástupných souborů: Best");
assert_eq!(tr_args("Step {} of {}: {}", &[&1, &3, &"Colour"]), "Krok 1 z 3: Colour");
assert_eq!(tr_args("Template: {}\n{}", &[&"Title", &"My description"]), "Šablona: Title\nMy description");
assert_eq!(tr_args("Leave all attributes in \"{}\"", &[&"File Čeština"]), "Ponechat všechny atributy v „File Čeština“");
assert_eq!(
tr_args("{} — double-click to open, {}-click to reveal", &[&"File.ecproj", &"Alt"]),
"File.ecproj — dvojklikem otevřete, kliknutím s Alt zobrazíte umístění"
);
assert_eq!(tr_args("Proxy Use: {}", &[]), "Použití zástupných souborů: ");
set_current("en");
assert_eq!(tr("Composition Name:"), "Composition Name:");
}
/// A row that translates nothing, repeats a source string, or changes the number of values the
/// English source carries is a bug in the catalog itself.
#[test]
@@ -2690,8 +3253,8 @@ mod tests {
let hans: Vec<&str> = SIMPLIFIED_CHINESE.iter().map(|(en, _)| *en).collect();
let hant: Vec<&str> = TRADITIONAL_CHINESE.iter().map(|(en, _)| *en).collect();
assert_eq!(hans, hant, "the two Chinese catalogs list different source strings");
// Japanese and Ukrainian may lag the Chinese catalogs: a missing row falls back to English.
for (name, cat) in [("Japanese", JAPANESE), ("Ukrainian", UKRAINIAN), ("Brazilian Portuguese", PORTUGUESE)] {
// Japanese, Ukrainian and Czech may lag the Chinese catalogs: a missing row falls back to English.
for (name, cat) in [("Japanese", JAPANESE), ("Ukrainian", UKRAINIAN), ("Brazilian Portuguese", PORTUGUESE), ("Czech", CZECH)] {
let extra: Vec<&str> = cat.iter().map(|(en, _)| *en).filter(|en| !hans.contains(en)).collect();
assert!(extra.is_empty(), "the {name} catalog lists source strings the Chinese ones don't: {extra:?}");
}
+23
View File
@@ -196,6 +196,8 @@ pub fn build(app: &EffectcraftApp) -> NativeMenu {
"Servicios"
} else if crate::i18n::brazilian_portuguese(app) {
"Serviços"
} else if crate::i18n::czech(app) {
"Služby"
} else {
"Services"
}
@@ -457,6 +459,27 @@ mod tests {
assert_eq!(translated, ["Служби", "Приховати EffectCraft", "Приховати решту", "Показати все"]);
}
#[test]
fn czech_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": "cs"})).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, ["Služby", "Skrýt EffectCraft", "Skrýt ostatní", "Zobrazit vše"]);
}
#[test]
fn hide_items_are_predefined_on_macos() {
let spec = build(&app());
+4 -3
View File
@@ -3494,9 +3494,7 @@ fn prop_menu(
item(ui, "essentialGraphics", "Add Property to Essential Graphics", false, "essential.addProperty", json!({"comp": comp.0, "layer": l, "prop": uid}));
}
/// A layer row's or bar's context menu. As in After Effects, right-clicking a layer that is part
/// of the selection keeps the selection and the menu acts on all of it; right-clicking an
/// unselected layer selects only that layer.
/// Whether `layer` shows vector footage (SVG, PDF, AI, EPS).
pub(crate) fn vector_footage_layer(project: &effectcraft_engine::project::Project, layer: &Layer) -> bool {
layer
.source
@@ -3518,6 +3516,9 @@ fn collapse_applies(layer: &Layer, project: &effectcraft_engine::project::Projec
}
}
/// A layer row's or bar's context menu. As in After Effects, right-clicking a layer that is part
/// of the selection keeps the selection and the menu acts on all of it; right-clicking an
/// unselected layer selects only that layer.
fn layer_context_menu(resp: &egui::Response, comp: &Comp, layer: &Layer, selected: &[LayerId], vector: bool, actions: &mut Vec<(String, serde_json::Value)>) {
let in_selection = selected.contains(&layer.id);
if resp.secondary_clicked() && !in_selection && !layer.switches.locked {
+3 -2
View File
@@ -22,7 +22,7 @@ interface; Arabic and Hebrew text *in layers* is supported through its Middle Ea
**618** fixed entries. The generated Effect menu (effect names) is deliberately left in English.
- **Panels, dialogs, buttons, tooltips:** `crates/ui-egui/src/i18n/ui.rs`, keyed by the English
source string, with English fallback. Catalogs exist for Japanese, Simplified and Traditional
Chinese and Ukrainian.
Chinese, Ukrainian and Czech.
- **Not translated anywhere yet:** effect names and their ≈ 1,650 parameter names
(`crates/effects`), engine-generated text (property names, errors, undo labels), the Home
screen's unwrapped literals (#574), Learn tutorials and documentation.
@@ -60,12 +60,13 @@ the true percentages are slightly lower.
| Korean | `ko` | 0 | — | No Hangul fallback probe: boxes on macOS (#599) | 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 (2):
Other languages EffectCraft ships (3):
| Language | Code | UI strings translated | Status | To `full` |
|---|---|---|---|---|
| Traditional Chinese | `zh-hant` | 1,081 (≈ 28%): menus 618/618, panels 463 | partial | 6–9 h + review |
| Ukrainian | `uk` | 1,113 (≈ 29%): menus 618/618, panels 495/496 | partial | 6–9 h + review |
| Czech | `cs` | 1,114 catalog entries (≈ 29%): menus 618/618, panels 496/496 (current Chinese catalog); added after the measurement above | All 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 |
After Effects also ships Italian and Russian, which EffectCraft does not (8–12 h each).