Merge #1843: i18n: Georgian (ka) interface language (@devius)

This commit is contained in:
aiongg
2026-10-23 21:45:52 +00:00
13 changed files with 2084 additions and 20 deletions
+2 -1
View File
@@ -97,7 +97,7 @@ UI strings translated out of ≈ 3,900 (detail: [localization-parity.md](docs/lo
| Korean | none | 0% |
| Vietnamese | none | 0% |
Also shipped: Traditional Chinese (partial, 29%), Ukrainian (partial, 29%), Czech (partial, 29%) and Russian (menus only, 16%). No language has had
Also shipped: Traditional Chinese (partial, 29%), Ukrainian (partial, 29%), Czech (partial, 29%), Georgian (partial, 38%; native-speaker reviewed) and Russian (menus only, 16%). No other language has had
native-speaker review.
## Upcoming
@@ -135,6 +135,7 @@ Come tell us what matters most to you on [Discord](https://discord.gg/artcraft).
follow the shared standard: `docs/parity.md` became `docs/target-app-parity.md`; new
`docs/roadmap.md`, `localization-parity.md`, `file-format-parity.md`, `hardware-parity.md`,
`ui-parity.md`, `effects-parity.md` and `scripting-parity.md`.
- 2026-10-14: Georgian (`ka`): every menu row, every panel-catalog row the Chinese catalogs have plus 195 Georgian-only ones, and the effect names and categories; Match System for `ka` / `ka-GE` / `ka_GE.UTF-8` locales. Reviewed by a native speaker.
- 2026-10-10: Spanish (#460) and Brazilian Portuguese (#217) menu translations.
- 2026-10-10: Japanese now translates the interface below the menu bar too: `crates/ui-egui/src/i18n/ui.rs` has a Japanese table with the same 396 rows as the Chinese ones (panels, dialogs, buttons and tooltips; the shape test keeps the three catalogs listing the same source strings). Menus were already Japanese.
- 2026-10-09: Ukrainian now covers all 396 current panel-catalog strings, including dialogs, buttons and tooltips, alongside its menu translation. The catalog keeps the same source keys and placeholder counts as the Chinese catalogs; missing or engine-generated text still falls back to English.
+1
View File
@@ -36,6 +36,7 @@ pub const LANGUAGES: &[(&str, &str)] = &[
("Français", "fr"),
("Deutsch", "de"),
("Čeština", "cs"),
("ქართული", "ka"),
];
/// Settings ▸ Startup & Repair ▸ Window Graphics: (label, `startup.windowGraphics` value).
+6
View File
@@ -1064,6 +1064,12 @@ fn interface_language_is_validated_persisted_and_backward_compatible() {
cs.load_settings();
assert_eq!(cs.prefs.general.language, "cs");
assert_eq!(Prefs::from_json(r#"{"general":{"language":"cs"}}"#).general.language, "cs");
// Georgian too.
assert!(crate::prefs::LANGUAGES.contains(&("ქართული", "ka")));
s.execute("prefs.set", json!({"key": "general.language", "value": "ka"})).unwrap();
let mut ka = Session { config: Some(store.clone()), ..Default::default() };
ka.load_settings();
assert_eq!(ka.prefs.general.language, "ka");
s.execute("prefs.set", json!({"key": "general.language", "value": "ja"})).unwrap();
let mut reloaded = Session { config: Some(store), ..Default::default() };
reloaded.load_settings();
+23
View File
@@ -633,6 +633,8 @@ enum FallbackScript {
/// Sinhala (one family covers them all on Windows; elsewhere each has its own).
Indic,
Thai,
/// Georgian: Mkhedruli, Asomtavruli and Nuskhuri, and Mtavruli capitals.
Georgian,
Other,
}
@@ -661,6 +663,7 @@ fn script_of(c: char) -> FallbackScript {
0x0590..=0x05FF | 0xFB1D..=0xFB4F => FallbackScript::Hebrew,
0x0900..=0x0DFF | 0xA8E0..=0xA8FF => FallbackScript::Indic,
0x0E00..=0x0E7F => FallbackScript::Thai,
0x10A0..=0x10FF | 0x1C90..=0x1CBF | 0x2D00..=0x2D2F => FallbackScript::Georgian,
_ => FallbackScript::Other,
}
}
@@ -726,6 +729,7 @@ const INDIC_FAMILIES: &[&str] = &[
"Noto Sans Sinhala",
];
const THAI_FAMILIES: &[&str] = &["Leelawadee UI", "Tahoma", "Thonburi", "Noto Sans Thai", "Noto Sans Thai UI", "Loma", "Garuda"];
const GEORGIAN_FAMILIES: &[&str] = &["Sylfaen", ".SF Georgian", "SF Georgian", "Noto Sans Georgian", "DejaVu Sans"];
/// The CJK locale the host asked fallbacks to prefer, when it has one (see [`set_cjk_locale`]).
static REQUESTED_CJK_LOCALE: RwLock<Option<String>> = RwLock::new(None);
@@ -840,6 +844,7 @@ fn families_for(s: FallbackScript, locale: CjkLocale) -> &'static [&'static str]
FallbackScript::Hebrew => HEBREW_FAMILIES,
FallbackScript::Indic => INDIC_FAMILIES,
FallbackScript::Thai => THAI_FAMILIES,
FallbackScript::Georgian => GEORGIAN_FAMILIES,
FallbackScript::Other => &[],
}
}
@@ -1246,6 +1251,8 @@ mod tests {
assert_eq!(script_of('क'), FallbackScript::Indic);
assert_eq!(script_of('த'), FallbackScript::Indic);
assert_eq!(script_of('ก'), FallbackScript::Thai);
assert_eq!(script_of('ა'), FallbackScript::Georgian);
assert_eq!(script_of('\u{1c90}'), FallbackScript::Georgian, "Mtavruli");
assert_eq!(script_of('\u{feff}'), FallbackScript::Other, "the byte order mark is no Arabic letter");
}
@@ -1269,6 +1276,22 @@ mod tests {
}
}
/// Native: Mkhedruli in a Latin-only family falls back to a family from the Georgian list,
/// ahead of faces already loaded and of the scan order. Skipped where no family from the list
/// is installed.
#[test]
fn georgian_falls_back_to_a_georgian_system_family() {
scan_system();
let c = 'ა';
if !GEORGIAN_FAMILIES.iter().any(|n| resolve_in(n, "Regular").is_some_and(|r| face(r.face).has_char(c))) {
eprintln!("no Georgian family from the list is installed; skipping");
return;
}
let f = face(fallback_for(c, resolve("Inter", "Regular").face));
assert!(f.has_char(c), "{} lacks it", f.info.family);
assert!(GEORGIAN_FAMILIES.iter().any(|n| f.info.family.eq_ignore_ascii_case(n)), "{c} → {}", f.info.family);
}
/// Native: Japanese text in a Latin-only family falls back to an installed Japanese family
/// (whichever the platform ships) instead of the missing-glyph box, without any layer having
/// loaded a CJK font first. Skipped where no family from the list is installed.
+677 -5
View File
@@ -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; 10] = ["ja", "zh-hans", "zh-hant", "uk", "es", "pt-br", "ru", "fr", "de", "cs"];
const CATALOG_CODES: [&str; 11] = ["ja", "zh-hans", "zh-hant", "uk", "es", "pt-br", "ru", "fr", "de", "cs", "ka"];
/// 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).
@@ -66,6 +66,11 @@ pub(crate) fn czech(app: &EffectcraftApp) -> bool {
language(app) == "cs"
}
/// The UI is in Georgian.
pub(crate) fn georgian(app: &EffectcraftApp) -> bool {
language(app) == "ka"
}
/// 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`]).
@@ -100,7 +105,8 @@ fn first_supported(tags: &[String]) -> &'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`, `cs-CZ` → `cs`).
/// `zh-TW` → `zh-hant`, `uk-UA` → `uk`, `es-ES` → `es`, `pt-BR` → `pt-br`, `cs-CZ` → `cs`,
/// `ka-GE` → `ka`).
fn supported(locale: Option<&str>) -> &'static str {
let Some(locale) = locale else { return "en" };
let mut parts = locale.split(['-', '_']);
@@ -111,6 +117,7 @@ fn supported(locale: Option<&str>) -> &'static str {
"uk" => "uk",
"es" => "es",
"cs" => "cs",
"ka" => "ka",
// The only Portuguese catalog: Brazil's, also for Portugal rather than English.
"pt" => "pt-br",
"zh" => {
@@ -146,6 +153,13 @@ pub(crate) fn label<'a>(app: &EffectcraftApp, command: &str, source: &'a str) ->
_ => {}
}
}
if language == "ka" && matches!(command, "file.revealInFinder" | "layer.revealInFinder") {
match source {
"Reveal in Explorer" => return "Explorer-ში ჩვენება",
"Reveal in File Manager" => return "ფაილების მენეჯერში ჩვენება",
_ => {}
}
}
menu_catalog(language).map_or(source, |catalog| lookup(catalog, command, source))
}
@@ -162,6 +176,7 @@ fn menu_catalog(language: &str) -> Option<&'static [(&'static str, &'static str,
"fr" => FRENCH,
"de" => GERMAN,
"cs" => CZECH,
"ka" => GEORGIAN,
_ => return None,
})
}
@@ -229,6 +244,8 @@ pub(crate) fn entry(app: &EffectcraftApp, e: &MenuEntry, shown: String) -> Strin
"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"),
// A colon before the history's (untranslated) action name: "დაბრუნება: Comp1".
"ka" => ("დაბრუნება:", "დაბრუნება შეუძლებელია", "ხელახლა შესრულება:", "ხელახლა შესრულება შეუძლებელია"),
_ => return shown,
};
match e.command.as_str() {
@@ -338,6 +355,17 @@ pub(crate) fn submenu(app: &EffectcraftApp, source: &str, shown: String) -> Stri
return format!("Atribuir atalho à visualização 3D “{name}”");
}
}
"ka" => {
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!("მალსახმობის მინიჭება სამუშაო სივრცისთვის „{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!("მალსახმობის მინიჭება 3D ხედისთვის „{name}“");
}
}
_ => {}
}
label(app, "", &shown).into()
@@ -6680,6 +6708,641 @@ const CZECH: &[(&str, &str, &str)] = &[
("file.openDemoProject", "Open Demo Project", "Otevřít ukázkový projekt"),
];
/// Georgian (ka): the same (command, English label) keys as `JAPANESE`, one entry per fixed menu row.
/// Original translations written from the meaning of the English labels, sharing the terminology of
/// the other Craft apps' Georgian catalogs (შრე, საკვანძო კადრი, კომპოზიცია, ნიღაბი); commands are
/// verbal nouns (შენახვა, გახსნა) and Georgian has no capital letters.
const GEORGIAN: &[(&str, &str, &str)] = &[
("", "EffectCraft", "EffectCraft"),
("app.about", "About EffectCraft...", "EffectCraft-ის შესახებ..."),
("", "Settings...", "პარამეტრები..."),
("app.settings", "General...", "ზოგადი..."),
("app.settings", "Startup & Repair...", "გაშვება და აღდგენა..."),
("app.settings", "Project...", "პროექტი..."),
("app.settings", "Composition...", "კომპოზიცია..."),
("app.settings", "Previews...", "წინასწარი ნახვა..."),
("app.settings", "Appearance...", "იერსახე..."),
("app.settings", "Grids & Guides...", "ბადე და დამხმარე ხაზები..."),
("app.settings", "Labels...", "იარლიყები..."),
("app.settings", "Type...", "ტექსტი..."),
("app.settings", "Import...", "იმპორტი..."),
("app.settings", "Export...", "ექსპორტი..."),
("app.settings", "Audio...", "აუდიო..."),
("app.settings", "Disk...", "დისკი..."),
("app.settings", "Memory & CPU...", "მეხსიერება და CPU..."),
("app.settings", "Video...", "ვიდეო..."),
("app.settings", "3D...", "3D..."),
("app.settings", "Scripting & Expressions...", "სკრიპტები და ექსპრესიები..."),
("app.hide", "Hide EffectCraft", "EffectCraft-ის დამალვა"),
("app.hideOthers", "Hide Others", "სხვების დამალვა"),
("app.showAll", "Show All", "ყველას ჩვენება"),
("app.quit", "Quit EffectCraft", "EffectCraft-იდან გასვლა"),
("", "File", "ფაილი"),
("", "New", "ახალი"),
("file.newProject", "New Project", "ახალი პროექტი"),
("file.newFromTemplate", "New Project from Template...", "ახალი პროექტი შაბლონიდან..."),
("project.newFolder", "New Folder", "ახალი საქაღალდე"),
("file.open", "Open Project...", "პროექტის გახსნა..."),
("", "Open Recent", "ბოლოს გახსნილი ფაილების გახსნა"),
("file.clearRecent", "Clear Recent Projects", "ბოლო პროექტების სიის გასუფთავება"),
("file.close", "Close", "დახურვა"),
("file.closeProject", "Close Project", "პროექტის დახურვა"),
("file.save", "Save", "შენახვა"),
("", "Save As", "შენახვა როგორც"),
("file.saveAs", "Save As...", "შენახვა როგორც..."),
("file.saveCopy", "Save a Copy...", "ასლის შენახვა..."),
("file.saveCopyAsXml", "Save a Copy As XML...", "ასლის შენახვა XML-ად..."),
("templates.saveAs", "Save as Template...", "შაბლონად შენახვა..."),
("file.incrementAndSave", "Increment and Save", "ვერსიის გაზრდით შენახვა"),
("file.revert", "Revert", "წინა ვერსიაზე დაბრუნება"),
("", "Import", "იმპორტი"),
("file.import", "File...", "ფაილი..."),
("file.importMultiple", "Multiple Files...", "რამდენიმე ფაილი..."),
("file.importTimeline", "Adobe Premiere Pro Project...", "Adobe Premiere Pro-ს პროექტი..."),
("file.importProject", "EffectCraft Project...", "EffectCraft-ის პროექტი..."),
("file.importPlaceholder", "Placeholder...", "ჩანაცვლების ობიექტი..."),
("file.importSolid", "Solid...", "სოლიდი..."),
("file.importLottie", "Lottie...", "Lottie..."),
("file.importVanishingPoint", "Vanishing Point (.vpe)...", "Vanishing Point (.vpe)..."),
("essential.importTemplate", "Essential Graphics Template...", "ძირითადი გრაფიკის შაბლონი..."),
("", "Import Recent Footage", "ბოლო ვიდეომასალის იმპორტი"),
("file.clearRecentFootage", "Clear Recent Footage", "ბოლო ვიდეომასალის სიის გასუფთავება"),
("", "Export", "ექსპორტი"),
("renderQueue.add", "Add to Render Queue", "რენდერის რიგში დამატება"),
("file.exportTimeline", "Adobe Premiere Pro Project...", "Adobe Premiere Pro-ს პროექტი..."),
("file.exportLottie", "Lottie JSON...", "Lottie JSON..."),
("essential.exportTemplate", "Essential Graphics Template...", "ძირითადი გრაფიკის შაბლონი..."),
("app.find", "Find", "ძებნა"),
("layer.addItem", "Add Footage to Comp", "ვიდეომასალის კომპოზიციაში დამატება"),
("file.newCompFromSelection", "New Comp from Selection...", "ახალი კომპოზიცია მონიშნულიდან..."),
("", "Dependencies", "დამოკიდებულებები"),
("file.collectFiles", "Collect Files...", "ფაილების შეგროვება..."),
("file.consolidateFootage", "Consolidate All Footage", "მთელი ვიდეომასალის კონსოლიდაცია"),
("file.removeUnusedFootage", "Remove Unused Footage", "გამოუყენებელი ვიდეომასალის წაშლა"),
("file.reduceProject", "Reduce Project", "პროექტის შემცირება"),
("file.findMissing", "Find Missing Effects", "დაკარგული ეფექტების ძებნა"),
("file.findMissing", "Find Missing Fonts", "დაკარგული შრიფტების ძებნა"),
("file.findMissing", "Find Missing Footage", "დაკარგული ვიდეომასალის ძებნა"),
("file.relinkFootage", "Relink Missing Footage...", "დაკარგული ვიდეომასალის ხელახლა დაკავშირება..."),
("file.watchFolder", "Watch Folder...", "საქაღალდეზე თვალყურის დევნება..."),
("", "Scripts", "სკრიპტები"),
("file.installScript", "Install Script File...", "სკრიპტის ფაილის დაყენება..."),
("file.installScriptUIPanel", "Install ScriptUI Panel...", "ScriptUI პანელის დაყენება..."),
("file.runScript", "Run Script File...", "სკრიპტის ფაილის გაშვება..."),
("", "Create Proxy", "პროქსის შექმნა"),
("file.createProxy", "Still...", "სტატიკური კადრი..."),
("file.createProxy", "Movie...", "ვიდეო..."),
("", "Set Proxy", "პროქსის მინიჭება"),
("file.setProxy", "File...", "ფაილი..."),
("file.setProxyNone", "None", "არცერთი"),
("", "Interpret Footage", "ვიდეომასალის ინტერპრეტაცია"),
("file.interpretFootage", "Main...", "ძირითადი..."),
("file.interpretProxy", "Proxy...", "პროქსი..."),
("file.rememberInterpretation", "Remember Interpretation", "ინტერპრეტაციის დამახსოვრება"),
("file.applyInterpretation", "Apply Interpretation", "ინტერპრეტაციის გამოყენება"),
("", "Replace Footage", "ვიდეომასალის ჩანაცვლება"),
("file.replaceFootage", "File...", "ფაილი..."),
("file.replaceWithPlaceholder", "Placeholder...", "ჩანაცვლების ობიექტი..."),
("file.replaceWithSolid", "Solid...", "სოლიდი..."),
("file.replaceWithLayeredComp", "With Layered Comp", "შრეებიანი კომპოზიციით"),
("file.reloadFootage", "Reload Footage", "ვიდეომასალის ხელახლა ჩატვირთვა"),
("file.revealInFinder", "Reveal in Finder", "Finder-ში ჩვენება"),
("file.projectSettings", "Project Settings...", "პროექტის პარამეტრები..."),
("app.quit", "Exit", "გასვლა"),
("", "Edit", "რედაქტირება"),
("edit.undo", "Undo", "დაბრუნება"),
("edit.redo", "Redo", "ხელახლა შესრულება"),
("", "History", "ისტორია"),
("app.commandPalette", "Quick Apply...", "სწრაფი გამოყენება..."),
("edit.cut", "Cut", "ამოჭრა"),
("edit.copy", "Copy", "კოპირება"),
("edit.copyWithPropertyLinks", "Copy with Property Links", "კოპირება თვისებების ბმულებით"),
("edit.copyWithRelativePropertyLinks", "Copy with Relative Property Links", "კოპირება თვისებების ფარდობითი ბმულებით"),
("edit.copyExpressionOnly", "Copy Expression Only", "მხოლოდ ექსპრესიის კოპირება"),
("edit.paste", "Paste", "ჩასმა"),
("edit.pasteReversedKeyframes", "Paste Reversed Keyframes", "საკვანძო კადრების შებრუნებული ჩასმა"),
("edit.pasteTextMatchFormatting", "Paste Text and Match Formatting", "ტექსტის ჩასმა ფორმატის შეთანხმებით"),
("edit.pasteTextFormattingOnly", "Paste Text Formatting Only", "მხოლოდ ტექსტის ფორმატის ჩასმა"),
("edit.clear", "Clear", "გასუფთავება"),
("edit.duplicate", "Duplicate", "დუბლირება"),
("edit.splitLayer", "Split Layer", "შრის დაყოფა"),
("edit.liftWorkArea", "Lift Work Area", "სამუშაო არის აწევა"),
("edit.extractWorkArea", "Extract Work Area", "სამუშაო არის ამოღება"),
("edit.selectAll", "Select All", "ყველაფრის მონიშვნა"),
("edit.deselectAll", "Deselect All", "ყველა მონიშვნის მოხსნა"),
("", "Label", "იარლიყი"),
("edit.selectLabelGroup", "Select Label Group", "იარლიყის ჯგუფის მონიშვნა"),
("edit.label", "None", "არცერთი"),
("edit.label", "Red", "წითელი"),
("edit.label", "Yellow", "ყვითელი"),
("edit.label", "Aqua", "ზღვისფერი"),
("edit.label", "Pink", "ვარდისფერი"),
("edit.label", "Lavender", "ლავანდისფერი"),
("edit.label", "Peach", "ატმისფერი"),
("edit.label", "Sea Foam", "ზღვის ქაფი"),
("edit.label", "Blue", "ლურჯი"),
("edit.label", "Green", "მწვანე"),
("edit.label", "Purple", "იისფერი"),
("edit.label", "Orange", "ნარინჯისფერი"),
("edit.label", "Brown", "ყავისფერი"),
("edit.label", "Fuchsia", "ფუქსია"),
("edit.label", "Cyan", "ცისფერი"),
("edit.label", "Sandstone", "ქვიშაქვა"),
("edit.label", "Dark Green", "მუქი მწვანე"),
("app.settings", "Edit Label Colors...", "იარლიყის ფერების რედაქტირება..."),
("", "Select Keyframe Label Group", "საკვანძო კადრების იარლიყის ჯგუფის მონიშვნა"),
("keys.selectLabelGroup", "On Selected Layers", "მონიშნულ შრეებზე"),
("keys.selectLabelGroup", "On All Layers", "ყველა შრეზე"),
("keys.selectLabelGroup", "Visible Keyframes on Selected Layers", "ხილული საკვანძო კადრები მონიშნულ შრეებზე"),
("keys.selectLabelGroup", "Visible Keyframes on All Layers", "ხილული საკვანძო კადრები ყველა შრეზე"),
("", "Purge", "გაწმენდა"),
("edit.purge", "All Cache...", "მთელი ქეში..."),
("edit.purge", "All Memory & Disk Cache...", "მთელი მეხსიერება და დისკის ქეში..."),
("edit.purge", "All Memory", "მთელი მეხსიერება"),
("edit.purge", "All Disk Cache...", "მთელი დისკის ქეში..."),
("edit.purge", "All 3D Cache...", "მთელი 3D ქეში..."),
("edit.purgeUndo", "Undo", "დაბრუნების ისტორია"),
("edit.purge", "Image Cache Memory", "გამოსახულების ქეშის მეხსიერება"),
("edit.purge", "Snapshot", "მომენტალური ასლი"),
("edit.editOriginal", "Edit Original...", "ორიგინალის რედაქტირება..."),
("", "Templates", "შაბლონები"),
("app.templates", "Render Settings...", "რენდერის პარამეტრები..."),
("app.templates", "Output Module...", "გამოტანის მოდული..."),
("app.keyboardShortcuts", "Keyboard Shortcuts", "კლავიატურის მალსახმობები"),
("", "Preferences", "პარამეტრები"),
("", "Composition", "კომპოზიცია"),
("comp.new", "New Composition...", "ახალი კომპოზიცია..."),
("comp.settings", "Composition Settings...", "კომპოზიციის პარამეტრები..."),
("comp.setPosterTime", "Set Poster Time", "პოსტერის დროის დაყენება"),
("comp.trimToWorkArea", "Trim Comp to Work Area", "კომპოზიციის მოკვეთა სამუშაო არემდე"),
("comp.cropToRegionOfInterest", "Crop Comp to Region of Interest", "კომპოზიციის ჩამოჭრა ინტერესის არემდე"),
("comp.cropToLayerBounds", "Crop Comp to Selected Layer(s) Bounds", "კომპოზიციის ჩამოჭრა მონიშნული შრ(ეებ)ის საზღვრებამდე"),
("render.addOutputModule", "Add Output Module", "გამოტანის მოდულის დამატება"),
("", "Preview", "წინასწარი ნახვა"),
("playback.toggle", "Play Current Preview", "მიმდინარე წინასწარი ნახვის დაკვრა"),
("playback.cacheWhenIdle", "Cache Frames When Idle", "კადრების ქეშირება უქმობისას"),
("playback.audio", "Audio", "აუდიო"),
("", "Save Frame As", "კადრის შენახვა როგორც"),
("comp.saveFrameAs", "File...", "ფაილი..."),
("comp.saveFrameAsPsd", "Photoshop Layers...", "Photoshop-ის შრეები..."),
("comp.saveFrameAsExr", "ProEXR...", "ProEXR..."),
("comp.copyFrame", "Copy Frame to Clipboard", "კადრის კოპირება გაცვლის ბუფერში"),
("render.preRender", "Pre-render...", "წინასწარი რენდერი..."),
("render.saveCurrentPreview", "Save Current Preview...", "მიმდინარე წინასწარი ნახვის შენახვა..."),
("comp.openInEssentialGraphics", "Open in Essential Graphics", "ძირითად გრაფიკაში გახსნა"),
("", "Responsive Design — Time", "რესპონსიული დიზაინი — დრო"),
("comp.responsiveTime", "Create Intro", "შესავლის შექმნა"),
("comp.responsiveTime", "Create Outro", "დასასრულის შექმნა"),
("comp.responsiveTime", "Create Protected Region from Work Area", "დაცული არის შექმნა სამუშაო არიდან"),
("comp.flowchart", "Composition Flowchart", "კომპოზიციის ბლოკ-სქემა"),
("comp.miniFlowchart", "Composition Mini-Flowchart", "კომპოზიციის მინი-ბლოკ-სქემა"),
("", "VR", "VR"),
("comp.vr.createEnvironment", "Create VR Environment...", "VR გარემოს შექმნა..."),
("comp.vr.extractCubemap", "Extract Cubemap...", "კუბური რუკის ამოღება..."),
("", "Layer", "შრე"),
("layer.newText", "Text", "ტექსტი"),
("layer.newSolid", "Solid...", "სოლიდი..."),
("layer.newLight", "Light...", "სინათლე..."),
("layer.newCamera", "Camera...", "კამერა..."),
("layer.newNull", "Null Object", "ნულოვანი ობიექტი"),
("layer.newShape", "Shape Layer", "ფიგურის შრე"),
("layer.newAdjustment", "Adjustment Layer", "კორექციის შრე"),
("layer.newContentAwareFill", "Content-Aware Fill Layer...", "შიგთავსის გათვალისწინებით შევსების შრე..."),
("layer.new3dPrimitive", "Cube", "კუბი"),
("layer.new3dPrimitive", "Sphere", "სფერო"),
("layer.new3dPrimitive", "Plane", "სიბრტყე"),
("layer.new3dPrimitive", "Torus", "ტორი"),
("layer.new3dPrimitive", "Cone", "კონუსი"),
("layer.new3dPrimitive", "Cylinder", "ცილინდრი"),
("layer.settings", "Layer Settings...", "შრის პარამეტრები..."),
("layer.openLayer", "Open Layer", "შრის გახსნა"),
("layer.openSource", "Open Layer Source", "შრის წყაროს გახსნა"),
("layer.revealInFinder", "Reveal in Finder", "Finder-ში ჩვენება"),
("", "Mask", "ნიღაბი"),
("layer.addMask", "New Mask", "ახალი ნიღაბი"),
("layer.mask.shape", "Mask Shape...", "ნიღბის ფორმა..."),
("layer.mask.set", "Mask Feather...", "ნიღბის კიდეების შერბილება..."),
("layer.mask.set", "Mask Opacity...", "ნიღბის გაუმჭვირვალობა..."),
("layer.mask.set", "Mask Expansion...", "ნიღბის გაფართოება..."),
("layer.mask.reset", "Reset Mask", "ნიღბის ჩამოყრა"),
("layer.mask.remove", "Remove Mask", "ნიღბის წაშლა"),
("layer.mask.removeAll", "Remove All Masks", "ყველა ნიღბის წაშლა"),
("track.mask", "Track Mask", "ნიღბის ტრეკინგი"),
("", "Mode", "რეჟიმი"),
("layer.mask.mode", "None", "არცერთი"),
("layer.mask.mode", "Add", "დამატება"),
("layer.mask.mode", "Subtract", "გამოკლება"),
("layer.mask.mode", "Intersect", "გადაკვეთა"),
("layer.mask.mode", "Lighten", "გაღიავება"),
("layer.mask.mode", "Darken", "ჩამუქება"),
("layer.mask.mode", "Difference", "სხვაობა"),
("layer.mask.invert", "Inverted", "შებრუნებული"),
("layer.mask.lock", "Locked", "ჩაკეტილი"),
("", "Motion Blur", "მოძრაობის გაბუნდოვნება"),
("layer.mask.motionBlur", "Same As Layer", "შრის მსგავსად"),
("layer.mask.motionBlur", "On", "ჩართული"),
("layer.mask.motionBlur", "Off", "გამორთული"),
("", "Feather Falloff", "კიდეების შერბილების მილევა"),
("layer.mask.featherFalloff", "Smooth", "გლუვი"),
("layer.mask.featherFalloff", "Linear", "წრფივი"),
("layer.mask.unlockAll", "Unlock All Masks", "ყველა ნიღბის განბლოკვა"),
("layer.mask.lockOthers", "Lock Other Masks", "სხვა ნიღბების ჩაკეტვა"),
("layer.mask.hideLocked", "Hide Locked Masks", "ჩაკეტილი ნიღბების დამალვა"),
("", "Mask and Shape Path", "ნიღაბი და ფიგურის ტრაექტორია"),
("path.rotoBezier", "RotoBezier", "RotoBezier"),
("mask.setClosed", "Closed", "შეკრული"),
("path.convertToBezier", "Convert To Bezier Path", "ბეზიეს ტრაექტორიად გარდაქმნა"),
("path.setFirstVertex", "Set First Vertex", "პირველი წვეროს დაყენება"),
("path.freeTransform", "Free Transform Points", "წერტილების თავისუფალი გარდაქმნა"),
("", "Quality", "ხარისხი"),
("layer.quality", "Best", "საუკეთესო"),
("layer.quality", "Draft", "მონახაზი"),
("layer.quality", "Wireframe", "კარკასი"),
("layer.sampling", "Bilinear", "ბიწრფივი"),
("layer.sampling", "Bicubic", "ბიკუბური"),
("", "Switches", "გადამრთველები"),
("layer.hideOtherVideo", "Hide Other Video", "სხვა ვიდეოს დამალვა"),
("layer.showAllVideo", "Show All Video", "მთელი ვიდეოს ჩვენება"),
("layer.unlockAll", "Unlock All Layers", "ყველა შრის განბლოკვა"),
("layer.expressions", "Enable Expressions", "ექსპრესიების ჩართვა"),
("layer.expressions", "Disable Expressions", "ექსპრესიების გამორთვა"),
("layer.setSwitch", "Shy", "მორცხვი"),
("layer.setSwitch", "Lock", "ჩაკეტვა"),
("layer.setSwitch", "Audio", "აუდიო"),
("layer.setSwitch", "Video", "ვიდეო"),
("layer.setSwitch", "Solo", "სოლო"),
("layer.setSwitch", "Effect", "ეფექტი"),
("layer.setSwitch", "Collapse", "ჩაკეცვა"),
("layer.setSwitch", "Motion Blur", "მოძრაობის გაბუნდოვნება"),
("layer.setSwitch", "Adjustment Layer", "კორექციის შრე"),
("", "Transform", "გარდაქმნა"),
("layer.transform", "Reset", "ჩამოყრა"),
("layer.setTransform", "Anchor Point...", "საყრდენი წერტილი..."),
("layer.setTransform", "Position...", "პოზიცია..."),
("layer.setTransform", "Scale...", "მასშტაბი..."),
("layer.setTransform", "Orientation...", "ორიენტაცია..."),
("layer.setTransform", "Rotation...", "შემობრუნება..."),
("layer.setTransform", "Opacity...", "გაუმჭვირვალობა..."),
("layer.transform", "Flip Horizontal", "ჰორიზონტალურად არეკვლა"),
("layer.transform", "Flip Vertical", "ვერტიკალურად არეკვლა"),
("layer.transform", "Center In View", "ხედის ცენტრში მოთავსება"),
("layer.centerAnchor", "Center Anchor Point in Layer Content", "საყრდენი წერტილის შრის შიგთავსის ცენტრში მოთავსება"),
("layer.transform", "Fit to Comp", "კომპოზიციაში ჩატევა"),
("layer.transform", "Fit to Comp Width", "კომპოზიციის სიგანეში ჩატევა"),
("layer.transform", "Fit to Comp Height", "კომპოზიციის სიმაღლეში ჩატევა"),
("layer.autoOrient", "Auto-Orient...", "ავტოორიენტაცია..."),
("", "Time", "დრო"),
("layer.enableTimeRemap", "Enable Time Remapping", "დროის გადანაწილების ჩართვა"),
("layer.timeReverse", "Time-Reverse Layer", "შრის დროში შებრუნება"),
("layer.timeStretch", "Time Stretch...", "დროში გაწელვა..."),
("layer.freezeFrame", "Freeze Frame", "კადრის გაყინვა"),
("layer.freezeOnLastFrame", "Freeze On Last Frame", "ბოლო კადრზე გაყინვა"),
("layer.alignVideoToData", "Align Video to Data", "ვიდეოს მონაცემებთან სწორება"),
("", "Frame Blending", "კადრების შერევა"),
("layer.frameBlending", "Off", "გამორთული"),
("layer.frameBlending", "Frame Mix", "კადრების ნაზავი"),
("layer.frameBlending", "Pixel Motion", "პიქსელების მოძრაობა"),
("layer.setSwitch", "3D Layer", "3D შრე"),
("layer.setSwitch", "Guide Layer", "დამხმარე შრე"),
("layer.environment", "Environment Layer", "გარემოს შრე"),
("", "Markers", "მარკერები"),
("layer.addMarker", "Add Marker", "მარკერის დამატება"),
("layer.updateMarkersFromSource", "Update Markers From Source", "მარკერების განახლება წყაროდან"),
("layer.markersLock", "Lock Markers", "მარკერების ჩაკეტვა"),
("layer.deleteAllMarkers", "Delete All Markers", "ყველა მარკერის წაშლა"),
("layer.setSwitch", "Preserve Transparency", "გამჭვირვალობის შენარჩუნება"),
("", "Blending Mode", "შერევის რეჟიმი"),
("layer.setBlendMode", "Normal", "ჩვეულებრივი"),
("layer.setBlendMode", "Dissolve", "გაფანტვა"),
("layer.setBlendMode", "Dancing Dissolve", "მოცეკვავე გაფანტვა"),
("layer.setBlendMode", "Darken", "ჩამუქება"),
("layer.setBlendMode", "Multiply", "გამრავლება"),
("layer.setBlendMode", "Color Burn", "ფერით ჩამუქება"),
("layer.setBlendMode", "Classic Color Burn", "კლასიკური ფერით ჩამუქება"),
("layer.setBlendMode", "Linear Burn", "წრფივი ჩამუქება"),
("layer.setBlendMode", "Darker Color", "უფრო მუქი ფერი"),
("layer.setBlendMode", "Add", "დამატება"),
("layer.setBlendMode", "Lighten", "გაღიავება"),
("layer.setBlendMode", "Screen", "ეკრანი"),
("layer.setBlendMode", "Color Dodge", "ფერით გაღიავება"),
("layer.setBlendMode", "Classic Color Dodge", "კლასიკური ფერით გაღიავება"),
("layer.setBlendMode", "Linear Dodge", "წრფივი გაღიავება"),
("layer.setBlendMode", "Lighter Color", "უფრო ღია ფერი"),
("layer.setBlendMode", "Overlay", "გადაფარვა"),
("layer.setBlendMode", "Soft Light", "რბილი სინათლე"),
("layer.setBlendMode", "Hard Light", "მკვეთრი სინათლე"),
("layer.setBlendMode", "Linear Light", "წრფივი სინათლე"),
("layer.setBlendMode", "Vivid Light", "კაშკაშა სინათლე"),
("layer.setBlendMode", "Pin Light", "წერტილოვანი სინათლე"),
("layer.setBlendMode", "Hard Mix", "მკვეთრი შერევა"),
("layer.setBlendMode", "Difference", "სხვაობა"),
("layer.setBlendMode", "Classic Difference", "კლასიკური სხვაობა"),
("layer.setBlendMode", "Exclusion", "გამორიცხვა"),
("layer.setBlendMode", "Subtract", "გამოკლება"),
("layer.setBlendMode", "Divide", "გაყოფა"),
("layer.setBlendMode", "Hue", "ფერის ტონი"),
("layer.setBlendMode", "Saturation", "გაჯერება"),
("layer.setBlendMode", "Color", "ფერი"),
("layer.setBlendMode", "Luminosity", "ნათება"),
("layer.setBlendMode", "Stencil Alpha", "ალფა-ტრაფარეტი"),
("layer.setBlendMode", "Stencil Luma", "ლუმა-ტრაფარეტი"),
("layer.setBlendMode", "Silhouette Alpha", "ალფა-სილუეტი"),
("layer.setBlendMode", "Silhouette Luma", "ლუმა-სილუეტი"),
("layer.setBlendMode", "Alpha Add", "ალფას დამატება"),
("layer.setBlendMode", "Luminescent Premul", "მანათობელი წინასწარ გამრავლებული"),
("layer.setBlendMode", "Next Blending Mode", "შემდეგი შერევის რეჟიმი"),
("layer.setBlendMode", "Previous Blending Mode", "წინა შერევის რეჟიმი"),
("", "Track Matte", "ტრეკ-მატი"),
("layer.trackMatte", "No Track Matte", "ტრეკ-მატის გარეშე"),
("layer.trackMatte", "Alpha Matte", "ალფა-მატი"),
("layer.trackMatte", "Alpha Inverted Matte", "შებრუნებული ალფა-მატი"),
("layer.trackMatte", "Luma Matte", "ლუმა-მატი"),
("layer.trackMatte", "Luma Inverted Matte", "შებრუნებული ლუმა-მატი"),
("layer.trackMatte", "Matte with Layer Above", "მატი ზედა შრით"),
("layer.trackMatte", "Matte with Layer Below", "მატი ქვედა შრით"),
("", "Layer Styles", "შრის სტილები"),
("layer.style.options", "Layer Style Options...", "შრის სტილის პარამეტრები..."),
("layer.style.convertToEditable", "Convert to Editable Styles", "რედაქტირებად სტილებად გარდაქმნა"),
("layer.style.showAll", "Show All", "ყველას ჩვენება"),
("layer.style.removeAll", "Remove All", "ყველას წაშლა"),
("layer.style.dropShadow", "Drop Shadow", "ჩრდილი"),
("layer.style.innerShadow", "Inner Shadow", "შიდა ჩრდილი"),
("layer.style.outerGlow", "Outer Glow", "გარე ნათება"),
("layer.style.innerGlow", "Inner Glow", "შიდა ნათება"),
("layer.style.bevelEmboss", "Bevel and Emboss", "ფასკა და რელიეფი"),
("layer.style.satin", "Satin", "ატლასი"),
("layer.style.colorOverlay", "Color Overlay", "ფერის გადაფარვა"),
("layer.style.gradientOverlay", "Gradient Overlay", "გრადიენტის გადაფარვა"),
("layer.style.stroke", "Stroke", "კონტური"),
("path.groupShapes", "Group Shapes", "ფიგურების დაჯგუფება"),
("path.ungroupShapes", "Ungroup Shapes", "ფიგურების დაჯგუფების მოხსნა"),
("", "Arrange", "დალაგება"),
("layer.arrange", "Bring Layer to Front", "შრის წინა პლანზე გადმოტანა"),
("layer.arrange", "Bring Layer Forward", "შრის წინ გადმოტანა"),
("layer.arrange", "Send Layer Backward", "შრის უკან გადატანა"),
("layer.arrange", "Send Layer to Back", "შრის უკანა პლანზე გადატანა"),
("", "Reveal", "ჩვენება"),
("layer.revealSource", "Reveal Layer Source in Project", "შრის წყაროს ჩვენება პროექტში"),
("comp.flowchart", "Reveal Layer in Project Flowchart", "შრის ჩვენება პროექტის ბლოკ-სქემაში"),
("comp.revealInProject", "Reveal Composition in Project", "კომპოზიციის ჩვენება პროექტში"),
("layer.revealExpressionErrors", "Reveal Expression Errors", "ექსპრესიის შეცდომების ჩვენება"),
("", "Create", "შექმნა"),
("layer.create", "Convert to Editable Text", "რედაქტირებად ტექსტად გარდაქმნა"),
("layer.create", "Create Shapes from Text", "ფიგურების შექმნა ტექსტიდან"),
("layer.create", "Create Masks from Text", "ნიღბების შექმნა ტექსტიდან"),
("layer.create", "Create Shapes from Vector Layer", "ფიგურების შექმნა ვექტორული შრიდან"),
("layer.create", "Create Keyframes from Data", "საკვანძო კადრების შექმნა მონაცემებიდან"),
("layer.create", "Null Controllers for Positional Points", "ნულოვანი მართვის ობიექტები პოზიციის წერტილებისთვის"),
("layer.create", "Null Controllers for Path Points", "ნულოვანი მართვის ობიექტები ტრაექტორიის წერტილებისთვის"),
("layer.create", "Nulls Following Path Points", "ტრაექტორიის წერტილებს მიმყოლი ნულოვანი ობიექტები"),
("layer.create", "Null Tracing Along Path", "ტრაექტორიის გასწვრივ მოძრავი ნულოვანი ობიექტი"),
("layer.create", "Create 3D Layer Instance", "3D შრის ეგზემპლარის შექმნა"),
("", "Camera", "კამერა"),
("camera.fromView", "Create Camera from 3D View", "კამერის შექმნა 3D ხედიდან"),
("camera.stereoRig", "Create Stereo 3D Rig", "სტერეო 3D სისტემის შექმნა"),
("camera.orbitNull", "Create Orbit Null", "ორბიტის ნულოვანი ობიექტის შექმნა"),
("camera.fromModel", "Create Cameras from 3D Model", "კამერების შექმნა 3D მოდელიდან"),
("camera.linkFocusToPoi", "Link Focus Distance to Point of Interest", "ფოკუსური მანძილის მიბმა ინტერესის წერტილზე"),
("camera.linkFocusToLayer", "Link Focus Distance to Layer", "ფოკუსური მანძილის მიბმა შრეზე"),
("camera.setFocusToLayer", "Set Focus Distance to Layer", "ფოკუსური მანძილის დაყენება შრეზე"),
("layer.cameraSettings", "Camera Settings...", "კამერის პარამეტრები..."),
("view.reset3DView", "Reset 3D View", "3D ხედის ჩამოყრა"),
("", "Light", "სინათლე"),
("light.fromModel", "Create Lights from 3D Model", "სინათლის წყაროების შექმნა 3D მოდელიდან"),
("light.controlWithCamera", "Control Light with Camera", "სინათლის მართვა კამერით"),
("light.environmentBackground", "Create Environment Light Background Layer", "გარემოს სინათლის ფონური შრის შექმნა"),
("", "Material", "მასალა"),
("material.revealSource", "Reveal Material Source in Project", "მასალის წყაროს ჩვენება პროექტში"),
("material.reset", "Reset Material", "მასალის ჩამოყრა"),
("material.duplicateAssign", "Duplicate and Assign Material", "მასალის დუბლირება და მინიჭება"),
("layer.autoTrace", "Auto-trace...", "ავტომატური ვექტორიზაცია..."),
("layer.precompose", "Pre-compose...", "კომპოზიციაში მოთავსება..."),
("layer.sceneEditDetection", "Scene Edit Detection...", "სცენების ჭრილების ამოცნობა..."),
("", "Effect", "ეფექტი"),
("window.panel", "Effect Controls", "ეფექტის მართვა"),
("effect.applyLast", "Last Effect", "ბოლო ეფექტი"),
("effect.removeAll", "Remove All", "ყველას წაშლა"),
("effect.manage", "Manage Effects...", "ეფექტების მართვა..."),
("effect.plugins.load", "Load Effect Plug-in...", "ეფექტის პლაგინის ჩატვირთვა..."),
("", "Animation", "ანიმაცია"),
("anim.savePreset", "Save Animation Preset...", "ანიმაციის პრესეტის შენახვა..."),
("anim.applyPreset", "Apply Animation Preset...", "ანიმაციის პრესეტის გამოყენება..."),
("", "Recent Animation Presets", "ბოლო ანიმაციის პრესეტები"),
("anim.clearRecentPresets", "Clear Recent Presets", "ბოლო პრესეტების სიის გასუფთავება"),
("anim.browsePresets", "Browse Presets...", "პრესეტების დათვალიერება..."),
("", "Text Animation Presets", "ტექსტის ანიმაციის პრესეტები"),
("layer.applyTextPreset", "Typewriter", "საბეჭდი მანქანა"),
("layer.applyTextPreset", "Fade Up Characters", "ასოების ამოსვლა გამოჩენით"),
("layer.applyTextPreset", "Bounce In Words", "სიტყვების ხტუნვით შემოსვლა"),
("layer.applyTextPreset", "Tracking In", "ასოების შეკუმშვით შემოსვლა"),
("layer.applyTextPreset", "Scramble", "არევა"),
("layer.applyTextPreset", "Blur In", "გამოჩენა გაბუნდოვნებიდან"),
("layer.applyTextPreset", "Jitter", "კანკალი"),
("layer.applyTextPreset", "Drop In Lines", "სტრიქონების ჩამოვარდნა"),
("anim.addKeyframe", "Add Keyframe", "საკვანძო კადრის დამატება"),
("keys.toggleHold", "Toggle Hold Keyframe", "ფიქსირებული საკვანძო კადრის გადართვა"),
("keys.interpolation", "Keyframe Interpolation...", "საკვანძო კადრის ინტერპოლაცია..."),
("keys.velocity", "Keyframe Velocity...", "საკვანძო კადრის სიჩქარე..."),
("", "Keyframe Assistant", "საკვანძო კადრების ასისტენტი"),
("keys.audioToKeyframes", "Convert Audio to Keyframes", "აუდიოს საკვანძო კადრებად გარდაქმნა"),
("prop.convertExpressionToKeyframes", "Convert Expression to Keyframes", "ექსპრესიის საკვანძო კადრებად გარდაქმნა"),
("keys.easyEase", "Easy Ease", "რბილი შენელება"),
("keys.easyEaseIn", "Easy Ease In", "რბილი შენელება შესვლისას"),
("keys.easyEaseOut", "Easy Ease Out", "რბილი შენელება გამოსვლისას"),
("keys.exponentialScale", "Exponential Scale", "ექსპონენციალური მასშტაბი"),
("keys.rpfCameraImport", "RPF Camera Import", "RPF კამერის იმპორტი"),
("layer.sequence", "Sequence Layers...", "შრეების თანმიმდევრობით განლაგება..."),
("keys.timeReverse", "Time-Reverse Keyframes", "საკვანძო კადრების დროში შებრუნება"),
("", "Animate Text", "ტექსტის ანიმირება"),
("layer.enablePerChar3D", "Enable Per-character 3D", "თითოეული ასოს 3D-ს ჩართვა"),
("layer.addTextAnimator", "Anchor Point", "საყრდენი წერტილი"),
("layer.addTextAnimator", "Position", "პოზიცია"),
("layer.addTextAnimator", "Scale", "მასშტაბი"),
("layer.addTextAnimator", "Skew", "დახრა"),
("layer.addTextAnimator", "Rotation", "შემობრუნება"),
("layer.addTextAnimator", "Opacity", "გაუმჭვირვალობა"),
("layer.addTextAnimator", "All Transform Properties", "გარდაქმნის ყველა თვისება"),
("", "Fill Color", "შევსების ფერი"),
("layer.addTextAnimator", "RGB", "RGB"),
("layer.addTextAnimator", "Hue", "ფერის ტონი"),
("layer.addTextAnimator", "Saturation", "გაჯერება"),
("layer.addTextAnimator", "Brightness", "სიკაშკაშე"),
("", "Stroke Color", "კონტურის ფერი"),
("layer.addTextAnimator", "Stroke Width", "კონტურის სისქე"),
("", "Front", "წინა მხარე"),
("", "Bevel", "წაკვეთა"),
("", "Side", "გვერდითი მხარე"),
("", "Back", "უკანა მხარე"),
("layer.addTextAnimator", "Color", "ფერი"),
("layer.addTextAnimator", "Tracking", "ასოთაშორისი ინტერვალი"),
("layer.addTextAnimator", "Line Anchor", "სტრიქონის საყრდენი"),
("layer.addTextAnimator", "Line Spacing", "სტრიქონთა დაშორება"),
("layer.addTextAnimator", "Character Offset", "ასოს წანაცვლება"),
("layer.addTextAnimator", "Character Value", "ასოს მნიშვნელობა"),
("layer.addTextAnimator", "Blur", "გაბუნდოვნება"),
("text.animatorFontAxes", "Variable Font Axes", "ცვლადი შრიფტის ღერძები"),
("", "Add Text Selector", "ტექსტის სელექტორის დამატება"),
("text.addSelector", "Range", "დიაპაზონი"),
("text.addSelector", "Wiggly", "რხევითი"),
("text.addSelector", "Expression", "ექსპრესია"),
("text.removeAllAnimators", "Remove All Text Animators", "ტექსტის ყველა ანიმატორის წაშლა"),
("prop.setExpression", "Add Expression", "ექსპრესიის დამატება"),
("essential.addProperty", "Add Property to Essential Graphics", "თვისების დამატება ძირითად გრაფიკაში"),
("prop.separateDimensions", "Separate Dimensions", "განზომილებების გაყოფა"),
("track.camera", "Track Camera", "კამერის ტრეკინგი"),
("track.warpStabilizer", "Warp Stabilizer VFX", "Warp Stabilizer VFX"),
("track.motion", "Track Motion", "მოძრაობის ტრეკინგი"),
("track.stabilize", "Stabilize Motion", "მოძრაობის სტაბილიზაცია"),
("track.property", "Track this Property", "ამ თვისების ტრეკინგი"),
("anim.reveal", "Reveal Properties with Keyframes", "საკვანძო კადრების მქონე თვისებების ჩვენება"),
("anim.reveal", "Reveal Properties with Animation", "ანიმაციის მქონე თვისებების ჩვენება"),
("anim.reveal", "Reveal All Modified Properties", "ყველა შეცვლილი თვისების ჩვენება"),
("", "View", "ხედი"),
("view.newViewer", "New Viewer", "ახალი დამთვალიერებელი"),
("view.splitLockedViewer", "Split with New Locked Viewer", "დაყოფა ახალი ჩაკეტილი დამთვალიერებელით"),
("view.zoomIn", "Zoom In", "გადიდება"),
("view.zoomOut", "Zoom Out", "დაპატარავება"),
("", "Resolution", "გარჩევადობა"),
("view.res.full", "Full", "სრული"),
("view.res.half", "Half", "ნახევარი"),
("view.res.third", "Third", "მესამედი"),
("view.res.quarter", "Quarter", "მეოთხედი"),
("view.res.custom", "Custom...", "მორგებული..."),
("view.displayColorManagement", "Use Display Color Management", "ეკრანის ფერთა მართვის გამოყენება"),
("", "Simulate Output", "გამოტანის იმიტაცია"),
("view.simulateOutput", "No Output Simulation", "გამოტანის იმიტაციის გარეშე"),
("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)", "ძველი Macintosh RGB (გამა 1.8)"),
("view.simulateOutput", "Internet Standard RGB (sRGB)", "ინტერნეტის სტანდარტული RGB (sRGB)"),
("view.simulateOutput", "UHDTV (Rec. 2020)", "UHDTV (Rec. 2020)"),
("view.simulateOutput", "Display P3", "Display P3"),
("view.simulateOutput", "Linear (1.0 Gamma)", "წრფივი (გამა 1.0)"),
("view.customRgb", "My Custom RGB...", "ჩემი მორგებული RGB..."),
("view.simulateOutput", "Custom...", "მორგებული..."),
("view.rulers", "Show Rulers", "სახაზავების ჩვენება"),
("", "Panel Background Color", "პანელის ფონის ფერი"),
("view.panelBackground", "Black", "შავი"),
("view.panelBackground", "Dark Gray", "მუქი ნაცრისფერი"),
("view.panelBackground", "Medium Gray (Default)", "საშუალო ნაცრისფერი (ნაგულისხმევი)"),
("view.panelBackground", "Light Gray", "ღია ნაცრისფერი"),
("view.panelBackground", "White", "თეთრი"),
("view.panelBackground", "Custom", "მორგებული"),
("view.panelBackground", "Select Custom Background Color...", "მორგებული ფონის ფერის არჩევა..."),
("view.guides", "Show Guides", "დამხმარე ხაზების ჩვენება"),
("view.snapToGuides", "Snap to Guides", "დამხმარე ხაზებზე მიბმა"),
("view.lockGuides", "Lock Guides", "დამხმარე ხაზების ჩაკეტვა"),
("view.addGuide", "Add Guide...", "დამხმარე ხაზის დამატება..."),
("view.addPercentGuide", "Add Percentage Guide...", "პროცენტული დამხმარე ხაზის დამატება..."),
("view.convertGuides", "Convert Guides to Percentage", "დამხმარე ხაზების პროცენტულად გარდაქმნა"),
("view.convertGuides", "Convert Guides to Pixels", "დამხმარე ხაზების პიქსელებად გარდაქმნა"),
("view.clearGuides", "Clear Guides", "დამხმარე ხაზების გასუფთავება"),
("view.importGuides", "Import Guides...", "დამხმარე ხაზების იმპორტი..."),
("view.exportGuides", "Export Guides...", "დამხმარე ხაზების ექსპორტი..."),
("view.grid", "Show Grid", "ბადის ჩვენება"),
("view.snapToGrid", "Snap to Grid", "ბადეზე მიბმა"),
("view.snapping", "Snapping", "მიბმა"),
("view.options", "View Options...", "ხედის პარამეტრები..."),
("view.layerControls", "Show Layer Controls", "შრის მართვის ელემენტების ჩვენება"),
("", "Switch View Layout", "ხედების განლაგების გადართვა"),
("view.layout", "1 View", "1 ხედი"),
("view.layout", "2 Views", "2 ხედი"),
("view.layout", "4 Views", "4 ხედი"),
("view.shareViewOptions", "Share View Options", "ხედის პარამეტრების გაზიარება"),
("", "Switch 3D View", "3D ხედის გადართვა"),
("view.3d.activeCamera", "Active Camera", "აქტიური კამერა"),
("view.3d.default", "Default", "ნაგულისხმევი"),
("view.3d.front", "Front", "წინიდან"),
("view.3d.left", "Left", "მარცხნიდან"),
("view.3d.top", "Top", "ზემოდან"),
("view.3d.back", "Back", "უკნიდან"),
("view.3d.right", "Right", "მარჯვნიდან"),
("view.3d.bottom", "Bottom", "ქვემოდან"),
("view.3d.custom1", "Custom View 1", "მორგებული ხედი 1"),
("view.3d.custom2", "Custom View 2", "მორგებული ხედი 2"),
("view.3d.custom3", "Custom View 3", "მორგებული ხედი 3"),
("", "Assign Shortcut to 3D View", "მალსახმობის მინიჭება 3D ხედისთვის"),
("view.3d.last", "Switch to Last 3D View", "ბოლო 3D ხედზე გადართვა"),
("view.lookAtSelected", "Look at Selected Layers", "მონიშნული შრეების დათვალიერება"),
("view.lookAtAll", "Look at All Layers", "ყველა შრის დათვალიერება"),
("time.set", "Go to Time...", "დროზე გადასვლა..."),
("view.fullScreen", "Enter Full Screen", "სრულეკრანიან რეჟიმში გადასვლა"),
("", "Window", "ფანჯარა"),
("", "Workspace", "სამუშაო სივრცე"),
("window.workspace", "Default", "ნაგულისხმევი"),
("window.workspace", "Review", "განხილვა"),
("window.workspace", "Learn", "სწავლა"),
("window.workspace", "Small Screen", "პატარა ეკრანი"),
("window.workspace", "Standard", "სტანდარტული"),
("window.workspace", "All Panels", "ყველა პანელი"),
("window.workspace", "Animation", "ანიმაცია"),
("window.workspace", "Color", "ფერი"),
("window.workspace", "Effects", "ეფექტები"),
("window.workspace", "Essential Graphics", "ძირითადი გრაფიკა"),
("window.workspace", "Minimal", "მინიმალური"),
("window.workspace", "Motion Tracking", "მოძრაობის ტრეკინგი"),
("window.workspace", "Paint", "ხატვა"),
("window.workspace", "Text", "ტექსტი"),
("window.workspace", "Undocked Panels", "მოხსნილი პანელები"),
("window.resetWorkspace", "Reset to Saved Layout", "შენახულ განლაგებაზე დაბრუნება"),
("window.saveWorkspace", "Save Changes to this Workspace", "ამ სამუშაო სივრცეში ცვლილებების შენახვა"),
("window.saveWorkspaceAs", "Save as New Workspace...", "ახალ სამუშაო სივრცედ შენახვა..."),
("window.editWorkspaces", "Edit Workspaces...", "სამუშაო სივრცეების რედაქტირება..."),
("", "Assign Shortcut to Workspace", "მალსახმობის მინიჭება სამუშაო სივრცისთვის"),
("window.panel", "Align", "სწორება"),
("window.panel", "Audio", "აუდიო"),
("window.panel", "Brushes", "ფუნჯები"),
("window.panel", "Character", "სიმბოლო"),
("window.panel", "Content-Aware Fill", "შიგთავსის გათვალისწინებით შევსება"),
("window.panel", "Effects & Presets", "ეფექტები და პრესეტები"),
("window.panel", "Essential Graphics", "ძირითადი გრაფიკა"),
("window.panel", "Info", "ინფორმაცია"),
("help.inAppTutorials", "Learn", "სწავლა"),
("window.panel", "Lumetri Scopes", "Lumetri Scopes"),
("window.panel", "Mask Interpolation", "ნიღბის ინტერპოლაცია"),
("window.panel", "Media Browser", "მედიის ბრაუზერი"),
("window.panel", "Metadata", "მეტამონაცემები"),
("window.panel", "Motion Sketch", "მოძრაობის ესკიზი"),
("window.panel", "Paint", "ხატვა"),
("window.panel", "Paragraph", "აბზაცი"),
("window.panel", "Preview", "წინასწარი ნახვა"),
("window.panel", "Progress", "პროგრესი"),
("window.panel", "Properties", "თვისებები"),
("window.panel", "Script Console", "სკრიპტის კონსოლი"),
("window.panel", "Smoother", "დამგლუვებელი"),
("window.panel", "Tools", "ხელსაწყოები"),
("window.panel", "Tracker", "ტრეკერი"),
("window.panel", "Wiggler", "რხევის გენერატორი"),
("window.panel", "Composition", "კომპოზიცია"),
("window.panel", "Flowchart", "ბლოკ-სქემა"),
("window.panel", "Footage", "ვიდეომასალა"),
("window.panel", "Layer", "შრე"),
("window.panel", "Project", "პროექტი"),
("window.panel", "Render Queue", "რენდერის რიგი"),
("window.panel", "Timeline", "დროის ხაზი"),
("window.panel", "Create Nulls From Paths", "ნულოვანი ობიექტების შექმნა ტრაექტორიებიდან"),
("window.panel", "VR Comp Editor", "VR კომპოზიციის რედაქტორი"),
("", "Help", "დახმარება"),
("help.docs", "EffectCraft Help...", "EffectCraft-ის დახმარება..."),
("help.docs", "Scripting Help...", "სკრიპტების დახმარება..."),
("help.docs", "Expression Reference...", "ექსპრესიების ცნობარი..."),
("help.docs", "Effect Reference...", "ეფექტების ცნობარი..."),
("anim.browsePresets", "Animation Presets...", "ანიმაციის პრესეტები..."),
("app.keyboardShortcuts", "Keyboard Shortcuts...", "კლავიატურის მალსახმობები..."),
("help.inAppTutorials", "In-App Tutorials...", "აპის შიგნით გაკვეთილები..."),
("help.onlineTutorials", "Online Tutorials...", "ონლაინ გაკვეთილები..."),
("help.systemReport", "System Compatibility Report...", "სისტემის თავსებადობის ანგარიში..."),
("help.enableLogging", "Enable Logging", "ჟურნალის ჩართვა"),
("help.revealLogFile", "Reveal Logging File", "ჟურნალის ფაილის ჩვენება"),
("help.discord", "Join the ArtCraft Discord...", "შემოუერთდით ArtCraft-ის Discord-ს..."),
("help.reportIssue", "Provide Feedback...", "გამოხმაურების გაგზავნა..."),
("help.website", "ArtCraft Website", "ArtCraft-ის ვებსაიტი"),
("help.appPage", "EffectCraft Home Page", "EffectCraft-ის საწყისი გვერდი"),
("help.github", "EffectCraft on GitHub", "EffectCraft GitHub-ზე"),
("file.openDemoProject", "Open Demo Project", "სადემონსტრაციო პროექტის გახსნა"),
];
#[cfg(test)]
mod tests {
use super::*;
@@ -6853,6 +7516,9 @@ mod tests {
(Some("cs-CZ"), "cs"),
(Some("cs_CZ.UTF-8"), "cs"),
(Some("CS_cz.UTF-8"), "cs"),
(Some("ka"), "ka"),
(Some("ka-GE"), "ka"),
(Some("ka_GE.UTF-8"), "ka"),
(Some("en-US"), "en"),
(Some("jv-ID"), "en"),
(Some("de-DE"), "en"),
@@ -6886,9 +7552,15 @@ 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), ("cs", CZECH)]
{
for (code, catalog) in [
("zh-hans", SIMPLIFIED_CHINESE),
("zh-hant", TRADITIONAL_CHINESE),
("uk", UKRAINIAN),
("es", SPANISH),
("pt-br", PORTUGUESE),
("cs", CZECH),
("ka", GEORGIAN),
] {
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();
+346 -2
View File
@@ -70,12 +70,14 @@ fn catalog(language: &str) -> Option<&'static Catalog> {
static SIMPLIFIED: Catalog = Catalog { rows: SIMPLIFIED_CHINESE, categories: SIMPLIFIED_CHINESE_CATEGORIES, index: OnceLock::new() };
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() };
match language {
"zh-hans" => Some(&SIMPLIFIED),
"zh-hant" => Some(&TRADITIONAL),
// Japanese: the slot the Japanese data point on #821 asked for, so both languages share
// this one catalog instead of inventing a second mechanism.
"ja" => Some(&JAPANESE),
"ka" => Some(&GEORGIAN_CATALOG),
_ => None,
}
}
@@ -503,6 +505,346 @@ const JAPANESE_CATEGORIES: &[(&str, &str)] = &[
("Utility", "ユーティリティ"),
];
/// Georgian (`ka`): one row per effect, ids from [`SIMPLIFIED_CHINESE`]. Written from the meaning
/// of the English names, with the terms the Georgian menus and panels use (FilmCraft's Georgian
/// for the effects the two apps share). The `CC` series and the brand names (`Cryptomatte`,
/// `EXtractoR`, `IDentifier`, `Key Light`, `Unmult`, `Lumetri Color`) stay in English, as
/// Adobe's Japanese interface keeps the `CC` series; `VR` and `OCIO` keep their prefix.
const GEORGIAN: &[Row] = &[
("ec.3d.channelextract", "3D Channel Extract", "3D არხის ამოღება"),
("ec.3d.cryptomatte", "Cryptomatte", "Cryptomatte"),
("ec.3d.depthmatte", "Depth Matte", "სიღრმის მატი"),
("ec.3d.depthoffield", "Depth of Field", "ველის სიღრმე"),
("ec.3d.extractor", "EXtractoR", "EXtractoR"),
("ec.3d.fog3d", "Fog 3D", "3D ნისლი"),
("ec.3d.identifier", "IDentifier", "IDentifier"),
("ec.3d.idmatte", "ID Matte", "ID მატი"),
("ec.audio.backwards", "Backwards", "უკუღმა"),
("ec.audio.basstreble", "Bass & Treble", "ბასი და ტრებლი"),
("ec.audio.compressor", "Compressor", "კომპრესორი"),
("ec.audio.delay", "Delay", "დაყოვნება"),
("ec.audio.distortion", "Distortion", "დამახინჯება"),
("ec.audio.flangechorus", "Flange & Chorus", "ფლენჯერი და ქორუსი"),
("ec.audio.gate", "Gate", "გეიტი"),
("ec.audio.highlowpass", "High-Low Pass", "მაღალი/დაბალი სიხშირეების ფილტრი"),
("ec.audio.modulator", "Modulator", "მოდულატორი"),
("ec.audio.parametriceq", "Parametric EQ", "პარამეტრული ეკვალაიზერი"),
("ec.audio.reverb", "Reverb", "რევერბი"),
("ec.audio.stereomixer", "Stereo Mixer", "სტერეომიქშერი"),
("ec.audio.tone", "Tone", "ტონი"),
("ec.blur.bilateral", "Bilateral Blur", "ბილატერალური გაბუნდოვნება"),
("ec.blur.cameralens", "Camera Lens Blur", "კამერის ობიექტივის გაბუნდოვნება"),
("ec.blur.camerashakedeblur", "Camera-Shake Deblur", "კამერის რყევით გაბუნდოვნების მოცილება"),
("ec.blur.cccross", "CC Cross Blur", "CC Cross Blur"),
("ec.blur.ccradial", "CC Radial Blur", "CC Radial Blur"),
("ec.blur.ccradialfast", "CC Radial Fast Blur", "CC Radial Fast Blur"),
("ec.blur.ccvector", "CC Vector Blur", "CC Vector Blur"),
("ec.blur.channel", "Channel Blur", "არხის გაბუნდოვნება"),
("ec.blur.compound", "Compound Blur", "შედგენილი გაბუნდოვნება"),
("ec.blur.directional", "Directional Blur", "მიმართული გაბუნდოვნება"),
("ec.blur.fastbox", "Fast Box Blur", "სწრაფი ბლოკური გაბუნდოვნება"),
("ec.blur.gaussian", "Gaussian Blur", "გაუსის გაბუნდოვნება"),
("ec.blur.radial", "Radial Blur", "რადიალური გაბუნდოვნება"),
("ec.blur.reduceflicker", "Reduce Interlace Flicker", "ნახევარკადრული ციმციმის შემცირება"),
("ec.blur.sharpen", "Sharpen", "სიმკვეთრე"),
("ec.blur.smart", "Smart Blur", "ჭკვიანი გაბუნდოვნება"),
("ec.blur.unsharp", "Unsharp Mask", "არამკვეთრი ნიღაბი"),
("ec.channel.arithmetic", "Arithmetic", "არითმეტიკა"),
("ec.channel.blend", "Blend", "შერევა"),
("ec.channel.calculations", "Calculations", "გამოთვლები"),
("ec.channel.cccomposite", "CC Composite", "CC Composite"),
("ec.channel.combiner", "Channel Combiner", "არხების გამაერთიანებელი"),
("ec.channel.compoundarithmetic", "Compound Arithmetic", "შედგენილი არითმეტიკა"),
("ec.channel.invert", "Invert", "ინვერსია"),
("ec.channel.minimax", "Minimax", "მინიმაქსი"),
("ec.channel.removecolormatting", "Remove Color Matting", "ფერადი მატინგის მოცილება"),
("ec.channel.setchannels", "Set Channels", "არხების დაყენება"),
("ec.channel.setmatte", "Set Matte", "მატის დაყენება"),
("ec.channel.shiftchannels", "Shift Channels", "არხების გადანაცვლება"),
("ec.channel.solidcomposite", "Solid Composite", "სოლიდთან კომპოზიტი"),
("ec.color.autocolor", "Auto Color", "ავტოფერი"),
("ec.color.autocontrast", "Auto Contrast", "ავტოკონტრასტი"),
("ec.color.autolevels", "Auto Levels", "ავტოდონეები"),
("ec.color.blackwhite", "Black & White", "შავ-თეთრი"),
("ec.color.brightnesscontrast", "Brightness & Contrast", "სიკაშკაშე და კონტრასტი"),
("ec.color.broadcast", "Broadcast Colors", "სამაუწყებლო ფერები"),
("ec.color.cccolorneutralizer", "CC Color Neutralizer", "CC Color Neutralizer"),
("ec.color.cccoloroffset", "CC Color Offset", "CC Color Offset"),
("ec.color.cckernel", "CC Kernel", "CC Kernel"),
("ec.color.cctoner", "CC Toner", "CC Toner"),
("ec.color.changecolor", "Change Color", "ფერის შეცვლა"),
("ec.color.changetocolor", "Change to Color", "ფერად შეცვლა"),
("ec.color.channelmixer", "Channel Mixer", "არხების მიქშერი"),
("ec.color.colorama", "Colorama", "კოლორამა"),
("ec.color.colorbalance", "Color Balance", "ფერთა ბალანსი"),
("ec.color.colorbalancehls", "Color Balance (HLS)", "ფერთა ბალანსი (HLS)"),
("ec.color.colorlink", "Color Link", "ფერის ბმა"),
("ec.color.colorstabilizer", "Color Stabilizer", "ფერის სტაბილიზატორი"),
("ec.color.curves", "Curves", "მრუდები"),
("ec.color.equalize", "Equalize", "გათანაბრება"),
("ec.color.exposure", "Exposure", "ექსპოზიცია"),
("ec.color.gammapedestalgain", "Gamma/Pedestal/Gain", "გამა/საფეხური/გაძლიერება"),
("ec.color.huesaturation", "Hue/Saturation", "ფერის ტონი/გაჯერება"),
("ec.color.leavecolor", "Leave Color", "ფერის დატოვება"),
("ec.color.levels", "Levels", "დონეები"),
("ec.color.levelsic", "Levels (Individual Controls)", "დონეები (ცალკეული მართვა)"),
("ec.color.lumetri", "Lumetri Color", "Lumetri Color"),
("ec.color.ociocdl", "OCIO CDL Transform", "OCIO CDL გარდაქმნა"),
("ec.color.ociocolorspace", "OCIO Color Space Transform", "OCIO ფერთა სივრცის გარდაქმნა"),
("ec.color.ociodisplay", "OCIO Display Transform", "OCIO ეკრანის გარდაქმნა"),
("ec.color.ociofile", "OCIO File Transform", "OCIO ფაილის გარდაქმნა"),
("ec.color.ociolook", "OCIO Look Transform", "OCIO ვიზუალური სტილის გარდაქმნა"),
("ec.color.photofilter", "Photo Filter", "ფოტოფილტრი"),
("ec.color.psarbitrarymap", "PS Arbitrary Map", "PS ნებისმიერი რუკა"),
("ec.color.selectivecolor", "Selective Color", "შერჩევითი ფერი"),
("ec.color.shadowhighlight", "Shadow/Highlight", "ჩრდილები/ღია ტონები"),
("ec.color.tint", "Tint", "ტონირება"),
("ec.color.tritone", "Tritone", "სამტონიანი"),
("ec.color.vibrance", "Vibrance", "სიხალასე"),
("ec.color.videolimiter", "Video Limiter", "ვიდეოლიმიტერი"),
("ec.control.angle", "Angle Control", "კუთხის მართვა"),
("ec.control.checkbox", "Checkbox Control", "მოსანიშნი ველის მართვა"),
("ec.control.color", "Color Control", "ფერის მართვა"),
("ec.control.dropdown", "Dropdown Menu Control", "ჩამოსაშლელი მენიუს მართვა"),
("ec.control.layer", "Layer Control", "შრის მართვა"),
("ec.control.point", "Point Control", "წერტილის მართვა"),
("ec.control.point3d", "3D Point Control", "3D წერტილის მართვა"),
("ec.control.slider", "Slider Control", "სლაიდერის მართვა"),
("ec.control.stereo3d", "Stereo 3D Controls", "სტერეო 3D მართვა"),
("ec.distort.bezierwarp", "Bezier Warp", "ბეზიეს დეფორმაცია"),
("ec.distort.bulge", "Bulge", "გამობერილობა"),
("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 Lens"),
("ec.distort.ccpageturn", "CC Page Turn", "CC Page Turn"),
("ec.distort.ccpowerpin", "CC Power Pin", "CC Power Pin"),
("ec.distort.ccripplepulse", "CC Ripple Pulse", "CC Ripple Pulse"),
("ec.distort.ccslant", "CC Slant", "CC Slant"),
("ec.distort.ccsmear", "CC Smear", "CC Smear"),
("ec.distort.ccsplit", "CC Split", "CC Split"),
("ec.distort.ccsplit2", "CC Split 2", "CC Split 2"),
("ec.distort.cctiler", "CC Tiler", "CC Tiler"),
("ec.distort.cornerpin", "Corner Pin", "კუთხეების მიმაგრება"),
("ec.distort.displacementmap", "Displacement Map", "წანაცვლების რუკა"),
("ec.distort.liquify", "Liquify", "გათხევადება"),
("ec.distort.magnify", "Magnify", "გადიდება"),
("ec.distort.meshwarp", "Mesh Warp", "ბადისებრი დეფორმაცია"),
("ec.distort.mirror", "Mirror", "სარკე"),
("ec.distort.offset", "Offset", "წანაცვლება"),
("ec.distort.opticscompensation", "Optics Compensation", "ოპტიკის კომპენსაცია"),
("ec.distort.polar", "Polar Coordinates", "პოლარული კოორდინატები"),
("ec.distort.puppet", "Puppet", "მარიონეტი"),
("ec.distort.reshape", "Reshape", "ფორმის შეცვლა"),
("ec.distort.ripple", "Ripple", "ტალღა"),
("ec.distort.rollingshutterrepair", "Rolling Shutter Repair", "მცოცავი ჩამკეტის გასწორება"),
("ec.distort.smear", "Smear", "გადღაბნა"),
("ec.distort.spherize", "Spherize", "სფერიზება"),
("ec.distort.transform", "Transform", "გარდაქმნა"),
("ec.distort.turbulentdisplace", "Turbulent Displace", "ტურბულენტური წანაცვლება"),
("ec.distort.twirl", "Twirl", "გრიგალი"),
("ec.distort.twirllegacy", "Twirl (Legacy)", "გრიგალი (მოძველებული)"),
("ec.distort.upscale", "Detail-preserving Upscale", "გადიდება დეტალების შენარჩუნებით"),
("ec.distort.warp", "Warp", "დეფორმაცია"),
("ec.distort.warpstabilizer", "Warp Stabilizer", "დეფორმაციის სტაბილიზატორი"),
("ec.distort.wavewarp", "Wave Warp", "ტალღური დეფორმაცია"),
("ec.generate.advancedlightning", "Advanced Lightning", "გაფართოებული ელვა"),
("ec.generate.audiospectrum", "Audio Spectrum", "აუდიოს სპექტრი"),
("ec.generate.audiowaveform", "Audio Waveform", "აუდიოს ტალღის ფორმა"),
("ec.generate.beam", "Beam", "სხივი"),
("ec.generate.ccgluegun", "CC Glue Gun", "CC Glue Gun"),
("ec.generate.cclightburst", "CC Light Burst 2.5", "CC Light Burst 2.5"),
("ec.generate.cclightrays", "CC Light Rays", "CC Light Rays"),
("ec.generate.cclightsweep", "CC Light Sweep", "CC Light Sweep"),
("ec.generate.ccthreads", "CC Threads", "CC Threads"),
("ec.generate.cellpattern", "Cell Pattern", "უჯრედების პატერნი"),
("ec.generate.checkerboard", "Checkerboard", "ჭადრაკის დაფა"),
("ec.generate.circle", "Circle", "წრე"),
("ec.generate.ellipse", "Ellipse", "ელიფსი"),
("ec.generate.eyedropperfill", "Eyedropper Fill", "პიპეტით შევსება"),
("ec.generate.fill", "Fill", "შევსება"),
("ec.generate.fourcolor", "4-Color Gradient", "4-ფერიანი გრადიენტი"),
("ec.generate.fractal", "Fractal", "ფრაქტალი"),
("ec.generate.gradientramp", "Gradient Ramp", "გრადიენტული გადასვლა"),
("ec.generate.grid", "Grid", "ბადე"),
("ec.generate.lensflare", "Lens Flare", "ობიექტივის ანარეკლი"),
("ec.generate.paintbucket", "Paint Bucket", "საღებავის ვედრო"),
("ec.generate.radiowaves", "Radio Waves", "რადიოტალღები"),
("ec.generate.scribble", "Scribble", "ჯღაბნა"),
("ec.generate.stroke", "Stroke", "კონტური"),
("ec.generate.vegas", "Vegas", "ვეგასი"),
("ec.generate.writeon", "Write-on", "თანდათანობითი წერა"),
("ec.key.advancedspill", "Advanced Spill Suppressor", "ფერის გადაღვრის გაფართოებული ჩამხშობი"),
("ec.key.ccsimplewireremoval", "CC Simple Wire Removal", "CC Simple Wire Removal"),
("ec.key.colordifference", "Color Difference Key", "ფერთა სხვაობის გასაღები"),
("ec.key.colorkey", "Color Key", "ფერის გასაღები"),
("ec.key.colorrange", "Color Range", "ფერების დიაპაზონი"),
("ec.key.differencematte", "Difference Matte", "სხვაობის მატი"),
("ec.key.extract", "Extract", "ამოღება"),
("ec.key.innerouter", "Inner/Outer Key", "შიდა/გარე გასაღები"),
("ec.key.keycleaner", "Key Cleaner", "გასაღების გამწმენდი"),
("ec.key.linearcolor", "Linear Color Key", "წრფივი ფერის გასაღები"),
("ec.key.luma", "Luma Key", "სიკაშკაშის გასაღები"),
("ec.key.screen", "Screen Key", "ეკრანის გასაღები"),
("ec.key.spill", "Spill Suppressor", "ფერის გადაღვრის ჩამხშობი"),
("ec.key.unmult", "Unmult", "Unmult"),
("ec.keying.keylight", "Key Light", "Key Light"),
("ec.matte.mattechoker", "Matte Choker", "მატის შემკუმშველი"),
("ec.matte.objectmatte", "Object Matte", "ობიექტის მატი"),
("ec.matte.refinehard", "Refine Hard Matte", "მკვეთრი მატის დახვეწა"),
("ec.matte.refinesoft", "Refine Soft Matte", "რბილი მატის დახვეწა"),
("ec.matte.rotobrush", "Roto Brush & Refine Edge", "როტო-ფუნჯი და კიდის დახვეწა"),
("ec.matte.simplechoker", "Simple Choker", "მარტივი შემკუმშველი"),
("ec.noise.addgrain", "Add Grain", "მარცვლოვნების დამატება"),
("ec.noise.curlnoise", "Curl Noise", "გრიგალური ხმაური"),
("ec.noise.dustscratches", "Dust & Scratches", "მტვერი და ნაკაწრები"),
("ec.noise.fractal", "Fractal Noise", "ფრაქტალური ხმაური"),
("ec.noise.matchgrain", "Match Grain", "მარცვლოვნების მისადაგება"),
("ec.noise.median", "Median", "მედიანა"),
("ec.noise.medianlegacy", "Median (Legacy)", "მედიანა (მოძველებული)"),
("ec.noise.noise", "Noise", "ხმაური"),
("ec.noise.noisealpha", "Noise Alpha", "ალფა-ხმაური"),
("ec.noise.noisehls", "Noise HLS", "HLS ხმაური"),
("ec.noise.noisehlsauto", "Noise HLS Auto", "HLS ხმაური (ავტომატური)"),
("ec.noise.removegrain", "Remove Grain", "მარცვლოვნების მოცილება"),
("ec.noise.turbulent", "Turbulent Noise", "ტურბულენტური ხმაური"),
("ec.obsolete.basic3d", "Basic 3D", "საბაზო 3D"),
("ec.obsolete.basictext", "Basic Text", "საბაზო ტექსტი"),
("ec.obsolete.gaussianlegacy", "Gaussian Blur (Legacy)", "გაუსის გაბუნდოვნება (მოძველებული)"),
("ec.obsolete.lightning", "Lightning", "ელვა"),
("ec.obsolete.mochashape", "Mocha shape", "Mocha-ს ფიგურა"),
("ec.obsolete.pathtext", "Path Text", "ტექსტი ტრაექტორიაზე"),
("ec.paint.paint", "Paint", "ხატვა"),
("ec.perspective.3dglasses", "3D Glasses", "3D სათვალე"),
("ec.perspective.bevelalpha", "Bevel Alpha", "ალფას ფასკა"),
("ec.perspective.beveledges", "Bevel Edges", "კიდეების ფასკა"),
("ec.perspective.cameratracker", "3D Camera Tracker", "3D კამერის ტრეკერი"),
("ec.perspective.cccylinder", "CC Cylinder", "CC Cylinder"),
("ec.perspective.ccenvironment", "CC Environment", "CC Environment"),
("ec.perspective.ccsphere", "CC Sphere", "CC Sphere"),
("ec.perspective.ccspotlight", "CC Spotlight", "CC Spotlight"),
("ec.perspective.dropshadow", "Drop Shadow", "ჩრდილი"),
("ec.perspective.radialshadow", "Radial Shadow", "რადიალური ჩრდილი"),
("ec.sim.carddance", "Card Dance", "მოცეკვავე ბარათები"),
("ec.sim.caustics", "Caustics", "კაუსტიკა"),
("ec.sim.ccballaction", "CC Ball Action", "CC Ball Action"),
("ec.sim.ccbubbles", "CC Bubbles", "CC Bubbles"),
("ec.sim.ccdrizzle", "CC Drizzle", "CC Drizzle"),
("ec.sim.cchair", "CC Hair", "CC Hair"),
("ec.sim.ccmrmercury", "CC Mr. Mercury", "CC Mr. Mercury"),
("ec.sim.ccparticlesystems2", "CC Particle Systems II", "CC Particle Systems II"),
("ec.sim.ccparticleworld", "CC Particle World", "CC Particle World"),
("ec.sim.ccpixelpolly", "CC Pixel Polly", "CC Pixel Polly"),
("ec.sim.ccrainfall", "CC Rainfall", "CC Rainfall"),
("ec.sim.ccscatterize", "CC Scatterize", "CC Scatterize"),
("ec.sim.ccsnowfall", "CC Snowfall", "CC Snowfall"),
("ec.sim.ccstarburst", "CC Star Burst", "CC Star Burst"),
("ec.sim.foam", "Foam", "ქაფი"),
("ec.sim.particleplayground", "Particle Playground", "ნაწილაკების სიმულაცია"),
("ec.sim.shatter", "Shatter", "დამსხვრევა"),
("ec.sim.waveworld", "Wave World", "ტალღების სამყარო"),
("ec.stylize.brushstrokes", "Brush Strokes", "ფუნჯის შტრიხები"),
("ec.stylize.cartoon", "Cartoon", "მულტფილმის სტილი"),
("ec.stylize.ccblockload", "CC Block Load", "CC Block Load"),
("ec.stylize.ccburnfilm", "CC Burn Film", "CC Burn Film"),
("ec.stylize.ccglass", "CC Glass", "CC Glass"),
("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 Plastic"),
("ec.stylize.ccrepetile", "CC RepeTile", "CC RepeTile"),
("ec.stylize.ccthreshold", "CC Threshold", "CC Threshold"),
("ec.stylize.ccthresholdrgb", "CC Threshold RGB", "CC Threshold RGB"),
("ec.stylize.ccvignette", "CC Vignette", "CC Vignette"),
("ec.stylize.coloremboss", "Color Emboss", "ფერადი რელიეფი"),
("ec.stylize.emboss", "Emboss", "რელიეფი"),
("ec.stylize.findedges", "Find Edges", "კიდეების პოვნა"),
("ec.stylize.glow", "Glow", "ნათება"),
("ec.stylize.mosaic", "Mosaic", "მოზაიკა"),
("ec.stylize.motiontile", "Motion Tile", "მოძრავი ფილები"),
("ec.stylize.posterize", "Posterize", "პოსტერიზაცია"),
("ec.stylize.roughenedges", "Roughen Edges", "კიდეების დაუხეშება"),
("ec.stylize.scatter", "Scatter", "გაბნევა"),
("ec.stylize.strobe", "Strobe Light", "სტრობოსკოპი"),
("ec.stylize.texturize", "Texturize", "ტექსტურირება"),
("ec.stylize.threshold", "Threshold", "ზღვარი"),
("ec.text.numbers", "Numbers", "რიცხვები"),
("ec.text.timecode", "Timecode", "თაიმკოდი"),
("ec.time.ccforcemotionblur", "CC Force Motion Blur", "CC Force Motion Blur"),
("ec.time.ccwidetime", "CC Wide Time", "CC Wide Time"),
("ec.time.echo", "Echo", "ექო"),
("ec.time.pixelmotionblur", "Pixel Motion Blur", "პიქსელების მოძრაობის გაბუნდოვნება"),
("ec.time.posterizetime", "Posterize Time", "დროის პოსტერიზაცია"),
("ec.time.timedifference", "Time Difference", "დროითი სხვაობა"),
("ec.time.timedisplacement", "Time Displacement", "დროითი წანაცვლება"),
("ec.time.timewarp", "Timewarp", "Timewarp"),
("ec.transition.blockdissolve", "Block Dissolve", "ბლოკური გადადნობა"),
("ec.transition.cardwipe", "Card Wipe", "ბარათებით წმენდა"),
("ec.transition.ccglasswipe", "CC Glass Wipe", "CC Glass Wipe"),
("ec.transition.ccgridwipe", "CC Grid Wipe", "CC Grid Wipe"),
("ec.transition.ccimagewipe", "CC Image Wipe", "CC Image Wipe"),
("ec.transition.ccjaws", "CC Jaws", "CC Jaws"),
("ec.transition.cclightwipe", "CC Light Wipe", "CC Light Wipe"),
("ec.transition.cclinesweep", "CC Line Sweep", "CC Line Sweep"),
("ec.transition.ccradialscalewipe", "CC Radial ScaleWipe", "CC Radial ScaleWipe"),
("ec.transition.ccscalewipe", "CC Scale Wipe", "CC Scale Wipe"),
("ec.transition.cctwister", "CC Twister", "CC Twister"),
("ec.transition.ccwarpomatic", "CC WarpoMatic", "CC WarpoMatic"),
("ec.transition.gradientwipe", "Gradient Wipe", "გრადიენტული წმენდა"),
("ec.transition.iriswipe", "Iris Wipe", "დიაფრაგმული წმენდა"),
("ec.transition.linearwipe", "Linear Wipe", "წრფივი წმენდა"),
("ec.transition.radialwipe", "Radial Wipe", "რადიალური წმენდა"),
("ec.transition.venetian", "Venetian Blinds", "ჟალუზი"),
("ec.utility.applylut", "Apply Color LUT", "ფერის LUT-ის გამოყენება"),
("ec.utility.ccoverbrights", "CC Overbrights", "CC Overbrights"),
("ec.utility.cineon", "Cineon Converter", "Cineon-ის გარდამქმნელი"),
("ec.utility.colorprofileconverter", "Color Profile Converter", "ფერის პროფილის გარდამქმნელი"),
("ec.utility.facemeasurements", "Face Measurements", "სახის გაზომვები"),
("ec.utility.facetrackpoints", "Face Track Points", "სახის ტრეკინგის წერტილები"),
("ec.utility.growbounds", "Grow Bounds", "საზღვრების გაზრდა"),
("ec.utility.hdrcompander", "HDR Compander", "HDR კომპანდერი"),
("ec.utility.hdrcompression", "HDR Highlight Compression", "HDR ღია ტონების შეკუმშვა"),
("ec.vr.blur", "VR Blur", "VR გაბუნდოვნება"),
("ec.vr.chromaticaberrations", "VR Chromatic Aberrations", "VR ქრომატული აბერაციები"),
("ec.vr.colorgradients", "VR Color Gradients", "VR ფერადი გრადიენტები"),
("ec.vr.converter", "VR Converter", "VR გარდამქმნელი"),
("ec.vr.denoise", "VR De-Noise", "VR ხმაურის მოცილება"),
("ec.vr.digitalglitch", "VR Digital Glitch", "VR ციფრული ხარვეზი"),
("ec.vr.fractalnoise", "VR Fractal Noise", "VR ფრაქტალური ხმაური"),
("ec.vr.glow", "VR Glow", "VR ნათება"),
("ec.vr.planetosphere", "VR Plane to Sphere", "VR სიბრტყიდან სფეროზე"),
("ec.vr.rotatesphere", "VR Rotate Sphere", "VR სფეროს შემობრუნება"),
("ec.vr.sharpen", "VR Sharpen", "VR სიმკვეთრე"),
("ec.vr.spheretoplane", "VR Sphere to Plane", "VR სფეროდან სიბრტყეზე"),
];
/// Georgian (`ka`) category labels, keyed by the registry's English category.
const GEORGIAN_CATEGORIES: &[(&str, &str)] = &[
("3D Channel", "3D არხი"),
("Audio", "აუდიო"),
("Blur & Sharpen", "გაბუნდოვნება და სიმკვეთრე"),
("Channel", "არხი"),
("Color Correction", "ფერის კორექცია"),
("Distort", "დამახინჯება"),
("Expression Controls", "ექსპრესიის მართვა"),
("Generate", "გენერაცია"),
("Immersive Video", "იმერსიული ვიდეო"),
("Keying", "კეიინგი"),
("Matte", "მატი"),
("Noise & Grain", "ხმაური და მარცვლოვნება"),
("Obsolete", "მოძველებული"),
("Paint", "ხატვა"),
("Perspective", "პერსპექტივა"),
("Simulation", "სიმულაცია"),
("Stylize", "სტილიზაცია"),
("Text", "ტექსტი"),
("Time", "დრო"),
("Transition", "გადასვლა"),
("Utility", "დამხმარე"),
];
/// The 21 category folder names the generated Effect menu and Effects & Presets draw, in
/// Simplified Chinese. Read from the installed After Effects 2026 (26.5.0.89) Simplified Chinese
/// interface (the checklist's `07-类别` sheet); two of them are the interface's own wording where
@@ -566,7 +908,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)];
const PARTIAL: &[(&str, &[Row])] = &[("ja", JAPANESE_EFFECTS), ("ka", GEORGIAN)];
/// 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
@@ -595,7 +937,9 @@ 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)] {
for (language, rows) in
[("zh-hans", SIMPLIFIED_CHINESE_CATEGORIES), ("zh-hant", TRADITIONAL_CHINESE_CATEGORIES), ("ja", JAPANESE_CATEGORIES), ("ka", GEORGIAN_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}");
File diff suppressed because it is too large Load Diff
+23
View File
@@ -206,6 +206,8 @@ pub fn build(app: &EffectcraftApp) -> NativeMenu {
"Serviços"
} else if crate::i18n::czech(app) {
"Služby"
} else if crate::i18n::georgian(app) {
"სერვისები"
} else {
"Services"
}
@@ -490,6 +492,27 @@ mod tests {
assert_eq!(translated, ["Služby", "Skrýt EffectCraft", "Skrýt ostatní", "Zobrazit vše"]);
}
#[test]
fn georgian_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": "ka"})).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, ["სერვისები", "EffectCraft-ის დამალვა", "სხვების დამალვა", "ყველას ჩვენება"]);
}
#[test]
fn hide_items_are_predefined_on_macos() {
let spec = build(&app());
+4 -2
View File
@@ -120,7 +120,9 @@ pub fn show(app: &mut EffectcraftApp, ui: &mut egui::Ui, rect: Rect) {
divider(&p, x0, w, y - 4.0, &t);
section_header(app, ui, &p, x0, w, y + 4.0, "Text Animation", "properties.textAnimation");
y += ROW_H + 10.0;
let br = Rect::from_min_size(pos2(x0, y), vec2(116.0, 24.0));
// Both buttons grow with their (translated) labels; English keeps its 116 / 84 px.
let text_w = |s: &str| p.layout_no_wrap(s.to_string(), Tokens::ui(12.0), t.text).size().x;
let br = Rect::from_min_size(pos2(x0, y), vec2(116f32.max(text_w(crate::i18n::tr("Add Animator")) + 36.0), 24.0));
let resp = ui.interact(br, egui::Id::new("props-add-animator"), Sense::click());
p.rect_stroke(br, 4.0, Stroke::new(1.0, if resp.hovered() { t.text_dim } else { t.field_border }), egui::StrokeKind::Inside);
icons::paint(&p, Rect::from_center_size(pos2(br.min.x + 14.0, br.center().y), vec2(10.0, 10.0)), Icon::Plus, t.text);
@@ -142,7 +144,7 @@ pub fn show(app: &mut EffectcraftApp, ui: &mut egui::Ui, rect: Rect) {
}
}
// Our own presets (original work, see presets/text_animators.json).
let pr = Rect::from_min_size(pos2(br.max.x + 8.0, y), vec2(84.0, 24.0));
let pr = Rect::from_min_size(pos2(br.max.x + 8.0, y), vec2(84f32.max(text_w(crate::i18n::tr("Presets")) + 16.0), 24.0));
let presp = ui.interact(pr, egui::Id::new("props-text-presets"), Sense::click());
p.rect_stroke(pr, 4.0, Stroke::new(1.0, if presp.hovered() { t.text_dim } else { t.field_border }), egui::StrokeKind::Inside);
p.text(pr.center(), Align2::CENTER_CENTER, crate::i18n::tr("Presets"), Tokens::ui(12.0), t.text);
+12
View File
@@ -370,6 +370,7 @@ const SCRIPT_PROBES: &[(char, &str)] = &[
('ಕ', "kannada-system"),
('ക', "malayalam-system"),
('ก', "thai-system"),
('ა', "georgian-system"),
];
/// Register the system fallbacks for scripts the bundled fonts lack in every font family, and
@@ -661,6 +662,17 @@ mod script_font_tests {
}
}
/// The Georgian interface draws its Mkhedruli text with an installed Georgian face (Sylfaen,
/// SF Georgian, Noto Sans Georgian…): Inter has no Georgian, so the labels showed as boxes.
#[test]
fn installed_georgian_fallback_draws_the_georgian_interface() {
if !installed('ა') {
eprintln!("no Georgian system font installed; skipping glyph coverage");
return;
}
assert_drawn("ka", "კომპოზიციაფენასაკვანძოკადრიეფექტიპარამეტრები");
}
/// #1141: switching the interface to Simplified Chinese drew most labels as boxes. A Japanese face
/// can cover the Han probe while lacking other catalog characters. The context must keep its
/// own language policy even when another context installs Japanese fallbacks concurrently.
+3 -3
View File
@@ -72,7 +72,7 @@ are grouped by area; the issue tracker has the rest.
| 13 | **3D model formats and materials** | After Effects 26 imports FBX, USD/USDZ, STL besides glTF and OBJ (`usd_plugins`), and Substance 3D materials with mesh displacement (26.0–26.2); we read glTF, OBJ, STL (binary and ASCII, with facet colours) and FBX 7.x (binary and ASCII: meshes, hierarchy, Lambert/Phong materials and textures; no FBX animation or skinning yet) | Product shots and 3D scenes come as FBX/USDZ | 25–45 h | — · [file-format-parity.md](file-format-parity.md) |
| 14 | **Object Matte** (26.2, disk cache in 26.5) | First slice (#783): the Object Matte effect (Effect ▸ Matte) and `objectMatte.apply` turn a point (and optional box) on a reference frame into a matte and follow the object up to 600 frames each way, or segment every frame on its own; Roto Brush's engine, cache and model (MobileSAM from Settings ▸ Roto Brush, classical graph cut without it). Since then: the Object Matte tool in the viewer (click / drag a box, hover crosshair), the box as the model's box prompt, background tracking with progress and cancel, Freeze, and segmentations kept in the disk cache (26.5). Missing: a comparison with After Effects ([plan](fidelity/object-matte.md)) | The new one-click roto | 10–20 h | G7 · [target-app-parity.md](target-app-parity.md) |
| 15 | **Hardware video decode and encode** | No VideoToolbox, NVENC, Quick Sync or VA-API; #498 asks for it (answered: CUDA / NVENC need Nvidia's proprietary SDK through FFI, which the no-`unsafe` rule forbids); open PR #819 adds hardware decoding via `filmcraft-platform`; FilmCraft has VideoToolbox / NVENC / VA-API paths to borrow | 4K playback and export speed | 25–45 h | G5/G6 · [hardware-parity.md](hardware-parity.md) |
| 16 | **Localization depth** | Menus in 10 languages (ja, zh-hans, zh-hant, uk, es, pt-br, ru, fr, de, cs: 624 rows each); panels in 6 (ja, zh-hans, zh-hant, uk, pt-br, cs); effect names translated in Simplified Chinese (306, plus the generated Effect menu), their ~1,650 parameter names untranslated; Korean and Italian (After Effects ships them) absent; Hangul probe added (#599 closed) | After Effects is used heavily in Japan, China, Korea, Brazil, Europe | 60–110 h + native review | G9 · [localization-parity.md](localization-parity.md) |
| 16 | **Localization depth** | Menus in 11 languages (ja, zh-hans, zh-hant, uk, es, pt-br, ru, fr, de, cs, ka: 628 rows each); panels in 7 (ja, zh-hans, zh-hant, uk, pt-br, cs, ka); effect names translated in Simplified Chinese and Georgian (307, plus the generated Effect menu), their ~1,650 parameter names untranslated; Korean and Italian (After Effects ships them) absent; Hangul probe added (#599 closed) | After Effects is used heavily in Japan, China, Korea, Brazil, Europe | 60–110 h + native review | G9 · [localization-parity.md](localization-parity.md) |
| 17 | **Media Browser lists files import refuses** | `media_browser.rs` lists AVI; `media::is_importable` has none of them (Targa and Radiance HDR import since #745; DPX and Cineon since #756, log shown as stored: no Cineon Settings conversion yet; MXF OP1a / OP-Atom since #767; FilmCraft has no AVI demuxer); #431 and #324 closed | Confusing failures on common VFX formats | 15–30 h | G6 · [file-format-parity.md](file-format-parity.md) |
| 18 | **Relative paths and relinking** | Projects store absolute footage paths; no relink when a project moves | Moving or sharing a project breaks it | 6–12 h | G4 · [file-format-parity.md](file-format-parity.md) |
| 19 | **Plug-in ecosystem** | No After Effects SDK hosting (#600, #327 OpenFX, #334, #376 plug-in manager); our WebAssembly API has no third-party plug-ins | Many pro projects depend on Trapcode, Element, Saber… | 40–80 h for API growth; SDK hosting needs an owner decision | G8 · [scripting-parity.md](scripting-parity.md) |
@@ -313,8 +313,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 and Czech, and the panel catalog covers
Japanese, both Chinese, Ukrainian, Brazilian Portuguese and Czech. Next: effect and parameter
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
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
+7 -4
View File
@@ -1,6 +1,6 @@
# Localization parity
> **Last reviewed:** 2026-10-12 · **Last updated:** 2026-10-23 · **Change:** minor (missing strings show in English; `missing_translations_report` lists them) · **Target:** Adobe After Effects 2026
> **Last reviewed:** 2026-10-14 · **Last updated:** 2026-10-23 · **Change:** minor (Georgian: menus, panels and effect names; missing strings show in English; `missing_translations_report` lists them) · **Target:** Adobe After Effects 2026
How much of EffectCraft's interface is translated, language by language, compared with After
Effects. [gaps.md](gaps.md) gap 16 and workstream G9 hold the work;
@@ -24,9 +24,10 @@ interface; Arabic and Hebrew text *in layers* is supported through its Middle Ea
- **Panels, dialogs, buttons, tooltips:** `crates/ui-egui/src/i18n/ui.rs`, keyed by the English
source string, with English fallback. Catalogs exist for Japanese (410 rows), Simplified and
Traditional Chinese (506 each), Ukrainian (505), Brazilian Portuguese (400) and Czech (501);
counted at 470ea7a3.
counted at 470ea7a3. Georgian has every row the Chinese catalogs have at this revision (695, as
both Chinese catalogs now have), plus 191 for panels converted to the catalog.
- **Effect names:** `crates/ui-egui/src/i18n/effects.rs`, keyed by **effect id**, in Simplified
Chinese (306 rows, one per effect in the registry, plus its 21 categories). The registry's
Chinese and Georgian (307 rows, one per effect in the registry, 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
@@ -82,13 +83,14 @@ 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 (3):
Other languages EffectCraft ships (4):
| Language | Code | UI strings translated | Status | To `full` |
|---|---|---|---|---|
| Traditional Chinese | `zh-hant` | 1,130 (≈ 29%): menus 624 rows, panels 506 | partial | 6–9 h + review |
| Ukrainian | `uk` | 1,129 (≈ 29%): menus 624 rows, panels 505 | partial | 6–9 h + review |
| Czech | `cs` | 1,125 (≈ 29%): menus 624 rows, panels 501 | 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 628 rows, panels 886 (the Chinese catalogs' 695 plus 191 Georgian-only rows: form dialogs, context menus, column headers), effect names 307 + 21 categories; native-speaker reviewed | partial | 5–8 h |
Russian (`ru`) has a menu catalog (624 rows, ≈ 16%); After Effects also ships Italian, which EffectCraft does not (8–12 h).
@@ -110,6 +112,7 @@ can give; none has had it.
| Date | Change | Summary |
|---|---|---|
| 2026-10-12 | minor | Recounted: Russian, French, German and Czech menus (#873, #987), Brazilian Portuguese and Czech panels (#830, #987), Hangul probe (#599); overall ≈ 12% to ≈ 18%; Korean and Italian still absent |
| 2026-10-14 | minor | Georgian (`ka`): menus 628, panels 886 (191 Georgian-only, in `GEORGIAN_PANELS`), effect names and categories in `effects.rs` |
| 2026-10-10 | major | First localization parity document: catalog rows counted for all six languages, the twelve-language table, After Effects' 11 shipped languages from its bundle |
| 2026-10-11 | minor | Ukrainian panel catalog brought level with the Chinese ones (495 of 496 rows, counted at this commit); its share rises to ≈ 29%. The other languages' panel counts are the 10 October measurement |
| 2026-10-13 | minor | Effect names and the generated Effect menu leave English: `i18n/effects.rs` adds 306 rows keyed by effect id (Simplified Chinese, from After Effects 2026's interface and Adobe's Chinese documentation for the `CC` series) and the 21 category names. Parameter names are still English; no other language has rows |
+1 -1
View File
@@ -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`), 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`; 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`), 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.undoLevels`: Levels of Undo
- `general.pathPointSize`: Path Point and Handle Size
- `general.recentItems`: Recent Projects Shown